diff --git a/DEPS b/DEPS index 2a50cac..9ea69e52 100644 --- a/DEPS +++ b/DEPS
@@ -245,11 +245,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'a379b7d4a3d48e3b4e9ae05fb8f5d45c47d94b91', + 'skia_revision': '575d0c5e1d1122420265ad09ffb3a70a30bb5914', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'e71f02677bbbd96acd659b3a168f15ff596ce4ef', + 'v8_revision': '9535766935a4e6563f552f1d41bb1c959201d161', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. @@ -320,7 +320,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': '72ee54b64e74d79938d55d8b5cc7781a5c144d37', + 'devtools_frontend_revision': '298322adb15e02ae13d0d2b516256c7c71bd4d75', # 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. @@ -360,7 +360,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'a78192741e2300007799b1644783b13c9aaca708', + 'dawn_revision': '3148b49730b762b130c8e4d90b025d87ebdbf303', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -733,7 +733,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'jfClt7LS3XufryXjdYojcL_7rUpdrl0JlgRfR8ZsWnUC', + 'version': 'zADO04ES7cNrnQ8PgpCuz-JHi6i46cMnZcnwkBQ0N0YC', }, ], 'dep_type': 'cipd', @@ -744,7 +744,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'RM75lQXxiUml_IPApQ64pr2AJMImx727FrI8liX00KAC', + 'version': '2BfQWeof_w_rdBMvio_7-FSu88J6A7_-KiP2YTYHDqwC', }, ], 'dep_type': 'cipd', @@ -805,7 +805,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': '5A6-vFfKBBqjWxMf3X5-bFSV_gRaWMhZwAKo7mR2WsgC', + 'version': 'cvnN-qE6n5AuBxEsTtzpda1KG8oF_QAjRf62bBkmqhkC', }, ], 'condition': 'checkout_android', @@ -1024,7 +1024,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '0bcf2265a78b0eb5034bd8d8bfa6eb3db482fa1f', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'f36bcfd926407cd1356a709aac7ad8c5287b0c4e', 'condition': 'checkout_chromeos', }, @@ -1648,7 +1648,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'fca7b339442bd70c5dc49bb33ee7f9466b560a97', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '766c80b2564b8af82f9f500e2825f2bc6e5b2d5f', + Var('webrtc_git') + '/src.git' + '@' + '6b667a8fe2bbe69c0857c2dd93b66c159c3378f0', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1718,7 +1718,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@5dd937e8ef614004545e50612e7f0849500f8c01', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@b9aa1bc1822c8011619775275c799e3a92fce390', 'condition': 'checkout_src_internal', }, @@ -1748,7 +1748,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'YOseUIB09TJa-n0y0G2xORAcV3n6KGyO9uhxXLPQHRAC', + 'version': 'rm5GL5A-SW4OyQ93o_wYp5fq9tGcjL-K5ZeMCpL9M4UC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1759,7 +1759,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'nxp-A809VoIxJs6enaEQ4p2-nkep-6PgZlYFlopdQRMC', + 'version': 'RN6Jld3FzeZ5TFHYNHCEOuI6ebQug6MnCCcMEoZ17a4C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/app_list/views/recent_apps_view.cc b/ash/app_list/views/recent_apps_view.cc index 8782df82..e0b82e6 100644 --- a/ash/app_list/views/recent_apps_view.cc +++ b/ash/app_list/views/recent_apps_view.cc
@@ -152,7 +152,26 @@ SetVisible(false); } -RecentAppsView::~RecentAppsView() = default; +RecentAppsView::~RecentAppsView() { + if (model_) + model_->RemoveObserver(this); +} + +void RecentAppsView::OnAppListItemWillBeDeleted(AppListItem* item) { + std::vector<AppListItemView*> views_to_delete; + + for (AppListItemView* view : item_views_) { + if (!view->item() || view->item() == item) + views_to_delete.push_back(view); + } + + for (AppListItemView* view : views_to_delete) { + RemoveChildView(view); + base::Erase(item_views_, view); + } + + SetVisible(item_views_.size() >= kMinRecommendedApps); +} void RecentAppsView::UpdateAppListConfig(const AppListConfig* app_list_config) { app_list_config_ = app_list_config; @@ -167,6 +186,14 @@ item_views_.clear(); RemoveAllChildViews(); + if (model_ != model) { + if (model_) + model_->RemoveObserver(this); + model_ = model; + if (model_) + model_->AddObserver(this); + } + std::vector<std::string> app_ids = GetRecentAppIds(search_model); std::vector<AppListItem*> items;
diff --git a/ash/app_list/views/recent_apps_view.h b/ash/app_list/views/recent_apps_view.h index 88eb59b..5175cd6e 100644 --- a/ash/app_list/views/recent_apps_view.h +++ b/ash/app_list/views/recent_apps_view.h
@@ -9,6 +9,7 @@ #include <string> #include <vector> +#include "ash/app_list/model/app_list_model_observer.h" #include "ash/ash_export.h" #include "ui/base/metadata/metadata_header_macros.h" #include "ui/views/view.h" @@ -27,7 +28,8 @@ // The recent apps row in the "Continue" section of the bubble launcher. Shows // a list of app icons. -class ASH_EXPORT RecentAppsView : public views::View { +class ASH_EXPORT RecentAppsView : public AppListModelObserver, + public views::View { public: METADATA_HEADER(RecentAppsView); @@ -49,6 +51,9 @@ RecentAppsView& operator=(const RecentAppsView&) = delete; ~RecentAppsView() override; + // AppListModelObserver: + void OnAppListItemWillBeDeleted(AppListItem* item) override; + // Sets the `AppListConfig` that should be used to configure layout of // `AppListItemViews` shown within this view. void UpdateAppListConfig(const AppListConfig* app_list_config); @@ -88,6 +93,7 @@ AppListViewDelegate* const view_delegate_; const AppListConfig* app_list_config_ = nullptr; views::BoxLayout* layout_ = nullptr; + AppListModel* model_ = nullptr; // The grid delegate for each AppListItemView. class GridDelegateImpl;
diff --git a/ash/app_list/views/recent_apps_view_unittest.cc b/ash/app_list/views/recent_apps_view_unittest.cc index 26a4d12..74c7cda 100644 --- a/ash/app_list/views/recent_apps_view_unittest.cc +++ b/ash/app_list/views/recent_apps_view_unittest.cc
@@ -113,6 +113,10 @@ } } + void RemoveApp(const std::string& id) { + AppListModelProvider::Get()->model()->DeleteItem(id); + } + std::vector<AppListItemView*> GetAppListItemViews() { std::vector<AppListItemView*> views; RecentAppsView* recent_apps = GetRecentAppsView(); @@ -347,5 +351,23 @@ EXPECT_FALSE(GetRecentAppsView()->GetVisible()); } +TEST_P(RecentAppsViewTest, RemoveAppUpdatesRecentApps) { + AddAppResults(5); + ShowAppList(); + + // Verify initial set of shown apps. + EXPECT_EQ(std::vector<std::string>({"id0", "id1", "id2", "id3", "id4"}), + GetRecentAppsIds()); + + // Uninstall the first app. + RemoveApp("id0"); + + // Verify the visibility of the recent_apps section. + EXPECT_TRUE(GetRecentAppsView()->GetVisible()); + // Verify shown apps. + EXPECT_EQ(std::vector<std::string>({"id1", "id2", "id3", "id4"}), + GetRecentAppsIds()); +} + } // namespace } // namespace ash
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 7a61dac..ede454d 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -972,6 +972,7 @@ <translation id="7514365320538308">تنزيل</translation> <translation id="7526573455193969409">قد تكون الشبكة خاضعة للمراقبة</translation> <translation id="7536035074519304529">عنوان IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">تم تشغيل الإضاءة الخلفية للوحة المفاتيح.</translation> <translation id="7548434653388805669">وقت النوم</translation> <translation id="7551643184018910560">تثبيت في الرف</translation> <translation id="7561982940498449837">إغلاق القائمة</translation> @@ -1056,6 +1057,7 @@ <translation id="8036504271468642248">الجملة السابقة</translation> <translation id="8042893070933512245">فتح قائمة إعدادات "أدوات تمكين الوصول"</translation> <translation id="8042925093898452104">إغلاق المعلومات التفصيلية</translation> +<translation id="8044457332620420407">تم إيقاف الإضاءة الخلفية للوحة المفاتيح.</translation> <translation id="8048123526339889627">إعدادات البلوتوث</translation> <translation id="8051716679295756675">سبق وأن تم إدخال نموذج باسم <ph name="DESK_TEMPLATE_NAME" />.</translation> <translation id="8052898407431791827">تمّ النسخ إلى الحافظة.</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index d18323e..92c957e 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -239,7 +239,7 @@ <translation id="255671100581129685">L'Assistent de Google no està disponible a les sessions públiques.</translation> <translation id="256712445991462162">la lupa acoblada</translation> <translation id="2570734079541893434">Gestiona la configuració</translation> -<translation id="2573588302192866788">No s'ha pogut connectar <ph name="NAME" /></translation> +<translation id="2573588302192866788">No s'han pogut connectar els <ph name="NAME" /></translation> <translation id="2575685495496069081">L'inici de sessió múltiple s'ha desactivat</translation> <translation id="2582112259361606227">Reinicia per actualitzar</translation> <translation id="2595239820337756193">5 km en milles</translation> @@ -406,7 +406,7 @@ <translation id="3630697955794050612">desactivat</translation> <translation id="3631369015426612114">Permet notificacions de les fonts següents:</translation> <translation id="3638400994746983214">Commuta la pantalla de privadesa. <ph name="STATE_TEXT" />.</translation> -<translation id="3640092422335864171">Desa el dispositiu <ph name="NAME" /></translation> +<translation id="3640092422335864171">Desa els <ph name="NAME" /></translation> <translation id="3649505501900178324">Actualització pendent</translation> <translation id="366222428570480733">Usuari gestionat (<ph name="USER_EMAIL_ADDRESS" />)</translation> <translation id="3665889125180354336">Grava el micròfon</translation> @@ -424,7 +424,7 @@ <translation id="3742055079367172538">Captura de pantalla feta</translation> <translation id="3771549900096082774">Mode d'alt contrast</translation> <translation id="3773700760453577392">Un administrador ha desactivat l'inici de sessió múltiple per a <ph name="USER_EMAIL" />. Tots els usuaris han de tancar la sessió per continuar.</translation> -<translation id="3779139509281456663">S'està connectant <ph name="NAME" /></translation> +<translation id="3779139509281456663">S'estan connectant els <ph name="NAME" /></translation> <translation id="3783640748446814672">alt</translation> <translation id="3784455785234192852">Bloqueja</translation> <translation id="3796746699333205839">Una aplicació està utilitzant la càmera i el micròfon</translation> @@ -488,7 +488,7 @@ <translation id="4215497585250573029">Configuració de VPN</translation> <translation id="4217571870635786043">Dictat</translation> <translation id="4221957499226645091"><ph name="APP_NAME" />, aplicació instal·lada, en pausa</translation> -<translation id="4223947355273782392">Desa el dispositiu <ph name="NAME" /> al compte <ph name="EMAIL" /> perquè es vinculi ràpidament als teus altres dispositius</translation> +<translation id="4223947355273782392">Desa els <ph name="NAME" /> a <ph name="EMAIL" /> perquè es vinculin ràpidament als teus altres dispositius</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4242533952199664413">Obre la configuració</translation> <translation id="4250229828105606438">Captura de pantalla</translation> @@ -971,6 +971,7 @@ <translation id="7514365320538308">Baixa</translation> <translation id="7526573455193969409">És possible que la xarxa estigui supervisada</translation> <translation id="7536035074519304529">Adreça IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">La il·luminació a contrallum del teclat està activada</translation> <translation id="7548434653388805669">Ara toca anar a dormir</translation> <translation id="7551643184018910560">Fixa al prestatge</translation> <translation id="7561982940498449837">Tanca el menú</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Frase anterior</translation> <translation id="8042893070933512245">Obre el menú de configuració d'accessibilitat</translation> <translation id="8042925093898452104">Tanca la informació detallada</translation> +<translation id="8044457332620420407">La il·luminació a contrallum del teclat està desactivada</translation> <translation id="8048123526339889627">Configuració del Bluetooth</translation> <translation id="8051716679295756675">La plantilla anomenada <ph name="DESK_TEMPLATE_NAME" /> ja existeix</translation> <translation id="8052898407431791827">S'ha copiat al porta-retalls</translation> @@ -1220,7 +1222,7 @@ <translation id="9193626018745640770">S'està emetent contingut en un receptor desconegut</translation> <translation id="9194617393863864469">Inicia la sessió amb un altre usuari...</translation> <translation id="9198992156681343238">La resolució de la pantalla <ph name="DISPLAY_NAME" /> ha canviat a <ph name="RESOLUTION" />. Fes clic a Confirma per conservar els canvis. La configuració anterior es restaurarà d'aquí a <ph name="TIMEOUT_SECONDS" />.</translation> -<translation id="9201044636667689546">Connecta <ph name="NAME" /> a aquest Chromebook</translation> +<translation id="9201044636667689546">Connecta els <ph name="NAME" /> a aquest Chromebook</translation> <translation id="9201374708878217446"><ph name="CONNECTION_STATUS" />, gestionada per l'administrador</translation> <translation id="9210037371811586452">S'està sortint del mode d'escriptori unificat</translation> <translation id="9211490828691860325">Tots els escriptoris</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index b61e7e2..4307a6d 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -239,7 +239,7 @@ <translation id="255671100581129685">Google Assistent er ikke tilgængelig i en offentlig session.</translation> <translation id="256712445991462162">den fastgjorte lup</translation> <translation id="2570734079541893434">Administrer indstillinger</translation> -<translation id="2573588302192866788"><ph name="NAME" /> kunne ikke tilknyttes</translation> +<translation id="2573588302192866788">Forbindelsen til <ph name="NAME" /> kunne ikke oprettes</translation> <translation id="2575685495496069081">Samlet login fra flere konti er deaktiveret</translation> <translation id="2582112259361606227">Genstart for at opdatere</translation> <translation id="2595239820337756193">5 kilometer i miles</translation> @@ -424,7 +424,7 @@ <translation id="3742055079367172538">Screenshottet blev gemt</translation> <translation id="3771549900096082774">Tilstanden Høj kontrast</translation> <translation id="3773700760453577392">En administrator har afvist samlet login fra flere konti for <ph name="USER_EMAIL" />. Alle brugere skal logge ud for at fortsætte.</translation> -<translation id="3779139509281456663">Tilknytter <ph name="NAME" /></translation> +<translation id="3779139509281456663">Opretter forbindelse til <ph name="NAME" /></translation> <translation id="3783640748446814672">alt</translation> <translation id="3784455785234192852">Lås</translation> <translation id="3796746699333205839">Dit kamera og din telefon anvendes af en app</translation> @@ -653,7 +653,7 @@ <translation id="5297423144044956168">Der blev ikke fundet nogen mobilenheder</translation> <translation id="5297704307811127955">Fra</translation> <translation id="5302048478445481009">Sprog</translation> -<translation id="5308380583665731573">Få forbindelse</translation> +<translation id="5308380583665731573">Opret forbindelse</translation> <translation id="5313326810920013265">Indstillinger for Bluetooth</translation> <translation id="5314219114274263156">Skærmen blev optaget</translation> <translation id="5317780077021120954">Gem</translation> @@ -941,7 +941,7 @@ <translation id="7348093485538360975">Skærmtastatur</translation> <translation id="735745346212279324">VPN afbrudt</translation> <translation id="7360036564632145207">Du kan forbedre ydeevnen ved at ændre indstillingen Beskyttelse af dataadgang for eksterne enheder</translation> -<translation id="7366890467478514168">Tilknyt <ph name="NAME" /></translation> +<translation id="7366890467478514168">Opret forbindelse til <ph name="NAME" /></translation> <translation id="7371404428569700291">Optag vindue</translation> <translation id="7377169924702866686">Caps Lock er slået til.</translation> <translation id="7378203170292176219">Træk for at vælge et område, der skal optages</translation> @@ -1220,7 +1220,7 @@ <translation id="9193626018745640770">Caster på en ukendt modtager</translation> <translation id="9194617393863864469">Log ind med en anden bruger...</translation> <translation id="9198992156681343238">Opløsningen for <ph name="DISPLAY_NAME" /> er blevet ændret til <ph name="RESOLUTION" />. Klik på Bekræft for at gemme ændringerne. De tidligere indstillinger gendannes om <ph name="TIMEOUT_SECONDS" />.</translation> -<translation id="9201044636667689546">Knyt <ph name="NAME" /> til denne Chromebook</translation> +<translation id="9201044636667689546">Opret forbindelse mellem <ph name="NAME" /> og denne Chromebook</translation> <translation id="9201374708878217446"><ph name="CONNECTION_STATUS" />, administreret af din administrator</translation> <translation id="9210037371811586452">Lukker tilstanden Kombineret skrivebord</translation> <translation id="9211490828691860325">Alle skriveborde</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index 8a975ea..cf89795a 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -968,6 +968,7 @@ <translation id="7514365320538308">Herunterladen</translation> <translation id="7526573455193969409">Das Netzwerk wird möglicherweise überwacht</translation> <translation id="7536035074519304529">IP-Adresse: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Hintergrundbeleuchtung der Tastatur ist an</translation> <translation id="7548434653388805669">Schlafenszeit</translation> <translation id="7551643184018910560">An Ablage anpinnen</translation> <translation id="7561982940498449837">Menü schließen</translation> @@ -1051,6 +1052,7 @@ <translation id="8036504271468642248">Vorheriger Satz</translation> <translation id="8042893070933512245">Menü "Bedienungshilfen" öffnen</translation> <translation id="8042925093898452104">Details schließen</translation> +<translation id="8044457332620420407">Hintergrundbeleuchtung der Tastatur ist aus</translation> <translation id="8048123526339889627">Bluetooth-Einstellungen</translation> <translation id="8051716679295756675">Eine Vorlage namens „<ph name="DESK_TEMPLATE_NAME" />“ ist bereits vorhanden</translation> <translation id="8052898407431791827">In Zwischenablage kopiert</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 17fb59b..2cb2caa3 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -239,7 +239,7 @@ <translation id="255671100581129685">El Asistente de Google no está disponible en las sesiones públicas.</translation> <translation id="256712445991462162">la lupa fijada</translation> <translation id="2570734079541893434">Gestionar configuración</translation> -<translation id="2573588302192866788">No se ha podido conectar <ph name="NAME" /></translation> +<translation id="2573588302192866788">No se ha podido conectar (<ph name="NAME" />)</translation> <translation id="2575685495496069081">Se ha inhabilitado el inicio de sesión múltiple</translation> <translation id="2582112259361606227">Reiniciar para actualizar</translation> <translation id="2595239820337756193">5 km en millas</translation> @@ -842,7 +842,7 @@ <translation id="6614169507485700968">La pantalla de privacidad está activada</translation> <translation id="6627638273713273709">Tecla de búsqueda + Mayús + K</translation> <translation id="6629480180092995136"><ph name="APP_NAME" /> quiere usar el micrófono</translation> -<translation id="6630773993843701741">Abre los ajustes de Bluetooth para vincular el dispositivo de forma manual</translation> +<translation id="6630773993843701741">Abre los ajustes de Bluetooth para emparejar manualmente</translation> <translation id="6637729079642709226">Cambiar hora</translation> <translation id="6641720045729354415">Activar/Desactivar Subtítulos automáticos. <ph name="STATE_TEXT" /></translation> <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> quiere confirmar que eres tú</translation> @@ -972,6 +972,7 @@ <translation id="7514365320538308">Descargar</translation> <translation id="7526573455193969409">Es posible que la red esté supervisada</translation> <translation id="7536035074519304529">Dirección IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">La retroiluminación del teclado está activada</translation> <translation id="7548434653388805669">Es hora de acostarse</translation> <translation id="7551643184018910560">Fijar en la estantería</translation> <translation id="7561982940498449837">Cerrar menú</translation> @@ -1056,6 +1057,7 @@ <translation id="8036504271468642248">Frase anterior</translation> <translation id="8042893070933512245">Abrir menú de configuración de accesibilidad</translation> <translation id="8042925093898452104">Cerrar información detallada</translation> +<translation id="8044457332620420407">La retroiluminación del teclado está desactivada</translation> <translation id="8048123526339889627">Configuración de Bluetooth</translation> <translation id="8051716679295756675">Ya existe una plantilla llamada <ph name="DESK_TEMPLATE_NAME" /></translation> <translation id="8052898407431791827">Copiada en el portapapeles</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 2146c6a..6d2ff1b 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -972,6 +972,7 @@ <translation id="7514365320538308">Laadi alla</translation> <translation id="7526573455193969409">Võrku võidakse jälgida</translation> <translation id="7536035074519304529">IP-adress: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Klaviatuuri taustavalgus on sisse lülitatud</translation> <translation id="7548434653388805669">Aeg magama minna</translation> <translation id="7551643184018910560">Riiulile kinnitamine</translation> <translation id="7561982940498449837">Sule menüü</translation> @@ -1056,6 +1057,7 @@ <translation id="8036504271468642248">Eelmine lause</translation> <translation id="8042893070933512245">Ava juurdepääsetavuse seadete menüü</translation> <translation id="8042925093898452104">Sule üksikasjalik teave</translation> +<translation id="8044457332620420407">Klaviatuuri taustavalgus on välja lülitatud</translation> <translation id="8048123526339889627">Bluetoothi seaded</translation> <translation id="8051716679295756675">Mall nimega <ph name="DESK_TEMPLATE_NAME" /> on juba olemas</translation> <translation id="8052898407431791827">Lõikelauale kopeeritud</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index b704e7d7..d694dc1 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">بارگیری</translation> <translation id="7526573455193969409">ممکن است شبکه پایش شود</translation> <translation id="7536035074519304529">نشانی IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">نور پسزمینه صفحهکلید روشن شد</translation> <translation id="7548434653388805669">وقت خواب</translation> <translation id="7551643184018910560">سنجاق کردن به فقسه</translation> <translation id="7561982940498449837">بستن منو</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">جمله قبلی</translation> <translation id="8042893070933512245">باز کردن منوی تنظیمات دسترسپذیری</translation> <translation id="8042925093898452104">بستن اطلاعات دقیق</translation> +<translation id="8044457332620420407">نور پسزمینه صفحهکلید خاموش شد</translation> <translation id="8048123526339889627">تنظیمات بلوتوث</translation> <translation id="8051716679295756675">الگویی با نام <ph name="DESK_TEMPLATE_NAME" /> ازقبل وجود دارد</translation> <translation id="8052898407431791827">در بریدهدان کپی شد</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index 227baad1..b0378a2 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -970,6 +970,7 @@ <translation id="7514365320538308">Lataa</translation> <translation id="7526573455193969409">Verkkoa saatetaan valvoa</translation> <translation id="7536035074519304529">IP-osoite: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Näppäimistön taustavalo on päällä</translation> <translation id="7548434653388805669">Nukkumaanmenoaika</translation> <translation id="7551643184018910560">Kiinnitä hyllyyn</translation> <translation id="7561982940498449837">Sulje valikko</translation> @@ -1054,6 +1055,7 @@ <translation id="8036504271468642248">Edellinen lause</translation> <translation id="8042893070933512245">Avaa Esteettömyysasetukset-valikko</translation> <translation id="8042925093898452104">Sulje lisätiedot</translation> +<translation id="8044457332620420407">Näppäimistön taustavalo on poissa päältä</translation> <translation id="8048123526339889627">Bluetooth-asetukset</translation> <translation id="8051716679295756675">Malli nimeltään <ph name="DESK_TEMPLATE_NAME" /> on jo olemassa</translation> <translation id="8052898407431791827">Kopioitu leikepöydälle</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index 7e74356..d37bad3 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">I-download</translation> <translation id="7526573455193969409">Maaaring sinusubaybayan ang network</translation> <translation id="7536035074519304529">IP address: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Na-on ang backlight ng keyboard</translation> <translation id="7548434653388805669">Oras nang matulog</translation> <translation id="7551643184018910560">I-pin sa shelf</translation> <translation id="7561982940498449837">Isara ang menu</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Nakaraang pangungusap</translation> <translation id="8042893070933512245">Buksan ang menu ng mga setting ng accessibility</translation> <translation id="8042925093898452104">Isara ang impormasyon ng detalye</translation> +<translation id="8044457332620420407">Na-off ang backlight ng keyboard</translation> <translation id="8048123526339889627">Mga Setting ng Bluetooth</translation> <translation id="8051716679295756675">May template nang may pangalang <ph name="DESK_TEMPLATE_NAME" /></translation> <translation id="8052898407431791827">Kinopya sa clipboard</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index 5d558f3..aefa90f 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">ડાઉનલોડ કરો</translation> <translation id="7526573455193969409">નેટવર્કને મોનિટર કરવામાં આવી શકે છે</translation> <translation id="7536035074519304529">IP સરનામું: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">કીબોર્ડની બૅકલાઇટ ચાલુ છે</translation> <translation id="7548434653388805669">સૂવાનો સમય</translation> <translation id="7551643184018910560">શેલ્ફ પર પિન કરો</translation> <translation id="7561982940498449837">મેનૂ બંધ કરો</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">પહેલાંનું વાક્ય</translation> <translation id="8042893070933512245">ઍક્સેસિબિલિટી સેટિંગ મેનૂ ખોલો</translation> <translation id="8042925093898452104">વિગતવાર માહિતી બંધ કરો</translation> +<translation id="8044457332620420407">કીબોર્ડની બૅકલાઇટ બંધ છે</translation> <translation id="8048123526339889627">બ્લૂટૂથ સેટિંગ</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> નામનો નમૂનો પહેલેથી જ અસ્તિત્વમાં છે</translation> <translation id="8052898407431791827">ક્લિપબોર્ડ પર કૉપિ કર્યો</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index 8083a48..00ffc8d 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -842,7 +842,7 @@ <translation id="6614169507485700968">निजता स्क्रीन चालू है</translation> <translation id="6627638273713273709">Search+Shift+K</translation> <translation id="6629480180092995136"><ph name="APP_NAME" />, माइक्रोफ़ोन का इस्तेमाल करना चाहता है</translation> -<translation id="6630773993843701741">दूसरे डिवाइस से जोड़ने के लिए ब्लूटूथ सेटिंग खोलें</translation> +<translation id="6630773993843701741">डिवाइस को मैन्युअल तरीके से जोड़ने के लिए ब्लूटूथ सेटिंग खोलें</translation> <translation id="6637729079642709226">समय में बदलाव करें</translation> <translation id="6641720045729354415">लाइव कैप्शन की सुविधा टॉगल करें. <ph name="STATE_TEXT" /></translation> <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> आपकी पहचान की पुष्टि करना चाहता है</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index 66c1243..2a3b957 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">Download</translation> <translation id="7526573455193969409">Jaringan mungkin dipantau</translation> <translation id="7536035074519304529">Alamat IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Lampu latar keyboard mati</translation> <translation id="7548434653388805669">Waktunya tidur</translation> <translation id="7551643184018910560">Sematkan ke rak</translation> <translation id="7561982940498449837">Tutup menu</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Kalimat sebelumnya</translation> <translation id="8042893070933512245">Buka menu setelan aksesibilitas</translation> <translation id="8042925093898452104">Tutup informasi detail</translation> +<translation id="8044457332620420407">Lampu latar keyboard menyala</translation> <translation id="8048123526339889627">Setelan Bluetooth</translation> <translation id="8051716679295756675">Template bernama <ph name="DESK_TEMPLATE_NAME" /> sudah ada</translation> <translation id="8052898407431791827">Disalin ke papan klip</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index dfd8a839..d50f61a 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">הורדה</translation> <translation id="7526573455193969409">ייתכן שהרשת מנוטרת</translation> <translation id="7536035074519304529">כתובת IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">התאורה האחורית של המקלדת פועלת</translation> <translation id="7548434653388805669">לילה טוב!</translation> <translation id="7551643184018910560">הצמדה למדף</translation> <translation id="7561982940498449837">סגירת התפריט</translation> @@ -1057,6 +1058,7 @@ <translation id="8036504271468642248">המשפט הקודם</translation> <translation id="8042893070933512245">פתיחת התפריט של הגדרות הנגישות</translation> <translation id="8042925093898452104">סגירת המידע המפורט</translation> +<translation id="8044457332620420407">התאורה האחורית של המקלדת כבויה</translation> <translation id="8048123526339889627">הגדרות Bluetooth</translation> <translation id="8051716679295756675">קיימת כבר תבנית בשם <ph name="DESK_TEMPLATE_NAME" /></translation> <translation id="8052898407431791827">הועתק ללוח</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index 5555109..cbc5f8b 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -424,7 +424,7 @@ <translation id="3742055079367172538">スクリーンショット撮影完了</translation> <translation id="3771549900096082774">ハイ コントラスト モード</translation> <translation id="3773700760453577392"><ph name="USER_EMAIL" /> へのマルチログインは、管理者によって禁止されています。続行するには、すべてのユーザーがログアウトする必要があります。</translation> -<translation id="3779139509281456663"><ph name="NAME" /> を接続中</translation> +<translation id="3779139509281456663"><ph name="NAME" /> を接続しています</translation> <translation id="3783640748446814672">alt</translation> <translation id="3784455785234192852">ロック</translation> <translation id="3796746699333205839">アプリケーションがカメラとマイクを使用しています</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb index 8cc4cf4..986b073 100644 --- a/ash/strings/ash_strings_kk.xtb +++ b/ash/strings/ash_strings_kk.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">Жүктеу</translation> <translation id="7526573455193969409">Желі бақылануы мүмкін</translation> <translation id="7536035074519304529">IP мекенжайы: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Пернетақта жарығы қосулы</translation> <translation id="7548434653388805669">Ұйықтайтын уақыт болды</translation> <translation id="7551643184018910560">Сөреге бекіту</translation> <translation id="7561982940498449837">Мәзірді жабу</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Алдыңғы сөйлем</translation> <translation id="8042893070933512245">Арнайы мүмкіндіктер параметрлері мәзірін ашу</translation> <translation id="8042925093898452104">Толық ақпаратты жабу</translation> +<translation id="8044457332620420407">Пернетақта жарығы өшірулі</translation> <translation id="8048123526339889627">Bluetooth параметрлері</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> атты үлгі бұрыннан бар.</translation> <translation id="8052898407431791827">Буферге көшірілді.</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index cacad71..ec712ed 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -972,6 +972,7 @@ <translation id="7514365320538308">ಡೌನ್ಲೋಡ್</translation> <translation id="7526573455193969409">ನೆಟ್ವರ್ಕ್ನ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾಗಿದೆ</translation> <translation id="7536035074519304529">ಐಪಿ ವಿಳಾಸ: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">ಕೀಬೋರ್ಡ್ ಬ್ಯಾಕ್ ಲೈಟ್ ಆನ್ ಆಗಿದೆ</translation> <translation id="7548434653388805669">ಮಲಗುವ ಸಮಯ</translation> <translation id="7551643184018910560">ಶೆಲ್ಫ್ಗೆ ಪಿನ್ ಮಾಡು</translation> <translation id="7561982940498449837">ಮೆನು ಮುಚ್ಚಿರಿ</translation> @@ -1056,6 +1057,7 @@ <translation id="8036504271468642248">ಹಿಂದಿನ ವಾಕ್ಯ</translation> <translation id="8042893070933512245">ಪ್ರವೇಶಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳ ಮೆನು ತೆರೆಯಿರಿ</translation> <translation id="8042925093898452104">ವಿವರದ ಮಾಹಿತಿಯನ್ನು ಮುಚ್ಚಿ</translation> +<translation id="8044457332620420407">ಕೀಬೋರ್ಡ್ ಬ್ಯಾಕ್ ಲೈಟ್ ಆಫ್ ಆಗಿದೆ</translation> <translation id="8048123526339889627">ಬ್ಲೂಟೂತ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> ಹೆಸರಿನ ಟೆಂಪ್ಲೇಟ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ</translation> <translation id="8052898407431791827">ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಲಾಗಿದೆ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 2699557f..85cb3adf 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">다운로드</translation> <translation id="7526573455193969409">네트워크가 모니터링될 수 있음</translation> <translation id="7536035074519304529">IP 주소: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">키보드 백라이트 켜짐</translation> <translation id="7548434653388805669">취침 시간</translation> <translation id="7551643184018910560">실행기에 고정</translation> <translation id="7561982940498449837">메뉴 닫기</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">이전 문장</translation> <translation id="8042893070933512245">접근성 설정 메뉴 열기</translation> <translation id="8042925093898452104">세부정보 닫기</translation> +<translation id="8044457332620420407">키보드 백라이트 꺼짐</translation> <translation id="8048123526339889627">블루투스 설정</translation> <translation id="8051716679295756675">이름이 <ph name="DESK_TEMPLATE_NAME" />인 템플릿이 이미 있습니다.</translation> <translation id="8052898407431791827">클립보드에 복사됨</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index bac9bda..7fe2b0c4 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">डाउनलोड करा</translation> <translation id="7526573455193969409">नेटवर्कचे परीक्षण केले जाऊ शकते</translation> <translation id="7536035074519304529">IP पत्ता: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">कीबोर्ड बॅकलाइट सुरू आहे</translation> <translation id="7548434653388805669">झोपण्याची वेळ</translation> <translation id="7551643184018910560">शेल्फवर पिन करा</translation> <translation id="7561982940498449837">मेनू बंद करा</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">मागील वाक्य</translation> <translation id="8042893070933512245">अॅक्सेसिबिलिटी सेटिंग्ज मेनू उघडा</translation> <translation id="8042925093898452104">तपशीलवार माहिती बंद करा</translation> +<translation id="8044457332620420407">कीबोर्ड बॅकलाइट बंद आहे</translation> <translation id="8048123526339889627">ब्लूटूथ सेटिंग्ज</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> नावाचे टेंप्लेट आधीपासून अस्तित्वात आहे</translation> <translation id="8052898407431791827">क्लिपबोर्डवर कॉपी केले</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index a830aef..1354f0c 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -972,6 +972,7 @@ <translation id="7514365320538308">Muat Turun</translation> <translation id="7526573455193969409">Rangkaian mungkin dipantau</translation> <translation id="7536035074519304529">Alamat IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Cahaya belakang papan kekunci dihidupkan</translation> <translation id="7548434653388805669">Masa untuk tidur</translation> <translation id="7551643184018910560">Sematkan pada rak</translation> <translation id="7561982940498449837">Tutup menu</translation> @@ -1056,6 +1057,7 @@ <translation id="8036504271468642248">Ayat sebelumnya</translation> <translation id="8042893070933512245">Buka menu tetapan kebolehaksesan</translation> <translation id="8042925093898452104">Tutup maklumat terperinci</translation> +<translation id="8044457332620420407">Cahaya belakang papan kekunci dimatikan</translation> <translation id="8048123526339889627">Tetapan Bluetooth</translation> <translation id="8051716679295756675">Templat yang bernama <ph name="DESK_TEMPLATE_NAME" /> sudah wujud</translation> <translation id="8052898407431791827">Disalin ke papan keratan</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index aae1e1c1..5e6564a 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">Last ned</translation> <translation id="7526573455193969409">Nettverket kan være overvåket</translation> <translation id="7536035074519304529">IP-adresse: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Tastaturets bakgrunnsbelysning er på</translation> <translation id="7548434653388805669">Nå er det sengetid</translation> <translation id="7551643184018910560">Fest til hyllen</translation> <translation id="7561982940498449837">Lukk menyen</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Forrige setning</translation> <translation id="8042893070933512245">Åpne menyen for tilgjengelighetsinnstillinger</translation> <translation id="8042925093898452104">Lukk detaljert informasjon</translation> +<translation id="8044457332620420407">Tastaturets bakgrunnsbelysning er av</translation> <translation id="8048123526339889627">Bluetooth-innstillinger</translation> <translation id="8051716679295756675">Det finnes allerede en mal med navnet <ph name="DESK_TEMPLATE_NAME" /></translation> <translation id="8052898407431791827">Kopiert til utklippstavlen</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index d229adc..132fa83 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -972,6 +972,7 @@ <translation id="7514365320538308">ਡਾਊਨਲੋਡ ਕਰੋ</translation> <translation id="7526573455193969409">ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਨੈੱਟਵਰਕ ਦੀ ਨਿਗਰਾਨੀ ਹੋ ਰਹੀ ਹੋਵੇ</translation> <translation id="7536035074519304529">IP ਪਤਾ: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">ਕੀ-ਬੋਰਡ ਬੈਕਲਾਈਟ ਚਾਲੂ ਹੈ</translation> <translation id="7548434653388805669">ਸੌਣ ਦਾ ਸਮਾਂ ਹੋ ਗਿਆ ਹੈ</translation> <translation id="7551643184018910560">ਸ਼ੈਲਫ ਤੇ ਪਿਨ ਕਰੋ</translation> <translation id="7561982940498449837">ਮੀਨੂ ਬੰਦ ਕਰੋ</translation> @@ -1056,6 +1057,7 @@ <translation id="8036504271468642248">ਪਿਛਲਾ ਵਾਕ</translation> <translation id="8042893070933512245">ਪਹੁੰਚਯੋਗਤਾ ਸੈਟਿੰਗਾਂ ਮੀਨੂ ਖੋਲ੍ਹੋ</translation> <translation id="8042925093898452104">ਵੇਰਵੇ ਦੀ ਜਾਣਕਾਰੀ ਨੂੰ ਬੰਦ ਕਰੋ</translation> +<translation id="8044457332620420407">ਕੀ-ਬੋਰਡ ਬੈਕਲਾਈਟ ਬੰਦ ਹੈ</translation> <translation id="8048123526339889627">ਬਲੂਟੁੱਥ ਸੈਟਿੰਗਾਂ</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> ਨਾਮਕ ਟੈਮਪਲੇਟ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜੂਦ ਹੈ</translation> <translation id="8052898407431791827">ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕੀਤਾ ਗਿਆ</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index 0462649f2..4ef137162 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">Скачать</translation> <translation id="7526573455193969409">Сеть может отслеживаться</translation> <translation id="7536035074519304529">IP-адрес: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Подсветка клавиатуры включена.</translation> <translation id="7548434653388805669">Пора ложиться спать</translation> <translation id="7551643184018910560">Закрепить на панели запуска</translation> <translation id="7561982940498449837">Закрыть меню</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">К предыдущему предложению</translation> <translation id="8042893070933512245">Открыть меню настроек специальных возможностей</translation> <translation id="8042925093898452104">Закрыть подробные сведения</translation> +<translation id="8044457332620420407">Подсветка клавиатуры отключена.</translation> <translation id="8048123526339889627">Настройки Bluetooth</translation> <translation id="8051716679295756675">Шаблон "<ph name="DESK_TEMPLATE_NAME" />" уже существует.</translation> <translation id="8052898407431791827">Скопировано в буфер обмена</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb index 32d1997..9ee1c10 100644 --- a/ash/strings/ash_strings_si.xtb +++ b/ash/strings/ash_strings_si.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">බාගන්න</translation> <translation id="7526573455193969409">ජාලය නිරීක්ෂණය විය හැක</translation> <translation id="7536035074519304529">IP ලිපිනය: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">යතුරුපුවරු පසුආලෝකය ක්රියාත්මකයි</translation> <translation id="7548434653388805669">නිදා ගන්නා වේලාවයි</translation> <translation id="7551643184018910560">රාක්කය වෙත අමුණන්න</translation> <translation id="7561982940498449837">මෙනුව වසන්න</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">පෙර වාක්යය</translation> <translation id="8042893070933512245">ප්රවේශ්යතා සැකසීම් මෙනුව විවෘත කරන්න</translation> <translation id="8042925093898452104">විස්තරාත්මක තොරතුරු වසන්න</translation> +<translation id="8044457332620420407">යතුරුපුවරු පසුආලෝකය ක්රියාවිරහිතයි</translation> <translation id="8048123526339889627">බ්ලූටූත් සැකසීම්</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> නැමති අච්චුව දැනටමත් පවතී</translation> <translation id="8052898407431791827">පසුරු පුවරුවට පිටපත් කරන ලදි</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 66312af..e2987f0 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">Stiahnuť</translation> <translation id="7526573455193969409">Sieť môže byť sledovaná</translation> <translation id="7536035074519304529">Adresa IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Podsvietenie klávesnice je zapnuté</translation> <translation id="7548434653388805669">Je čas ísť do postele</translation> <translation id="7551643184018910560">Pripnúť na poličku</translation> <translation id="7561982940498449837">Zavrieť ponuku</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Predchádzajúca veta</translation> <translation id="8042893070933512245">Otvoriť ponuku nastavení dostupnosti</translation> <translation id="8042925093898452104">Zavrieť podrobné informácie</translation> +<translation id="8044457332620420407">Podsvietenie klávesnice je vypnuté</translation> <translation id="8048123526339889627">Nastavenia Bluetooth</translation> <translation id="8051716679295756675">Šablóna s názvom <ph name="DESK_TEMPLATE_NAME" /> už existuje</translation> <translation id="8052898407431791827">Skopírované do schránky</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index 053c0d8c..5547b5c0b 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">Pakua</translation> <translation id="7526573455193969409">Huenda mtandao unafuatiliwa</translation> <translation id="7536035074519304529">Anwani ya IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Mwangaza wa kibodi umewashwa</translation> <translation id="7548434653388805669">Ni wakati wa kulala</translation> <translation id="7551643184018910560">Bandika kwenye rafu</translation> <translation id="7561982940498449837">Funga menyu</translation> @@ -1056,6 +1057,7 @@ <translation id="8036504271468642248">Sentensi iliyotangulia</translation> <translation id="8042893070933512245">Fungua menyu ya mipangilio ya ufikivu</translation> <translation id="8042925093898452104">Funga sehemu ya maelezo</translation> +<translation id="8044457332620420407">Mwangaza wa kibodi umezimwa</translation> <translation id="8048123526339889627">Mipangilio ya Bluetooth</translation> <translation id="8051716679295756675">Kiolezo kiitwacho <ph name="DESK_TEMPLATE_NAME" /> tayari kipo</translation> <translation id="8052898407431791827">Imewekwa kwenye ubao wa kunakili</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index e7354c19a..fdce268 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">பதிவிறக்கு</translation> <translation id="7526573455193969409">நெட்வொர்க் கண்காணிக்கப்படலாம்</translation> <translation id="7536035074519304529">IP முகவரி: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">கீபோர்டின் பேக்லைட் ஆன் செய்யப்பட்டது</translation> <translation id="7548434653388805669">தூங்கும் நேரம்</translation> <translation id="7551643184018910560">அடுக்கில் பொருத்து</translation> <translation id="7561982940498449837">மெனுவை மூடு</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">முந்தைய வாக்கியம்</translation> <translation id="8042893070933512245">அணுகல்தன்மை அமைப்புகள் மெனுவைத் திற</translation> <translation id="8042925093898452104">விரிவான தகவல்கள் காட்சியை மூடும்</translation> +<translation id="8044457332620420407">கீபோர்டின் பேக்லைட் ஆஃப் செய்யப்பட்டது</translation> <translation id="8048123526339889627">புளூடூத் அமைப்புகள்</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> என்ற பெயரில் ஏற்கெனவே ஒரு டெம்ப்ளேட் உள்ளது</translation> <translation id="8052898407431791827">கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index 14cd0de..3f1ecf2 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -657,7 +657,7 @@ <translation id="5308380583665731573">కనెక్ట్ చేయండి</translation> <translation id="5313326810920013265">బ్లూటూత్ సెట్టింగ్లు</translation> <translation id="5314219114274263156">స్క్రీన్ రికార్డింగ్ తీసుకోబడింది</translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5319712128756744240">కొత్త పరికరాన్ని పెయిర్ చేయండి</translation> <translation id="5322611492012084517">మీ ఫోన్ను కనుగొనడం సాధ్యపడలేదు</translation> <translation id="5327248766486351172">పేరు</translation> @@ -996,7 +996,7 @@ <translation id="7647488630410863958">మీ నోటిఫికేషన్లను వీక్షించడానికి పరికరాన్ని అన్లాక్ చేయండి</translation> <translation id="7649070708921625228">సహాయం</translation> <translation id="7654687942625752712">ప్రసంగ రూప ప్రతిస్పందనను నిలిపివేయడానికి ఒకేసారి రెండు వాల్యూమ్ కీలను ఐదు సెకన్ల పాటు నొక్కి, పట్టుకోండి.</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7662283695561029522">కాన్ఫిగర్ చేయడానికి నొక్కండి</translation> <translation id="7705524343798198388">VPN</translation> <translation id="7714767791242455379">కొత్త సెల్యులర్ నెట్వర్క్ను జోడించు</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index 7c9c5ea..c16b214 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">İndir</translation> <translation id="7526573455193969409">Ağ trafiği izleniyor olabilir</translation> <translation id="7536035074519304529">IP adresi: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Klavye arka ışığı açık</translation> <translation id="7548434653388805669">Uyku vakti geldi</translation> <translation id="7551643184018910560">Rafa sabitle</translation> <translation id="7561982940498449837">Menüyü kapat</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Önceki cümle</translation> <translation id="8042893070933512245">Erişilebilirlik ayarları menüsünü aç</translation> <translation id="8042925093898452104">Ayrıntılı bilgiyi kapat</translation> +<translation id="8044457332620420407">Klavye arka ışığı kapalı</translation> <translation id="8048123526339889627">Bluetooth Ayarları</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> adlı şablon zaten var</translation> <translation id="8052898407431791827">Panoya kopyalandı</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index 3cf8f21..515bab1 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -970,6 +970,7 @@ <translation id="7514365320538308">ڈاؤن لوڈ کریں</translation> <translation id="7526573455193969409">ممکن ہے نیٹ ورک کو مانیٹر کیا جا رہا ہو</translation> <translation id="7536035074519304529">IP پتہ: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">کی بورڈ عقبی لائٹ آن ہے</translation> <translation id="7548434653388805669">سونے کا وقت ہو گیا</translation> <translation id="7551643184018910560">شیلف میں پن کریں</translation> <translation id="7561982940498449837">مینو بند کریں</translation> @@ -1054,6 +1055,7 @@ <translation id="8036504271468642248">پچھلا جملہ</translation> <translation id="8042893070933512245">ایکسیسبیلٹی ترتیبات کا مینو کھولیں</translation> <translation id="8042925093898452104">تفصیلی معلومات بند کریں</translation> +<translation id="8044457332620420407">کی بورڈ عقبی لائٹ آف ہے</translation> <translation id="8048123526339889627">بلوٹوتھ کی ترتیبات</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> کے نام والی تمثیل پہلے سے موجود ہے</translation> <translation id="8052898407431791827">کلپ بورڈ پر کاپی ہو گیا</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb index 77540ce..c9fe98d 100644 --- a/ash/strings/ash_strings_uz.xtb +++ b/ash/strings/ash_strings_uz.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">Yuklab olish</translation> <translation id="7526573455193969409">Tarmoq kuzatilishi mumkin</translation> <translation id="7536035074519304529">IP manzil: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Klaviatura orqa chirogʻi yoniq</translation> <translation id="7548434653388805669">Uyqu vaqti keldi</translation> <translation id="7551643184018910560">Javonga qadab qo‘yish</translation> <translation id="7561982940498449837">Menyuni yopish</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Avvalgi gap</translation> <translation id="8042893070933512245">Maxsus imkoniyatlar sozlamalari menyusini ochish</translation> <translation id="8042925093898452104">Batafsil axborotni yopish</translation> +<translation id="8044457332620420407">Klaviatura orqa chirogʻi oʻchiq</translation> <translation id="8048123526339889627">Bluetooth sozlamalari</translation> <translation id="8051716679295756675"><ph name="DESK_TEMPLATE_NAME" /> nomli andoza bor</translation> <translation id="8052898407431791827">Vaqtinchalik xotiraga nusxalandi</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index edb6e28..182ec1d 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -971,6 +971,7 @@ <translation id="7514365320538308">Tải xuống</translation> <translation id="7526573455193969409">Mạng có thể được giám sát</translation> <translation id="7536035074519304529">Địa chỉ IP: <ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">Đèn nền bàn phím đang bật</translation> <translation id="7548434653388805669">Giờ đi ngủ</translation> <translation id="7551643184018910560">Ghim vào kệ</translation> <translation id="7561982940498449837">Đóng trình đơn</translation> @@ -1055,6 +1056,7 @@ <translation id="8036504271468642248">Câu trước</translation> <translation id="8042893070933512245">Mở trình đơn cài đặt hỗ trợ tiếp cận</translation> <translation id="8042925093898452104">Đóng thông tin chi tiết</translation> +<translation id="8044457332620420407">Đèn nền bàn phím đang tắt</translation> <translation id="8048123526339889627">Cài đặt Bluetooth</translation> <translation id="8051716679295756675">Mẫu có tên <ph name="DESK_TEMPLATE_NAME" /> đã tồn tại</translation> <translation id="8052898407431791827">Đã sao chép vào bảng nhớ tạm</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index 6d4e9f86..f0c4ad0 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -968,6 +968,7 @@ <translation id="7514365320538308">下载</translation> <translation id="7526573455193969409">网络可能受到了监控</translation> <translation id="7536035074519304529">IP 地址:<ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">键盘背光已开启</translation> <translation id="7548434653388805669">该睡觉了</translation> <translation id="7551643184018910560">固定到任务栏</translation> <translation id="7561982940498449837">关闭菜单</translation> @@ -1051,6 +1052,7 @@ <translation id="8036504271468642248">上一句</translation> <translation id="8042893070933512245">打开无障碍功能设置菜单</translation> <translation id="8042925093898452104">关闭详情信息</translation> +<translation id="8044457332620420407">键盘背光已关闭</translation> <translation id="8048123526339889627">蓝牙设置</translation> <translation id="8051716679295756675">名为“<ph name="DESK_TEMPLATE_NAME" />”的模板已存在</translation> <translation id="8052898407431791827">已复制到剪贴板</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index 77ca96c..f3b9265 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -967,6 +967,7 @@ <translation id="7514365320538308">下載</translation> <translation id="7526573455193969409">網路可能會受到監控</translation> <translation id="7536035074519304529">IP 位址:<ph name="ADDRESS" /></translation> +<translation id="7544300628205093162">鍵盤背光功能已開啟</translation> <translation id="7548434653388805669">就寢時間到了</translation> <translation id="7551643184018910560">固定至檔案櫃</translation> <translation id="7561982940498449837">關閉選單</translation> @@ -1050,6 +1051,7 @@ <translation id="8036504271468642248">上一句</translation> <translation id="8042893070933512245">開啟無障礙設定選單</translation> <translation id="8042925093898452104">關閉詳細資訊</translation> +<translation id="8044457332620420407">鍵盤背光功能已關閉</translation> <translation id="8048123526339889627">藍牙設定</translation> <translation id="8051716679295756675">已經有名為 <ph name="DESK_TEMPLATE_NAME" /> 的範本</translation> <translation id="8052898407431791827">已複製到剪貼簿</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_te.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_te.xtb index 52d17273..83e3d3a2 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_te.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_te.xtb
@@ -83,7 +83,7 @@ <translation id="5163387177077603948">కుడి వైపునకు కదులుతోంది</translation> <translation id="520537883758714667">డాక్యుమెంట్ స్కానింగ్ ఇప్పుడు అందుబాటులో ఉంది</translation> <translation id="5266635337630551423">డాక్యుమెంట్ ఎగువ ఎడమ మూలన</translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5320594929574852403">ఎడమ వైపునకు కదులుతోంది</translation> <translation id="5444515100983837161">డాక్యుమెంట్లోని అన్ని అంచులు ఫ్రేమ్ లోపల వచ్చేటట్టుగా ఉంచుతుంది. డాక్యుమెంట్, బ్యాక్గ్రౌండ్ రెండూ వేర్వేరు రంగులలో ఉన్నప్పుడు స్కానింగ్ బాగా పని చేస్తుంది.</translation> <translation id="5671277269877808209">చతురస్రం</translation> @@ -123,7 +123,7 @@ <translation id="7608223098072244877">4 బై 4</translation> <translation id="761421184377987513">దిగువ-ఎడమ వైపునకు కదులుతోంది</translation> <translation id="7649070708921625228">సహాయం</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7670511624014457267">60 FPS</translation> <translation id="7671804233658741790">డాక్యుమెంట్ దిగువు కుడి మూలన</translation> <translation id="7726641833034062494">సాధారణ వీడియోను రికార్డ్ చేయండి</translation>
diff --git a/ash/webui/firmware_update_ui/firmware_update_app_ui.cc b/ash/webui/firmware_update_ui/firmware_update_app_ui.cc index 6252d08..7616778 100644 --- a/ash/webui/firmware_update_ui/firmware_update_app_ui.cc +++ b/ash/webui/firmware_update_ui/firmware_update_app_ui.cc
@@ -51,6 +51,9 @@ {"hasBeenUpdated", IDS_FIRMWARE_HAS_BEEN_UPDATED_TEXT}, {"updatingInfo", IDS_FIRMWARE_UPDATING_INFO_TEXT}, {"installing", IDS_FIRMWARE_INSTALLING_TEXT}, + {"restartingBodyText", IDS_FIRMWARE_RESTARTING_BODY_TEXT}, + {"restartingFooterText", IDS_FIRMWARE_RESTARTING_FOOTER_TEXT}, + {"restartingTitleText", IDS_FIRMWARE_RESTARTING_TITLE_TEXT}, {"upToDate", IDS_FIRMWARE_UP_TO_DATE_TEXT}, {"versionText", IDS_FIRMWARE_VERSION_TEXT}};
diff --git a/ash/webui/firmware_update_ui/resources/firmware_update_dialog.html b/ash/webui/firmware_update_ui/resources/firmware_update_dialog.html index 4e0cf55..fdffecad 100644 --- a/ash/webui/firmware_update_ui/resources/firmware_update_dialog.html +++ b/ash/webui/firmware_update_ui/resources/firmware_update_dialog.html
@@ -35,11 +35,11 @@ [[dialogContent.title]] </div> <div slot="body" class="firmware-dialog-body-font"> - <div> + <div id="updateDialogBody"> [[dialogContent.body]] </div> </div> - <div slot="footer" hidden$="[[!isUpdateInProgress_(installationProgress.state)]]"> + <div slot="footer" hidden$="[[!shouldShowProgressBar_(installationProgress.state)]]"> <label id="progress" class="firmware-dialog-installing-font"> [[dialogContent.footer]] </label> @@ -49,7 +49,7 @@ </paper-progress> </div> <div slot="button-container" - hidden$="[[isUpdateInProgress_(installationProgress.state)]]"> + hidden$="[[!isUpdateDone_(installationProgress.state)]]"> <cr-button class="action-button" on-click="closeDialog_" id="updateDoneButton">
diff --git a/ash/webui/firmware_update_ui/resources/firmware_update_dialog.js b/ash/webui/firmware_update_ui/resources/firmware_update_dialog.js index 907dea9d..8abb2f9 100644 --- a/ash/webui/firmware_update_ui/resources/firmware_update_dialog.js +++ b/ash/webui/firmware_update_ui/resources/firmware_update_dialog.js
@@ -19,6 +19,9 @@ import {getUpdateProvider} from './mojo_interface_provider.js'; import {mojoString16ToString} from './mojo_utils.js'; +/** @type {!Array<!UpdateState>} */ +const inactiveDialogStates = [UpdateState.kUnknown, UpdateState.kIdle]; + /** @type {!DialogContent} */ const initialDialogContent = { title: '', @@ -187,6 +190,21 @@ * @protected * @return {boolean} */ + isDeviceRestarting_() { + return this.installationProgress.state === UpdateState.kRestarting; + } + + /** + * @protected + * @return {boolean} + */ + shouldShowProgressBar_() { + return this.isUpdateInProgress_() || this.isDeviceRestarting_(); + } + /** + * @protected + * @return {boolean} + */ isUpdateDone_() { // TODO(michaelcheco): Handle failed state. return this.installationProgress.state === UpdateState.kSuccess; @@ -206,6 +224,12 @@ body: this.i18n('updatingInfo'), footer: this.i18n('installing', percentage), }, + [UpdateState.kRestarting]: { + title: + this.i18n('restartingTitleText', mojoString16ToString(deviceName)), + body: this.i18n('restartingBodyText'), + footer: this.i18n('restartingFooterText'), + }, [UpdateState.kSuccess]: { title: this.i18n('deviceUpToDate', mojoString16ToString(deviceName)), body: this.i18n( @@ -219,6 +243,11 @@ /** @return {!DialogContent} */ computeDialogContent_() { + if (inactiveDialogStates.includes(this.installationProgress.state) || + this.isDeviceRestarting_()) { + return this.createDialogContentObj_(UpdateState.kRestarting); + } + if (this.isUpdateInProgress_()) { return this.createDialogContentObj_(UpdateState.kUpdating); }
diff --git a/ash/webui/personalization_app/resources/BUILD.gn b/ash/webui/personalization_app/resources/BUILD.gn index 029d5ddc..e84db38 100644 --- a/ash/webui/personalization_app/resources/BUILD.gn +++ b/ash/webui/personalization_app/resources/BUILD.gn
@@ -53,8 +53,8 @@ ] polymer_js_files = [ - "common/icons.js", - "common/styles.js", + "common/icons.ts", + "common/styles.ts", "trusted/ambient/ambient_subpage_element.ts", "trusted/personalization_main_element.ts",
diff --git a/ash/webui/personalization_app/resources/common/icons.js b/ash/webui/personalization_app/resources/common/icons.ts similarity index 63% rename from ash/webui/personalization_app/resources/common/icons.js rename to ash/webui/personalization_app/resources/common/icons.ts index ea1a005fe..72fade81 100644 --- a/ash/webui/personalization_app/resources/common/icons.js +++ b/ash/webui/personalization_app/resources/common/icons.ts
@@ -4,12 +4,6 @@ /** * @fileoverview Icons specific to personalization app. - * This file is run in both trusted and untrusted code, and therefore - * cannot import polymer and iron-iconset-svg itself. Any consumer should - * import necessary dependencies before this file. - * - * NOTE: this file cannot be migrated to typescript because the import problem - * above. * * These icons should have transparent fill color to adapt to its container's * light/dark theme. @@ -18,8 +12,7 @@ * @see https://github.com/PolymerElements/iron-iconset-svg/blob/v3.0.1/demo/svg-sample-icons.js */ -// Force tsc to consider this file a module. -export {}; +import '//resources/polymer/v3_0/iron-iconset-svg/iron-iconset-svg.js'; const template = document.createElement('template'); template.innerHTML = `{__html_template__}`;
diff --git a/ash/webui/personalization_app/resources/common/styles.js b/ash/webui/personalization_app/resources/common/styles.ts similarity index 61% rename from ash/webui/personalization_app/resources/common/styles.js rename to ash/webui/personalization_app/resources/common/styles.ts index ded470b..9d40053 100644 --- a/ash/webui/personalization_app/resources/common/styles.js +++ b/ash/webui/personalization_app/resources/common/styles.ts
@@ -4,12 +4,7 @@ /** * @fileoverview Common styles for polymer components in both trusted and - * untrusted code. Polymer must be imported before this file. This file cannot - * import Polymer itself because trusted and untrusted code access polymer at - * different paths. - * - * NOTE: this file cannot be migrated to typescript because the import problem - * above. + * untrusted code. */ // Force tsc to consider this file a module.
diff --git a/ash/webui/personalization_app/resources/trusted/wallpaper/local_images_element.ts b/ash/webui/personalization_app/resources/trusted/wallpaper/local_images_element.ts index c396cfe..9f419185 100644 --- a/ash/webui/personalization_app/resources/trusted/wallpaper/local_images_element.ts +++ b/ash/webui/personalization_app/resources/trusted/wallpaper/local_images_element.ts
@@ -11,7 +11,6 @@ import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js'; import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; -import 'chrome://resources/polymer/v3_0/iron-iconset-svg/iron-iconset-svg.js'; import './styles.js'; import '../../common/icons.js'; import '../../common/styles.js';
diff --git a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.ts b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.ts index 7a429a1d..9e3a5723 100644 --- a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.ts +++ b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.ts
@@ -9,7 +9,6 @@ import 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; -import 'chrome://resources/polymer/v3_0/iron-iconset-svg/iron-iconset-svg.js'; import '/common/icons.js'; import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
diff --git a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_preview_element.ts b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_preview_element.ts index 97e7c41e..1a07752 100644 --- a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_preview_element.ts +++ b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_preview_element.ts
@@ -9,7 +9,6 @@ import 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; -import 'chrome://resources/polymer/v3_0/iron-iconset-svg/iron-iconset-svg.js'; import '/common/icons.js'; import './styles.js';
diff --git a/ash/webui/personalization_app/resources/untrusted/setup.ts b/ash/webui/personalization_app/resources/untrusted/setup.ts index 513177a..1d218df 100644 --- a/ash/webui/personalization_app/resources/untrusted/setup.ts +++ b/ash/webui/personalization_app/resources/untrusted/setup.ts
@@ -10,7 +10,6 @@ // Import necessary built in modules before ../common files. This will // guarantee that polymer and certain polymer elements are loaded first. import '//resources/polymer/v3_0/iron-icon/iron-icon.js'; -import '//resources/polymer/v3_0/iron-iconset-svg/iron-iconset-svg.js'; import '//resources/cr_elements/shared_vars_css.m.js'; import '../common/icons.js'; import '../common/styles.js';
diff --git a/ash/webui/print_management/resources/print_job_entry.js b/ash/webui/print_management/resources/print_job_entry.js index ed72b32..0586986 100644 --- a/ash/webui/print_management/resources/print_job_entry.js +++ b/ash/webui/print_management/resources/print_job_entry.js
@@ -58,10 +58,10 @@ * @return {boolean} */ function isToday(date) { - const today_date = new Date(); - return date.getDate() === today_date.getDate() && - date.getMonth() === today_date.getMonth() && - date.getFullYear() === today_date.getFullYear(); + const todayDate = new Date(); + return date.getDate() === todayDate.getDate() && + date.getMonth() === todayDate.getMonth() && + date.getFullYear() === todayDate.getFullYear(); } /** @@ -451,16 +451,16 @@ * @private */ getFileIcon_(fileName) { - const file_extension = getFileExtensionIconName(fileName); + const fileExtension = getFileExtensionIconName(fileName); // It's valid for a file to have '.' in its name and not be its extension. // If this is the case and we don't have a non-generic file icon, attempt to // see if this is a Google file. - if (file_extension && file_extension !== GENERIC_FILE_EXTENSION_ICON) { - return file_extension; + if (fileExtension && fileExtension !== GENERIC_FILE_EXTENSION_ICON) { + return fileExtension; } - const gfile_extension = getGFileIconName(fileName); - if (gfile_extension) { - return gfile_extension; + const gfileExtension = getGFileIconName(fileName); + if (gfileExtension) { + return gfileExtension; } return GENERIC_FILE_EXTENSION_ICON;
diff --git a/base/allocator/partition_allocator/partition_bucket.cc b/base/allocator/partition_allocator/partition_bucket.cc index fa3e2bfd..2a5fc5af 100644 --- a/base/allocator/partition_allocator/partition_bucket.cc +++ b/base/allocator/partition_allocator/partition_bucket.cc
@@ -164,6 +164,8 @@ int flags, size_t raw_size, size_t slot_span_alignment) { + using ::partition_alloc::internal::ScopedUnlockGuard; + PA_DCHECK((slot_span_alignment >= PartitionPageSize()) && bits::IsPowerOfTwo(slot_span_alignment)); @@ -196,7 +198,7 @@ // on this path. The only downside is possibly endless recursion if the OOM // handler allocates and fails to use UncheckedMalloc() or equivalent, but // that's violating the contract of base::TerminateBecauseOutOfMemory(). - ScopedUnlockGuard<thread_safe> unlock{root->lock_}; + ScopedUnlockGuard unlock{root->lock_}; PartitionExcessiveAllocationSize(raw_size); } @@ -221,7 +223,7 @@ // thread cache, but as a simple example the buffer partition in blink is // frequently used for large allocations (e.g. ArrayBuffer), and frequent, // small ones (e.g. WTF::String), and does not have a thread cache. - ScopedUnlockGuard<thread_safe> scoped_unlock{root->lock_}; + ScopedUnlockGuard scoped_unlock{root->lock_}; const size_t slot_size = PartitionRoot<thread_safe>::GetDirectMapSlotSize(raw_size); @@ -593,7 +595,7 @@ return 0; // Didn't manage to get a new uncommitted super page -> address space issue. - ScopedUnlockGuard<thread_safe> unlock{root->lock_}; + ::partition_alloc::internal::ScopedUnlockGuard unlock{root->lock_}; PartitionOutOfMemoryMappingFailure(root, kSuperPageSize); } @@ -1020,7 +1022,7 @@ if (flags & PartitionAllocReturnNull) return 0; // See comment in PartitionDirectMap() for unlocking. - ScopedUnlockGuard<thread_safe> unlock{root->lock_}; + ::partition_alloc::internal::ScopedUnlockGuard unlock{root->lock_}; root->OutOfMemory(raw_size); IMMEDIATE_CRASH(); // Not required, kept as documentation. }
diff --git a/base/allocator/partition_allocator/partition_lock.h b/base/allocator/partition_allocator/partition_lock.h index 8db7b63..6fec3dd 100644 --- a/base/allocator/partition_allocator/partition_lock.h +++ b/base/allocator/partition_allocator/partition_lock.h
@@ -15,53 +15,11 @@ #include "base/threading/platform_thread.h" #include "build/build_config.h" -namespace base { -namespace internal { - -template <bool thread_safe> -class LOCKABLE MaybeLock { +namespace partition_alloc { +class LOCKABLE Lock { public: - void Lock() EXCLUSIVE_LOCK_FUNCTION() {} - void Unlock() UNLOCK_FUNCTION() {} - void AssertAcquired() const ASSERT_EXCLUSIVE_LOCK() {} - // Re-initializes the lock. Only to be used after fork() in child processes. - // Marked UNLOCK_FUNCTION() as a lock starts unlocked, even though it's called - // from a NO_THREAD_SAFETY_ANALYSIS context. - void Reinit() UNLOCK_FUNCTION(); -}; - -template <bool thread_safe> -class SCOPED_LOCKABLE ScopedGuard { - public: - explicit ScopedGuard(MaybeLock<thread_safe>& lock) - EXCLUSIVE_LOCK_FUNCTION(lock) - : lock_(lock) { - lock_.Lock(); - } - ~ScopedGuard() UNLOCK_FUNCTION() { lock_.Unlock(); } - - private: - MaybeLock<thread_safe>& lock_; -}; - -template <bool thread_safe> -class SCOPED_LOCKABLE ScopedUnlockGuard { - public: - explicit ScopedUnlockGuard(MaybeLock<thread_safe>& lock) UNLOCK_FUNCTION(lock) - : lock_(lock) { - lock_.Unlock(); - } - ~ScopedUnlockGuard() EXCLUSIVE_LOCK_FUNCTION() { lock_.Lock(); } - - private: - MaybeLock<thread_safe>& lock_; -}; - -template <> -class LOCKABLE MaybeLock<true> { - public: - constexpr MaybeLock() = default; - void Lock() EXCLUSIVE_LOCK_FUNCTION() { + inline constexpr Lock(); + void Acquire() EXCLUSIVE_LOCK_FUNCTION() { #if DCHECK_IS_ON() // When PartitionAlloc is malloc(), it can easily become reentrant. For // instance, a DCHECK() triggers in external code (such as @@ -70,7 +28,7 @@ // recursion. // // To avoid that, crash quickly when the code becomes reentrant. - PlatformThreadRef current_thread = PlatformThread::CurrentRef(); + base::PlatformThreadRef current_thread = base::PlatformThread::CurrentRef(); if (!lock_.Try()) { // The lock wasn't free when we tried to acquire it. This can be because // another thread or *this* thread was holding it. @@ -98,9 +56,10 @@ #endif } - void Unlock() UNLOCK_FUNCTION() { + void Release() UNLOCK_FUNCTION() { #if DCHECK_IS_ON() - owning_thread_ref_.store(PlatformThreadRef(), std::memory_order_release); + owning_thread_ref_.store(base::PlatformThreadRef(), + std::memory_order_release); #endif lock_.Release(); } @@ -108,14 +67,15 @@ lock_.AssertAcquired(); #if DCHECK_IS_ON() PA_DCHECK(owning_thread_ref_.load(std ::memory_order_acquire) == - PlatformThread::CurrentRef()); + base::PlatformThread::CurrentRef()); #endif } void Reinit() UNLOCK_FUNCTION() { lock_.AssertAcquired(); #if DCHECK_IS_ON() - owning_thread_ref_.store(PlatformThreadRef(), std::memory_order_release); + owning_thread_ref_.store(base::PlatformThreadRef(), + std::memory_order_release); #endif lock_.Reinit(); } @@ -126,31 +86,51 @@ #if DCHECK_IS_ON() // Should in theory be protected by |lock_|, but we need to read it to detect // recursive lock acquisition (and thus, the allocator becoming reentrant). - std::atomic<PlatformThreadRef> owning_thread_ref_{}; + std::atomic<base::PlatformThreadRef> owning_thread_ref_{}; #endif }; -// We want PartitionRoot to not have a global destructor, so this should not -// have one. -static_assert(std::is_trivially_destructible<MaybeLock<true>>::value, ""); -template <> -class LOCKABLE MaybeLock<false> { +class SCOPED_LOCKABLE ScopedGuard { public: - void Lock() EXCLUSIVE_LOCK_FUNCTION() {} - void Unlock() UNLOCK_FUNCTION() {} - void AssertAcquired() const ASSERT_EXCLUSIVE_LOCK() {} - void Reinit() UNLOCK_FUNCTION() {} + explicit ScopedGuard(Lock& lock) EXCLUSIVE_LOCK_FUNCTION(lock) : lock_(lock) { + lock_.Acquire(); + } + ~ScopedGuard() UNLOCK_FUNCTION() { lock_.Release(); } - char padding_[sizeof(MaybeLock<true>)]; + private: + Lock& lock_; }; -static_assert( - sizeof(MaybeLock<true>) == sizeof(MaybeLock<false>), - "Sizes should be equal to ensure identical layout of PartitionRoot"); +namespace internal { -using PartitionLock = MaybeLock<true>; -using PartitionAutoLock = ScopedGuard<true>; +class SCOPED_LOCKABLE ScopedUnlockGuard { + public: + explicit ScopedUnlockGuard(Lock& lock) UNLOCK_FUNCTION(lock) : lock_(lock) { + lock_.Release(); + } + ~ScopedUnlockGuard() EXCLUSIVE_LOCK_FUNCTION() { lock_.Acquire(); } + + private: + Lock& lock_; +}; + +} // namespace internal + +constexpr Lock::Lock() = default; + +// We want PartitionRoot to not have a global destructor, so this should not +// have one. +static_assert(std::is_trivially_destructible<Lock>::value, ""); + +} // namespace partition_alloc + +namespace base { +namespace internal { + +using PartitionLock = ::partition_alloc::Lock; +using PartitionAutoLock = ::partition_alloc::ScopedGuard; } // namespace internal } // namespace base + #endif // BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_LOCK_H_
diff --git a/base/allocator/partition_allocator/partition_lock_perftest.cc b/base/allocator/partition_allocator/partition_lock_perftest.cc index 05c86ba..282c74c 100644 --- a/base/allocator/partition_allocator/partition_lock_perftest.cc +++ b/base/allocator/partition_allocator/partition_lock_perftest.cc
@@ -12,12 +12,12 @@ #include "testing/gtest/include/gtest/gtest.h" #include "testing/perf/perf_result_reporter.h" -namespace base { -namespace internal { +namespace partition_alloc { + namespace { constexpr int kWarmupRuns = 1; -constexpr TimeDelta kTimeLimit = Seconds(1); +constexpr base::TimeDelta kTimeLimit = base::Seconds(1); constexpr int kTimeCheckInterval = 100000; constexpr char kMetricPrefixLock[] = "PartitionLock."; @@ -33,9 +33,9 @@ return reporter; } -class Spin : public PlatformThread::Delegate { +class Spin : public base::PlatformThread::Delegate { public: - Spin(MaybeLock<true>* lock, uint32_t* data) + Spin(Lock* lock, uint32_t* data) : lock_(lock), data_(data), should_stop_(false) {} ~Spin() override = default; @@ -45,14 +45,14 @@ // results. uint32_t count = 0; while (!should_stop_.load(std::memory_order_relaxed)) { - lock_->Lock(); + lock_->Acquire(); count++; - lock_->Unlock(); + lock_->Release(); } - lock_->Lock(); + lock_->Acquire(); (*data_) += count; - lock_->Unlock(); + lock_->Release(); } // Called from another thread to stop the loop. @@ -60,7 +60,7 @@ int started_count() const { return started_count_; } private: - MaybeLock<true>* lock_; + Lock* lock_; uint32_t* data_ GUARDED_BY(lock_); std::atomic<bool> should_stop_; std::atomic<int> started_count_{0}; @@ -69,7 +69,7 @@ } // namespace TEST(PartitionLockPerfTest, Simple) { - LapTimer timer(kWarmupRuns, kTimeLimit, kTimeCheckInterval); + base::LapTimer timer(kWarmupRuns, kTimeLimit, kTimeCheckInterval); ALLOW_UNUSED_TYPE uint32_t data = 0; Lock lock; @@ -89,33 +89,33 @@ TEST(PartitionLockPerfTest, WithCompetingThreads) { uint32_t data = 0; - MaybeLock<true> lock; + Lock lock; // Starts a competing thread executing the same loop as this thread. Spin thread_main(&lock, &data); - std::vector<PlatformThreadHandle> thread_handles; + std::vector<base::PlatformThreadHandle> thread_handles; constexpr int kThreads = 4; for (int i = 0; i < kThreads; i++) { - PlatformThreadHandle thread_handle; - ASSERT_TRUE(PlatformThread::Create(0, &thread_main, &thread_handle)); + base::PlatformThreadHandle thread_handle; + ASSERT_TRUE(base::PlatformThread::Create(0, &thread_main, &thread_handle)); thread_handles.push_back(thread_handle); } // Wait for all the threads to start. while (thread_main.started_count() != kThreads) { } - LapTimer timer(kWarmupRuns, kTimeLimit, kTimeCheckInterval); + base::LapTimer timer(kWarmupRuns, kTimeLimit, kTimeCheckInterval); do { - lock.Lock(); + lock.Acquire(); data += 1; - lock.Unlock(); + lock.Release(); timer.NextLap(); } while (!timer.HasTimeLimitExpired()); thread_main.Stop(); for (int i = 0; i < kThreads; i++) { - PlatformThread::Join(thread_handles[i]); + base::PlatformThread::Join(thread_handles[i]); } auto reporter = SetUpReporter(kStoryWithCompetingThread); @@ -123,5 +123,4 @@ reporter.AddResult(kMetricLockUnlockLatency, 1e9 / timer.LapsPerSecond()); } -} // namespace internal -} // namespace base +} // namespace partition_alloc
diff --git a/base/allocator/partition_allocator/partition_lock_unittest.cc b/base/allocator/partition_allocator/partition_lock_unittest.cc index 859e0f0..4e98730b 100644 --- a/base/allocator/partition_allocator/partition_lock_unittest.cc +++ b/base/allocator/partition_allocator/partition_lock_unittest.cc
@@ -13,131 +13,130 @@ #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" -namespace base { -namespace internal { +namespace partition_alloc { namespace { -class LambdaThreadDelegate : public PlatformThread::Delegate { +class LambdaThreadDelegate : public base::PlatformThread::Delegate { public: - explicit LambdaThreadDelegate(RepeatingClosure f) : f_(f) {} + explicit LambdaThreadDelegate(base::RepeatingClosure f) : f_(f) {} void ThreadMain() override { f_.Run(); } private: - RepeatingClosure f_; + base::RepeatingClosure f_; }; TEST(PartitionAllocLockTest, Simple) { - MaybeLock<true> lock; - lock.Lock(); - lock.Unlock(); + Lock lock; + lock.Acquire(); + lock.Release(); } -MaybeLock<true> g_lock; +Lock g_lock; TEST(PartitionAllocLockTest, StaticLockStartsUnlocked) { - g_lock.Lock(); - g_lock.Unlock(); + g_lock.Acquire(); + g_lock.Release(); } TEST(PartitionAllocLockTest, Contended) { int counter = 0; // *Not* atomic. - std::vector<PlatformThreadHandle> thread_handles; + std::vector<base::PlatformThreadHandle> thread_handles; constexpr int iterations_per_thread = 1000000; constexpr int num_threads = 4; - MaybeLock<true> lock; - MaybeLock<true> start_lock; + Lock lock; + Lock start_lock; - LambdaThreadDelegate delegate{BindLambdaForTesting([&]() { - start_lock.Lock(); - start_lock.Unlock(); + LambdaThreadDelegate delegate{base::BindLambdaForTesting([&]() { + start_lock.Acquire(); + start_lock.Release(); for (int i = 0; i < iterations_per_thread; i++) { - lock.Lock(); + lock.Acquire(); counter++; - lock.Unlock(); + lock.Release(); } })}; - start_lock.Lock(); // Make sure that the threads compete, by waiting until - // all of them have at least been created. + start_lock.Acquire(); // Make sure that the threads compete, by waiting until + // all of them have at least been created. for (int i = 0; i < num_threads; i++) { - PlatformThreadHandle handle; - PlatformThread::Create(0, &delegate, &handle); + base::PlatformThreadHandle handle; + base::PlatformThread::Create(0, &delegate, &handle); thread_handles.push_back(handle); } - start_lock.Unlock(); + start_lock.Release(); for (int i = 0; i < num_threads; i++) { - PlatformThread::Join(thread_handles[i]); + base::PlatformThread::Join(thread_handles[i]); } EXPECT_EQ(iterations_per_thread * num_threads, counter); } TEST(PartitionAllocLockTest, SlowThreads) { int counter = 0; // *Not* atomic. - std::vector<PlatformThreadHandle> thread_handles; + std::vector<base::PlatformThreadHandle> thread_handles; constexpr int iterations_per_thread = 100; constexpr int num_threads = 4; - MaybeLock<true> lock; - MaybeLock<true> start_lock; + Lock lock; + Lock start_lock; - LambdaThreadDelegate delegate{BindLambdaForTesting([&]() { - start_lock.Lock(); - start_lock.Unlock(); + LambdaThreadDelegate delegate{base::BindLambdaForTesting([&]() { + start_lock.Acquire(); + start_lock.Release(); for (int i = 0; i < iterations_per_thread; i++) { - lock.Lock(); + lock.Acquire(); counter++; // Hold the lock for a while, to force futex()-based locks to sleep. - PlatformThread::Sleep(Milliseconds(1)); - lock.Unlock(); + base::PlatformThread::Sleep(base::Milliseconds(1)); + lock.Release(); } })}; - start_lock.Lock(); // Make sure that the threads compete, by waiting until - // all of them have at least been created. + start_lock.Acquire(); // Make sure that the threads compete, by waiting until + // all of them have at least been created. for (int i = 0; i < num_threads; i++) { - PlatformThreadHandle handle; - PlatformThread::Create(0, &delegate, &handle); + base::PlatformThreadHandle handle; + base::PlatformThread::Create(0, &delegate, &handle); thread_handles.push_back(handle); } - start_lock.Unlock(); + start_lock.Release(); for (int i = 0; i < num_threads; i++) { - PlatformThread::Join(thread_handles[i]); + base::PlatformThread::Join(thread_handles[i]); } EXPECT_EQ(iterations_per_thread * num_threads, counter); } TEST(PartitionAllocLockTest, AssertAcquired) { - MaybeLock<true> lock; - lock.Lock(); + Lock lock; + lock.Acquire(); lock.AssertAcquired(); - lock.Unlock(); + lock.Release(); } // AssertAcquired() is only enforced with DCHECK()s. #if defined(GTEST_HAS_DEATH_TEST) && DCHECK_IS_ON() TEST(PartitionAllocLockTest, AssertAcquiredDeathTest) { - MaybeLock<true> lock; + Lock lock; EXPECT_DEATH(lock.AssertAcquired(), ""); } TEST(PartitionAllocLockTest, AssertAcquiredAnotherThreadHoldsTheLock) { - MaybeLock<true> lock; + Lock lock; // NO_THREAD_SAFETY_ANALYSIS: The checker rightfully points out that the lock // is still held at the end of the function, which is what we want here. - LambdaThreadDelegate delegate{ - BindLambdaForTesting([&]() NO_THREAD_SAFETY_ANALYSIS { lock.Lock(); })}; - PlatformThreadHandle handle; - PlatformThread::Create(0, &delegate, &handle); + LambdaThreadDelegate delegate{base::BindLambdaForTesting( + [&]() NO_THREAD_SAFETY_ANALYSIS { lock.Acquire(); })}; + base::PlatformThreadHandle handle; + base::PlatformThread::Create(0, &delegate, &handle); // Join before the test, otherwise some platforms' gtest have trouble with // EXPECT_DEATH() and multiple live threads. - PlatformThread::Join(handle); + base::PlatformThread::Join(handle); EXPECT_DEATH(lock.AssertAcquired(), ""); } @@ -146,23 +145,22 @@ // On Apple OSes, it is not allowed to unlock a lock from another thread, so // we need to re-initialize it. TEST(PartitionAllocLockTest, ReinitInOtherThread) NO_THREAD_SAFETY_ANALYSIS { - MaybeLock<true> lock; - lock.Lock(); + Lock lock; + lock.Acquire(); LambdaThreadDelegate delegate{ - BindLambdaForTesting([&]() NO_THREAD_SAFETY_ANALYSIS { + base::BindLambdaForTesting([&]() NO_THREAD_SAFETY_ANALYSIS { lock.Reinit(); - lock.Lock(); - lock.Unlock(); + lock.Acquire(); + lock.Release(); })}; - PlatformThreadHandle handle; - PlatformThread::Create(0, &delegate, &handle); - PlatformThread::Join(handle); + base::PlatformThreadHandle handle; + base::PlatformThread::Create(0, &delegate, &handle); + base::PlatformThread::Join(handle); } #endif // defined(OS_APPLE) #endif // defined(GTEST_HAS_DEATH_TEST) && DCHECK_IS_ON() } // namespace -} // namespace internal -} // namespace base +} // namespace partition_alloc
diff --git a/base/allocator/partition_allocator/partition_page.cc b/base/allocator/partition_allocator/partition_page.cc index 865d280..d537e39 100644 --- a/base/allocator/partition_allocator/partition_page.cc +++ b/base/allocator/partition_allocator/partition_page.cc
@@ -34,6 +34,8 @@ template <bool thread_safe> ALWAYS_INLINE void PartitionDirectUnmap( SlotSpanMetadata<thread_safe>* slot_span) { + using ::partition_alloc::internal::ScopedUnlockGuard; + auto* root = PartitionRoot<thread_safe>::FromSlotSpan(slot_span); root->lock_.AssertAcquired(); auto* extent = PartitionDirectMapExtent<thread_safe>::FromSlotSpan(slot_span); @@ -74,7 +76,7 @@ // second one may not find enough space in the GigaCage, and fail. This is // expected to be very rare though, and likely preferable to holding the lock // while releasing the address space. - ScopedUnlockGuard<thread_safe> unlock{root->lock_}; + ScopedUnlockGuard unlock{root->lock_}; ScopedSyscallTimer<thread_safe> timer{root}; UnmapNow(reservation_start, reservation_size, root->ChoosePool()); }
diff --git a/base/allocator/partition_allocator/partition_root.cc b/base/allocator/partition_allocator/partition_root.cc index 4a4c687..5d30486 100644 --- a/base/allocator/partition_allocator/partition_root.cc +++ b/base/allocator/partition_allocator/partition_root.cc
@@ -50,25 +50,25 @@ // design. void BeforeForkInParent() NO_THREAD_SAFETY_ANALYSIS { auto* regular_root = internal::PartitionAllocMalloc::Allocator(); - regular_root->lock_.Lock(); + regular_root->lock_.Acquire(); auto* original_root = internal::PartitionAllocMalloc::OriginalAllocator(); if (original_root) - original_root->lock_.Lock(); + original_root->lock_.Acquire(); auto* aligned_root = internal::PartitionAllocMalloc::AlignedAllocator(); if (aligned_root != regular_root) - aligned_root->lock_.Lock(); + aligned_root->lock_.Acquire(); if (auto* nonscannable_root = internal::NonScannableAllocator::Instance().root()) - nonscannable_root->lock_.Lock(); + nonscannable_root->lock_.Acquire(); if (auto* nonquarantinable_root = internal::NonQuarantinableAllocator::Instance().root()) - nonquarantinable_root->lock_.Lock(); + nonquarantinable_root->lock_.Acquire(); - internal::ThreadCacheRegistry::GetLock().Lock(); + internal::ThreadCacheRegistry::GetLock().Acquire(); } template <typename T> @@ -78,7 +78,7 @@ if (in_child) lock.Reinit(); else - lock.Unlock(); + lock.Release(); } void ReleaseLocks(bool in_child) NO_THREAD_SAFETY_ANALYSIS { @@ -547,7 +547,7 @@ (SystemPageSize() == (size_t{1} << 14))); #endif - ScopedGuard guard{lock_}; + ::partition_alloc::ScopedGuard guard{lock_}; if (initialized) return; @@ -675,7 +675,7 @@ template <bool thread_safe> void PartitionRoot<thread_safe>::EnableThreadCacheIfSupported() { #if defined(PA_THREAD_CACHE_SUPPORTED) - ScopedGuard guard{lock_}; + ::partition_alloc::ScopedGuard guard{lock_}; PA_CHECK(!with_thread_cache); // By the time we get there, there may be multiple threads created in the // process. Since `with_thread_cache` is accessed without a lock, it can @@ -894,7 +894,7 @@ bool success = false; bool tried_in_place_for_direct_map = false; { - internal::ScopedGuard<thread_safe> guard{old_root->lock_}; + ::partition_alloc::ScopedGuard guard{old_root->lock_}; // TODO(crbug.com/1257655): See if we can afford to make this a CHECK. PA_DCHECK(IsValidSlotSpan(slot_span)); old_usable_size = slot_span->GetUsableSize(old_root); @@ -940,7 +940,7 @@ template <bool thread_safe> void PartitionRoot<thread_safe>::PurgeMemory(int flags) { { - ScopedGuard guard{lock_}; + ::partition_alloc::ScopedGuard guard{lock_}; // Avoid purging if there is PCScan task currently scheduled. Since pcscan // takes snapshot of all allocated pages, decommitting pages here (even // under the lock) is racy. @@ -1017,7 +1017,7 @@ // Collect data with the lock held, cannot allocate or call third-party code // below. { - ScopedGuard guard{lock_}; + ::partition_alloc::ScopedGuard guard{lock_}; PA_DCHECK(total_size_of_allocated_bytes <= max_size_of_allocated_bytes); stats.total_mmapped_bytes = @@ -1115,7 +1115,7 @@ template <bool thread_safe> void PartitionRoot<thread_safe>::ResetBookkeepingForTesting() { - ScopedGuard guard{lock_}; + ::partition_alloc::ScopedGuard guard{lock_}; max_size_of_allocated_bytes = total_size_of_allocated_bytes; max_size_of_committed_pages.store(total_size_of_committed_pages); } @@ -1167,12 +1167,6 @@ template struct BASE_EXPORT PartitionRoot<internal::ThreadSafe>; -static_assert(sizeof(PartitionRoot<internal::ThreadSafe>) == - sizeof(PartitionRoot<internal::NotThreadSafe>), - "Layouts should match"); -static_assert(offsetof(PartitionRoot<internal::ThreadSafe>, buckets) == - offsetof(PartitionRoot<internal::NotThreadSafe>, buckets), - "Layouts should match"); static_assert(offsetof(PartitionRoot<internal::ThreadSafe>, sentinel_bucket) == offsetof(PartitionRoot<internal::ThreadSafe>, buckets) + kNumBuckets *
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index 719ec04..8bb877c 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h
@@ -201,7 +201,6 @@ using SuperPageExtentEntry = internal::PartitionSuperPageExtentEntry<thread_safe>; using DirectMapExtent = internal::PartitionDirectMapExtent<thread_safe>; - using ScopedGuard = internal::ScopedGuard<thread_safe>; using PCScan = internal::PCScan; // Start of read-mostly flags. @@ -264,7 +263,8 @@ // Not used on the fastest path (thread cache allocations), but on the fast // path of the central allocator. - internal::MaybeLock<thread_safe> lock_; + static_assert(thread_safe, "Only the thread-safe root is supported."); + ::partition_alloc::Lock lock_; Bucket buckets[kNumBuckets] = {}; Bucket sentinel_bucket; @@ -469,7 +469,7 @@ // improves performance by performing fewer system calls, at the cost of more // memory usage. void EnableLargeEmptySlotSpanRing() { - ScopedGuard locker{lock_}; + ::partition_alloc::ScopedGuard locker{lock_}; global_empty_slot_span_ring_size = kMaxFreeableSpans; } @@ -1240,7 +1240,7 @@ // Do not move the store above inside the locked section. __asm__ __volatile__("" : : "r"(slot_start) : "memory"); - ScopedGuard guard{lock_}; + ::partition_alloc::ScopedGuard guard{lock_}; FreeInSlotSpan(slot_start, slot_span); } @@ -1258,7 +1258,7 @@ // The passed freelist is likely to be just built up, which means that the // corresponding pages were faulted in (without acquiring the lock). So there // is no need to touch pages manually here before the lock. - ScopedGuard guard{lock_}; + ::partition_alloc::ScopedGuard guard{lock_}; total_size_of_allocated_bytes -= (slot_span->GetSlotSizeForBookkeeping() * size); slot_span->AppendFreeList(head, tail, size); @@ -1404,7 +1404,7 @@ #if defined(PA_COMMIT_CHARGE_IS_LIMITED) if (UNLIKELY(!ok)) { { - ScopedGuard guard(lock_); + ::partition_alloc::ScopedGuard guard(lock_); DecommitEmptySlotSpans(); } ok = TryRecommitSystemPages(ptr, length, PageReadWriteTagged, @@ -1710,7 +1710,7 @@ size_t slot_span_alignment, size_t* usable_size, bool* is_already_zeroed) { - internal::ScopedGuard<thread_safe> guard{lock_}; + ::partition_alloc::ScopedGuard guard{lock_}; return AllocFromBucket(bucket, flags, raw_size, slot_span_alignment, usable_size, is_already_zeroed); }
diff --git a/base/allocator/partition_allocator/random.cc b/base/allocator/partition_allocator/random.cc index d0ec58f8..06acc14 100644 --- a/base/allocator/partition_allocator/random.cc +++ b/base/allocator/partition_allocator/random.cc
@@ -10,24 +10,23 @@ #include "base/rand_util.h" namespace base { - namespace partition_alloc { class RandomGenerator { public: constexpr RandomGenerator() {} uint32_t RandomValue() { - internal::ScopedGuard<true> guard(lock_); + ::partition_alloc::ScopedGuard guard(lock_); return GetGenerator()->RandUint32(); } void SeedForTesting(uint64_t seed) { - internal::ScopedGuard<true> guard(lock_); + ::partition_alloc::ScopedGuard guard(lock_); GetGenerator()->ReseedForTesting(seed); } private: - internal::PartitionLock lock_ = {}; + ::partition_alloc::Lock lock_ = {}; bool initialized_ GUARDED_BY(lock_) = false; union { base::InsecureRandomGenerator instance_ GUARDED_BY(lock_);
diff --git a/base/allocator/partition_allocator/spinning_mutex.cc b/base/allocator/partition_allocator/spinning_mutex.cc index 0ff9000..b6db764 100644 --- a/base/allocator/partition_allocator/spinning_mutex.cc +++ b/base/allocator/partition_allocator/spinning_mutex.cc
@@ -38,8 +38,7 @@ #endif // !defined(PA_HAS_FAST_MUTEX) -namespace base { -namespace internal { +namespace partition_alloc { void SpinningMutex::Reinit() { #if !defined(OS_APPLE) @@ -148,12 +147,11 @@ // thread that is unavailable to finish its work because of higher // priority threads spinning here. Sleeping should ensure that they make // progress. - PlatformThread::Sleep(Milliseconds(1)); + base::PlatformThread::Sleep(base::Milliseconds(1)); } } while (!TrySpinLock()); } #endif // defined(PA_HAS_FAST_MUTEX) -} // namespace internal -} // namespace base +} // namespace partition_alloc
diff --git a/base/allocator/partition_allocator/spinning_mutex.h b/base/allocator/partition_allocator/spinning_mutex.h index 5e4a44e..d6670e2 100644 --- a/base/allocator/partition_allocator/spinning_mutex.h +++ b/base/allocator/partition_allocator/spinning_mutex.h
@@ -59,8 +59,7 @@ #include <lib/sync/mutex.h> #endif -namespace base { -namespace internal { +namespace partition_alloc { // The behavior of this class depends on whether PA_HAS_FAST_MUTEX is defined. // 1. When it is defined: @@ -331,7 +330,6 @@ #endif // defined(PA_HAS_FAST_MUTEX) -} // namespace internal -} // namespace base +} // namespace partition_alloc #endif // BASE_ALLOCATOR_PARTITION_ALLOCATOR_SPINNING_MUTEX_H_
diff --git a/base/allocator/partition_allocator/starscan/pcscan_internal.cc b/base/allocator/partition_allocator/starscan/pcscan_internal.cc index 475987b..26a03c0 100644 --- a/base/allocator/partition_allocator/starscan/pcscan_internal.cc +++ b/base/allocator/partition_allocator/starscan/pcscan_internal.cc
@@ -412,12 +412,11 @@ "SuperPageSnapshot must stay relatively small to be allocated on stack"); SuperPageSnapshot::SuperPageSnapshot(uintptr_t super_page) { - using Root = PartitionRoot<ThreadSafe>; using SlotSpan = SlotSpanMetadata<ThreadSafe>; auto* extent_entry = PartitionSuperPageToExtent<ThreadSafe>(super_page); - typename Root::ScopedGuard lock(extent_entry->root->lock_); + ::partition_alloc::ScopedGuard lock(extent_entry->root->lock_); const size_t nonempty_slot_spans = extent_entry->number_of_nonempty_slot_spans; @@ -1436,7 +1435,7 @@ // Avoid nesting locks and store super_pages in a temporary vector. SuperPages super_pages; { - typename Root::ScopedGuard guard(root->lock_); + ::partition_alloc::ScopedGuard guard(root->lock_); PA_CHECK(root->IsQuarantineAllowed()); if (root->IsScanEnabled()) return; @@ -1458,7 +1457,7 @@ // Avoid nesting locks and store super_pages in a temporary vector. SuperPages super_pages; { - typename Root::ScopedGuard guard(root->lock_); + ::partition_alloc::ScopedGuard guard(root->lock_); PA_CHECK(root->IsQuarantineAllowed()); PA_CHECK(!root->IsScanEnabled()); if (root->IsQuarantineEnabled())
diff --git a/base/allocator/partition_allocator/starscan/pcscan_unittest.cc b/base/allocator/partition_allocator/starscan/pcscan_unittest.cc index 6992433..81620ad 100644 --- a/base/allocator/partition_allocator/starscan/pcscan_unittest.cc +++ b/base/allocator/partition_allocator/starscan/pcscan_unittest.cc
@@ -326,7 +326,7 @@ { auto* value_root = ThreadSafePartitionRoot::FromPointerInFirstSuperpage( reinterpret_cast<char*>(value)); - ScopedGuard<ThreadSafe> guard{value_root->lock_}; + ::partition_alloc::ScopedGuard guard{value_root->lock_}; auto super_page = reinterpret_cast<uintptr_t>(value) & kSuperPageBaseMask; ASSERT_EQ(super_page,
diff --git a/base/allocator/partition_allocator/thread_cache.cc b/base/allocator/partition_allocator/thread_cache.cc index fb40233e4..c9d4c3d 100644 --- a/base/allocator/partition_allocator/thread_cache.cc +++ b/base/allocator/partition_allocator/thread_cache.cc
@@ -556,7 +556,7 @@ size_t allocated_slots = 0; // Same as calling RawAlloc() |count| times, but acquires the lock only once. - internal::ScopedGuard<internal::ThreadSafe> guard(root_->lock_); + partition_alloc::ScopedGuard guard(root_->lock_); for (int i = 0; i < count; i++) { // Thread cache fill should not trigger expensive operations, to not grab // the lock for a long time needlessly, but also to not inflate memory @@ -635,7 +635,7 @@ // Acquire the lock once. Deallocation from the same bucket are likely to be // hitting the same cache lines in the central allocator, and lock // acquisitions can be expensive. - internal::ScopedGuard<internal::ThreadSafe> guard(root_->lock_); + partition_alloc::ScopedGuard guard(root_->lock_); while (head) { uintptr_t slot_start = reinterpret_cast<uintptr_t>(head); head = head->GetNextForThreadCache(slot_size);
diff --git a/base/allocator/partition_allocator/thread_cache.h b/base/allocator/partition_allocator/thread_cache.h index 86cbbde..3362657 100644 --- a/base/allocator/partition_allocator/thread_cache.h +++ b/base/allocator/partition_allocator/thread_cache.h
@@ -330,7 +330,6 @@ Bucket(); }; static_assert(sizeof(Bucket) <= 2 * sizeof(void*), "Keep Bucket small."); - enum class Mode { kNormal, kPurge, kNotifyRegistry }; explicit ThreadCache(PartitionRoot<ThreadSafe>* root); static void Delete(void* thread_cache_ptr);
diff --git a/base/sampling_heap_profiler/poisson_allocation_sampler.cc b/base/sampling_heap_profiler/poisson_allocation_sampler.cc index 5c357a1f..ebb1fc9 100644 --- a/base/sampling_heap_profiler/poisson_allocation_sampler.cc +++ b/base/sampling_heap_profiler/poisson_allocation_sampler.cc
@@ -14,7 +14,6 @@ #include "base/allocator/partition_allocator/partition_alloc.h" #include "base/check.h" #include "base/compiler_specific.h" -#include "base/ignore_result.h" #include "base/no_destructor.h" #include "base/rand_util.h" #include "base/ranges/algorithm.h" @@ -70,7 +69,9 @@ #else -class ReentryGuard { +// Use [[maybe_unused]] as this lightweight stand-in for the more heavyweight +// ReentryGuard above will otherwise trigger the "unused code" warnings. +class [[maybe_unused]] ReentryGuard { public: operator bool() { return true; } static void Init() {} @@ -146,6 +147,8 @@ // the callback. std::atomic_bool g_hooks_installed; +#if BUILDFLAG(USE_ALLOCATOR_SHIM) + void* AllocFn(const AllocatorDispatch* self, size_t size, void* context) { ReentryGuard guard; void* address = self->next->alloc_function(self->next, size, context); @@ -316,6 +319,8 @@ &AlignedFreeFn, nullptr}; +#endif // BUILDFLAG(USE_ALLOCATOR_SHIM) + #if BUILDFLAG(USE_PARTITION_ALLOC) && !defined(OS_NACL) void PartitionAllocHook(void* address, size_t size, const char* type) { @@ -336,7 +341,6 @@ // If the allocator shim isn't available, then we don't install any hooks. // There's no point in printing an error message, since this can regularly // happen for tests. - ignore_result(g_allocator_dispatch); #endif // BUILDFLAG(USE_ALLOCATOR_SHIM) #if BUILDFLAG(USE_PARTITION_ALLOC) && !defined(OS_NACL) @@ -428,16 +432,15 @@ // static void PoissonAllocationSampler::Init() { - static bool init_once = []() { + [[maybe_unused]] static bool init_once = []() { ReentryGuard::Init(); return true; }(); - ignore_result(init_once); } // static void PoissonAllocationSampler::InstallAllocatorHooksOnce() { - static bool hook_installed = [] { + [[maybe_unused]] static bool hook_installed = [] { InstallStandardAllocatorHooks(); bool expected = false; if (!g_hooks_installed.compare_exchange_strong(expected, true)) { @@ -446,7 +449,6 @@ } return true; }(); - ignore_result(hook_installed); } // static @@ -639,7 +641,6 @@ // `thread_local`, which may cause a reentrancy issue. So, temporarily // disable the sampling by having a ReentryGuard. ReentryGuard guard; - ignore_result(guard); ScopedMuteThreadSamples no_reentrancy_scope; AutoLock lock(mutex_); @@ -655,7 +656,6 @@ // `thread_local`, which may cause a reentrancy issue. So, temporarily // disable the sampling by having a ReentryGuard. ReentryGuard guard; - ignore_result(guard); ScopedMuteThreadSamples no_reentrancy_scope; AutoLock lock(mutex_);
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index 2a7ffbcf..ce3de57 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn
@@ -1353,9 +1353,6 @@ if (enable_basic_printing) { public_deps += [ "//printing" ] - if (enable_print_preview && !is_chromeos) { - public_deps += [ "//chrome/service" ] - } } if (enable_gwp_asan) {
diff --git a/chrome/VERSION b/chrome/VERSION index b0d3e42..4d80234 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=99 MINOR=0 -BUILD=4828 +BUILD=4829 PATCH=0
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc index 26bdd51..5057e9c 100644 --- a/chrome/app/chrome_main_delegate.cc +++ b/chrome/app/chrome_main_delegate.cc
@@ -201,10 +201,6 @@ extern int NaClMain(content::MainFunctionParams); -#if !defined(OS_CHROMEOS) -extern int CloudPrintServiceProcessMain(content::MainFunctionParams); -#endif - const char* const ChromeMainDelegate::kNonWildcardDomainNonPortSchemes[] = { extensions::kExtensionScheme, chrome::kChromeSearchScheme, content::kChromeDevToolsScheme, content::kChromeUIScheme, @@ -276,8 +272,7 @@ if (process_type == switches::kPpapiPluginProcess) { score = content::kPluginOomScore; } else if (process_type == switches::kUtilityProcess || - process_type == switches::kGpuProcess || - process_type == switches::kCloudPrintServiceProcess) { + process_type == switches::kGpuProcess) { score = content::kMiscOomScore; #if BUILDFLAG(ENABLE_NACL) } else if (process_type == switches::kNaClLoaderProcess) { @@ -1212,17 +1207,10 @@ absl::variant<int, content::MainFunctionParams> ChromeMainDelegate::RunProcess( const std::string& process_type, content::MainFunctionParams main_function_params) { -// ANDROID doesn't support "service", so no CloudPrintServiceProcessMain, and -// arraysize doesn't support empty array. So we comment out the block for -// Android. #if defined(OS_ANDROID) NOTREACHED(); // Android provides a subclass and shares no code here. #else static const MainFunction kMainFunctions[] = { -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !defined(OS_CHROMEOS) - {switches::kCloudPrintServiceProcess, CloudPrintServiceProcessMain}, -#endif - #if defined(OS_MAC) {switches::kRelauncherProcess, mac_relauncher::internal::RelauncherMain}, #endif
diff --git a/chrome/app/main_dll_loader_win.cc b/chrome/app/main_dll_loader_win.cc index 517095c7..69ce2c54 100644 --- a/chrome/app/main_dll_loader_win.cc +++ b/chrome/app/main_dll_loader_win.cc
@@ -133,14 +133,12 @@ // Initialize the sandbox services. sandbox::SandboxInterfaceInfo sandbox_info = {nullptr}; const bool is_browser = process_type_.empty(); - const bool is_cloud_print_service = - process_type_ == switches::kCloudPrintServiceProcess; // IsUnsandboxedSandboxType() can't be used here because its result can be // gated behind a feature flag, which are not yet initialized. const bool is_sandboxed = sandbox::policy::SandboxTypeFromCommandLine(cmd_line) != sandbox::mojom::Sandbox::kNoSandbox; - if (is_browser || is_cloud_print_service || is_sandboxed) { + if (is_browser || is_sandboxed) { // For child processes that are running as --no-sandbox, don't initialize // the sandbox info, otherwise they'll be treated as brokers (as if they // were the browser).
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index a32413ff..7a19eb7 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1274,6 +1274,7 @@ hulpsentrum<ph name="END_LINK" /> raadpleeg.</translation> <translation id="22665427234727190">Vra wanneer 'n werf toegang tot Bluetooth-toestelle wil hê (aanbeveel)</translation> <translation id="2266957463645820432">IPP oor USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth gedeaktiveer</translation> <translation id="2270450558902169558">Ruil data uit met enige toestel in die domein <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Installasie <ph name="BEGIN_BOLD" />sal jou hele harde skyf uitvee<ph name="END_BOLD" />. Maak seker dat jou data gerugsteun is.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Installasie kan nie gekanselleer word nadat dit begin het nie.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">Werf gebruik tans MIDI</translation> <translation id="3088128611727407543">Berei tans programprofiel voor …</translation> <translation id="3088325635286126843">Hernoem …</translation> -<translation id="3089064280130434511">Keer werwe om vensters op jou skerms oop te maak en te plaas</translation> <translation id="3089137131053189723">Soektog is uitgevee</translation> <translation id="3090589793601454425">Moenie skuif nie</translation> <translation id="3090819949319990166">Kan nie eksterne crx-lêer na <ph name="TEMP_CRX_FILE" /> kopieer nie.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">My prente</translation> <translation id="4813512666221746211">Netwerkfout</translation> <translation id="4814378367953456825">Voer 'n naam in vir hierdie vingerafdruk</translation> +<translation id="481574578487123132">Gekoppelde toestelle</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, besonderhede</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 boekmerk is uitgevee}other{{COUNT} boekmerke is uitgevee}}</translation> <translation id="4819607494758673676">Google Assistent-kennisgewings</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">USB-toestelle vanaf verkoper <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Stel PIN op</translation> <translation id="4830026649400230050">Alle aflaaie wat kwalifiseer, word na jou organisasie se <ph name="WEB_DRIVE" />-rekening geroeteer.</translation> -<translation id="4830121310592638841">Vra wanneer 'n werf vensters op jou skerms wil oopmaak en plaas</translation> <translation id="4830502475412647084">Installeer tans bedryfstelselopdatering</translation> <translation id="4830573902900904548">Jou <ph name="DEVICE_TYPE" /> kan nie met <ph name="NETWORK_NAME" /> aan die internet koppel nie. Kies 'n ander netwerk. <ph name="LEARN_MORE_LINK_START" />Kom meer te wete<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Het 1 drukker op die drukbediener gekry</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Deursoek Google of voer 'n URL in</translation> <translation id="5565735124758917034">Aktief</translation> <translation id="5568069709869097550">Kan nie aanmeld nie</translation> +<translation id="5571066253365925590">Bluetooth geaktiveer</translation> <translation id="5571092938913434726">Globale mediakontroles</translation> <translation id="5571832155627049070">Pasmaak jou profiel</translation> <translation id="5572851009514199876">Begin asseblief deur by Chrome aan te meld sodat Chrome kan kyk of jy toegelaat word om na hierdie werf te gaan.</translation> @@ -4830,6 +4831,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Vra jou administrateur om hierdie program te verwyder om te verseker dat jy kan aanhou deur die web blaai.}other{Vra jou administrateur om hierdie programme te verwyder om te verseker dat jy kan aanhou deur die web blaai.}}</translation> <translation id="5997337190805127100">Kom meer te wete oor werftoegang</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultate vir "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Jou toestelle</translation> <translation id="6002210667729577411">Skuif groep na nuwe venster</translation> <translation id="6002452033851752583">Wagwoord is van jou Google-rekening af uitgevee</translation> <translation id="6002458620803359783">Voorkeurstemme</translation> @@ -5636,7 +5638,6 @@ <translation id="6833996806551876956">Privaatheidsandputproeflopie</translation> <translation id="6834652994408928492">Donkermodus sal outomaties met sonsondergang aanskakel</translation> <translation id="6835762382653651563">Koppel aan die internet om jou <ph name="DEVICE_TYPE" /> op te dateer.</translation> -<translation id="6838034009068684089">Vra wanneer 'n werf vensters op jou skerms wil oopmaak en plaas (aanbeveel)</translation> <translation id="6839225236531462745">Sertifikaat-uitveefout</translation> <translation id="6839916869147598086">Aanmelding het verander</translation> <translation id="6840155290835956714">Vra voordat gestuur word</translation> @@ -6547,7 +6548,6 @@ <translation id="7775694664330414886">Oortjie is geskuif na naamlose groep – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> sal lêers in <ph name="FOLDERNAME" /> kan bekyk totdat jy alle oortjies vir hierdie werf toemaak</translation> <translation id="7776701556330691704">Geen stemme gevind nie</translation> -<translation id="7777284276915203144">Jou wagwoord word op jou toestel geënkripteer voordat dit in Google Wagwoordbestuurder gestoor word</translation> <translation id="7781335840981796660">Alle gebruikerrekeninge en plaaslike data sal verwyder word.</translation> <translation id="7782102568078991263">Nie nog voorstelle van Google af nie</translation> <translation id="7782717250816686129">Berg aanhoudende data op die aanmeldskerm en voeg eiebewyse by die sessie.</translation> @@ -7199,7 +7199,6 @@ <translation id="8428634594422941299">Het dit</translation> <translation id="84297032718407999">Jy sal oor <ph name="LOGOUT_TIME_LEFT" /> afgemeld word</translation> <translation id="8431190899827883166">Wys tikke</translation> -<translation id="8431730749911729314">Enkripteer wagwoorde op jou toestel voordat dit in Google Wagwoordbestuurder gestoor word</translation> <translation id="8434480141477525001">NaCl-ontfoutpoort</translation> <translation id="8435395510592618362">Verifieer jou identiteit by <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">VSA</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index daa2591..c25be8b 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -1268,6 +1268,7 @@ በcast ላይ ለሚከሰቱ ችግሮች መላ ለመፈለግ ለማገዝ እባክዎ <ph name="BEGIN_LINK" />የእገዛ ማዕከልን<ph name="END_LINK" /> ይመልከቱ።</translation> <translation id="22665427234727190">አንድ ጣቢያ የብሉቱዝ መሣሪያዎችን መድረስ ሲፈልግ ጠይቅ (የሚመከር)</translation> <translation id="2266957463645820432">IPP በዩኤስቢ ላይ (IPPUSB)</translation> +<translation id="2268130516524549846">ብሉቱዝ ተሰናክሏል</translation> <translation id="2270450558902169558">በ<ph name="DOMAIN" /> ጎራ ውስጥ ካለ ማንኛውም መሣሪያ ጋር ውሂብ ተለዋወጥ</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />መጫን <ph name="BEGIN_BOLD" />ሙሉውን የእርስዎ ደረቅ አንጻፊ ይደመስሳል<ph name="END_BOLD" />። የእርስዎ ውሂብ ምትኬ ማስቀመጡን ያረጋግጡ።<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />አንዴ መጫን ከተጀመረ በኋላ ሊሰረዝ አይችልም።<ph name="END_PARAGRAPH2" /></translation> @@ -2092,7 +2093,6 @@ <translation id="3088052000289932193">ጣቢያ MIDIን እየተጠቀመ ነው</translation> <translation id="3088128611727407543">የመተግበሪያ መገለጫን በማዘጋጀት ላይ...</translation> <translation id="3088325635286126843">እንደገና &ሰይም...</translation> -<translation id="3089064280130434511">ጣቢያዎች መስኮቶችን እንዳይከፍቱና በማያ ገጽዎችዎ ላይ እንዳያስቀምጧቸው ያግዷቸው</translation> <translation id="3089137131053189723">ፍለጋ ጸድቷል</translation> <translation id="3090589793601454425">አትውሰድ</translation> <translation id="3090819949319990166">ውጫዊ የcrx ፋይል ወደ <ph name="TEMP_CRX_FILE" /> መቅዳት አልተቻለም።</translation> @@ -3708,6 +3708,7 @@ <translation id="4813136279048157860">የእኔ ምስሎች</translation> <translation id="4813512666221746211">የአውታረ መረብ ስህተት</translation> <translation id="4814378367953456825">ለዚህ ጣት አሻራ ስም ያስገቡ</translation> +<translation id="481574578487123132">የተገናኙ መሣሪያዎች</translation> <translation id="4816097470512964351"><ph name="DEVICE" />፣ ዝርዝሮች</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 እልባት ተሰርዟል}one{{COUNT} እልባቶች ተሰርዘዋል}other{{COUNT} እልባቶች ተሰርዘዋል}}</translation> <translation id="4819607494758673676">የGoogle ረዳት ማሳወቂያዎች</translation> @@ -3722,7 +3723,6 @@ <translation id="482952334869563894">የዩኤስቢ መሣሪያዎች ከሻጭ <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">ፒን ያዋቅሩ</translation> <translation id="4830026649400230050">ሁሉም ብቁ የሆኑ ውርዶች ወደ የድርጅትዎ <ph name="WEB_DRIVE" /> መለያ ይተላለፋሉ።</translation> -<translation id="4830121310592638841">አንድ ጣቢያ መስኮቶችን መክፈትና በማያ ገጾችዎ ላይ ሊያስቀምጣቸው ሲፈልግ ጠይቅ</translation> <translation id="4830502475412647084">የስርዓተ ክወና ዝማኔን በመጫን ላይ</translation> <translation id="4830573902900904548">የእርስዎ <ph name="DEVICE_TYPE" /> <ph name="NETWORK_NAME" />ን ተጠቅሞ ከበይነመረብ ጋር መገናኘት አልቻልም። እባክዎ ሌላ አውታረ መረብ ይምረጡ። <ph name="LEARN_MORE_LINK_START" />ተጨማሪ ለመረዳት<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">ከህትመት አገልጋዩ 1 አታሚ ተገኝቷል</translation> @@ -4423,6 +4423,7 @@ <translation id="5563234215388768762">Googleን ይፈልጉ ወይም ዩአርኤል ይተይቡ</translation> <translation id="5565735124758917034">ገባሪ</translation> <translation id="5568069709869097550">መግባት አልተቻለም</translation> +<translation id="5571066253365925590">ብሉቱዝ ነቅቷል</translation> <translation id="5571092938913434726">ሁለንተናዊ የሚዲያ መቆጣጠሪያዎች</translation> <translation id="5571832155627049070">መገለጫዎን አብጅ</translation> <translation id="5572851009514199876">Chrome እርስዎ ይህን ጣቢያ እንዲደርሱ የተፈቀደልዎ መሆኑን ወይም አለመሆኑን እንዲያረጋግጥ እባክዎ ይጀምሩና ወደ Chrome ይግቡ።</translation> @@ -4820,6 +4821,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ ይህን መተግበሪያ እንዲያስወግዱ ይጠይቋቸው።}one{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ እነዚህን መተግበሪያዎች እንዲያስወግዱ ይጠይቋቸው።}other{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ እነዚህን መተግበሪያዎች እንዲያስወግዱ ይጠይቋቸው።}}</translation> <translation id="5997337190805127100">ስለጣቢያ መዳረሻ ተጨማሪ ይወቁ</translation> <translation id="6000758707621254961">ለ«<ph name="SEARCH_TEXT" />» <ph name="RESULT_COUNT" /> ውጤቶችን አሳይ</translation> +<translation id="6002122790816966947">የእርስዎ መሣሪያዎች</translation> <translation id="6002210667729577411">ስብስብ ወደ አዲስ መስኮት ውሰድ</translation> <translation id="6002452033851752583">የይለፍ ቃል ከGoogle መለያዎ ተሰርዟል</translation> <translation id="6002458620803359783">የሚመረጡ ድምጾች</translation> @@ -5626,7 +5628,6 @@ <translation id="6833996806551876956">የግላዊነት Sandbox ሙከራ</translation> <translation id="6834652994408928492">የጨለማ ሁነታ ፀሐይ ስትጠልቅ በራስ-ሰር ይበራል</translation> <translation id="6835762382653651563">የእርስዎን <ph name="DEVICE_TYPE" /> ለማዘመን እባክዎ ከበይነመረብ ጋር ይገናኙ።</translation> -<translation id="6838034009068684089">አንድ ጣቢያ መስኮቶችን መክፈትና በማያ ገጾችዎ ላይ ሊያስቀምጣቸው ሲፈልግ ጠይቅ (የሚመከር)</translation> <translation id="6839225236531462745">የእውቅና ማረጋገጫ ስረዛ ስህተት</translation> <translation id="6839916869147598086">በመለያ መግቢያ ተለውጧል</translation> <translation id="6840155290835956714">ከመላክ በፊት ጠይቅ</translation> @@ -6537,7 +6538,6 @@ <translation id="7775694664330414886">ትር ወደ ያልተሰየመ ቡድን ተወስዷል - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">ሁሉንም የዚህ ጣቢያ ትሮችን እስኪዘጉ ድረስ <ph name="ORIGIN" /> በ<ph name="FOLDERNAME" /> ውስጥ ያሉ ፋይሎችን መመልከት ይችላሉ</translation> <translation id="7776701556330691704">ምንም ድምጾች አልተገኙም</translation> -<translation id="7777284276915203144">የይለፍ ቃልዎ ወደ Google የይለፍ ቃል አስተዳዳሪ ከመቀመጡ በፊት በመሣሪያዎ ላይ ይመሠጠራል</translation> <translation id="7781335840981796660">ሁሉም የተጠቃሚ መለያዎች እና አካባቢያዊ ውሂብ ይወገዳሉ።</translation> <translation id="7782102568078991263">ከGoogle ተጨማሪ የጥቆማ አስተያየቶች የሉም</translation> <translation id="7782717250816686129">በመለያ መግቢያ ማያ ገጽ ላይ ቀጣይነት ያለው ውሂብን ያከማቹ እና ምስክረነቶችን ወደ ክፍለ ጊዜው ያስገቡ።</translation> @@ -7195,7 +7195,6 @@ <translation id="8428634594422941299">ገባኝ</translation> <translation id="84297032718407999">በ<ph name="LOGOUT_TIME_LEFT" /> ውስጥ ዘግተው እንዲወጡ ይደረጋሉ</translation> <translation id="8431190899827883166">መታ ማድረጎችን አሳይ</translation> -<translation id="8431730749911729314">በመሣሪያዎ ላይ ያሉ የይለፍ ቃላትን ወደ Google የይለፍ ቃል አስተዳዳሪ ከመቀመጣቸው በፊት ያመስጥሩ</translation> <translation id="8434480141477525001">NaCl ስህተት ማረሚያ ወደብ</translation> <translation id="8435395510592618362">የእርስዎን ማንነት በ<ph name="APP_NAME" /> ያረጋግጡ</translation> <translation id="8437209419043462667">አሜሪካ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index c5abce5..2dd8f7b1 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1263,6 +1263,7 @@ <translation id="2263679799334060788">تساعدنا ملاحظاتك في تحسين Google Cast ونقدّر لك ذلك. للحصول على مساعدة بشأن تحديد مشاكل الإرسال وحلّها، يُرجى الرجوع إلى <ph name="BEGIN_LINK" />مركز المساعدة<ph name="END_LINK" />.</translation> <translation id="22665427234727190">طلب الإذن عند محاولة موقع إلكتروني الوصول إلى أجهزة البلوتوث (مقترَح)</translation> <translation id="2266957463645820432">بروتوكول الطباعة على الإنترنت (IPP) عبر USB (IPPUSB)</translation> +<translation id="2268130516524549846">تم إيقاف البلوتوث</translation> <translation id="2270450558902169558">تبادل البيانات مع أي جهاز في النطاق <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ستؤدي عملية التثبيت إلى <ph name="BEGIN_BOLD" />محو بيانات محرّك الأقراص الثابتة بالكامل<ph name="END_BOLD" />. ولهذا السبب، احرص على الاحتفاظ بنسخة احتياطية من بياناتك.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ويُرجى العِلم أنه لا يمكن إلغاء عملية التثبيت بعد بدئها.<ph name="END_PARAGRAPH2" /></translation> @@ -2088,7 +2089,6 @@ <translation id="3088052000289932193">يستخدم الموقع الإلكتروني جهاز MIDI.</translation> <translation id="3088128611727407543">جارٍ تحضير الملف الشخصي للتطبيق...</translation> <translation id="3088325635286126843">إ&عادة تسمية...</translation> -<translation id="3089064280130434511">منع المواقع من فتح النوافذ ووضعها على شاشتك</translation> <translation id="3089137131053189723">تم محو البحث</translation> <translation id="3090589793601454425">عدم النقل</translation> <translation id="3090819949319990166">لا يمكن نسخ ملف CRX الخارجي إلى <ph name="TEMP_CRX_FILE" />.</translation> @@ -3704,6 +3704,7 @@ <translation id="4813136279048157860">صوري</translation> <translation id="4813512666221746211">حدث خطأ في الشبكة</translation> <translation id="4814378367953456825">يُرجى إدخال اسم لبصمة الإصبع هذه</translation> +<translation id="481574578487123132">الأجهزة المرتبطة</translation> <translation id="4816097470512964351">الشبكة <ph name="DEVICE" />، التفاصيل</translation> <translation id="4816336393325437908">{COUNT,plural, =1{تم حذف إشارة مرجعية واحدة.}zero{تم حذف {COUNT} إشارة مرجعية.}two{تم حذف إشارتَين مرجعيتَين ({COUNT}).}few{تم حذف {COUNT} إشارات مرجعية.}many{تم حذف {COUNT} إشارة مرجعية.}other{تم حذف {COUNT} إشارة مرجعية.}}</translation> <translation id="4819607494758673676">إشعارات "مساعد Google"</translation> @@ -3718,7 +3719,6 @@ <translation id="482952334869563894">أجهزة USB من المورِّد <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">إعداد رقم التعريف الشخصي</translation> <translation id="4830026649400230050">سيتم توجيه جميع عمليات التنزيل المؤهّلة إلى حساب <ph name="WEB_DRIVE" /> التابع لمؤسستك.</translation> -<translation id="4830121310592638841">طلب الإذن في حال محاولة موقع فتح النوافذ ووضعها على شاشتك</translation> <translation id="4830502475412647084">جارٍ تثبيت تحديث لنظام التشغيل</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> غير قادر على الاتصال بالإنترنت باستخدام <ph name="NETWORK_NAME" />. يُرجى اختيار شبكة أخرى. <ph name="LEARN_MORE_LINK_START" />مزيد من المعلومات<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">تم العثور على طابعة واحدة من خادم الطباعة.</translation> @@ -4419,6 +4419,7 @@ <translation id="5563234215388768762">البحث في Google أو كتابة عنوان URL</translation> <translation id="5565735124758917034">نشط</translation> <translation id="5568069709869097550">تعذّر الدخول</translation> +<translation id="5571066253365925590">تم تفعيل البلوتوث</translation> <translation id="5571092938913434726">عناصر التحكم في الوسائط العامة</translation> <translation id="5571832155627049070">تخصيص ملفك الشخصي</translation> <translation id="5572851009514199876">يُرجى البدء وتسجيل الدخول إلى Chrome لكي يتأكد Chrome مما إذا كان مسموحًا لك الوصول إلى الموقع الإلكتروني هذا أم لا.</translation> @@ -4816,6 +4817,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذا التطبيق.}zero{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}two{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذين التطبيقين.}few{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}many{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}other{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}}</translation> <translation id="5997337190805127100">مزيد من المعلومات عن إمكانية الوصول إلى الموقع الإلكتروني</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> من نتائج البحث عن "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">أجهزتك</translation> <translation id="6002210667729577411">نقل المجموعة إلى نافذة جديدة</translation> <translation id="6002452033851752583">تم حذف كلمة المرور من حسابك على Google.</translation> <translation id="6002458620803359783">الأصوات المُفضَّلة</translation> @@ -5622,7 +5624,6 @@ <translation id="6833996806551876956">الفترة التجريبية لاستخدام ميزة Privacy Sandbox</translation> <translation id="6834652994408928492">سيتم تفعيل الوضع المُعتِم تلقائيًا عند غروب الشمس.</translation> <translation id="6835762382653651563">يُرجى الاتصال بالإنترنت لتحديث <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">السؤال عند محاولة موقع إلكتروني فتح النوافذ ووضعها على شاشتك (إعداد مُستحسَن)</translation> <translation id="6839225236531462745">خطأ حذف الشهادة</translation> <translation id="6839916869147598086">تم تغيير تسجيل الدخول</translation> <translation id="6840155290835956714">السؤال قبل الإرسال</translation> @@ -6534,7 +6535,6 @@ <translation id="7775694664330414886">تم نقل علامة التبويب إلى مجموعة لم تتم تسميتها وتحتوي على <ph name="GROUP_CONTENTS" />.</translation> <translation id="7776156998370251340">سيتمكّن <ph name="ORIGIN" /> من الاطّلاع على الملفات في <ph name="FOLDERNAME" /> إلى أن يتم إغلاق جميع علامات تبويب هذا الموقع الإلكتروني.</translation> <translation id="7776701556330691704">لم يتم العثور على الإعدادات الصوتية في ميزة "تحويل النص إلى كلام"</translation> -<translation id="7777284276915203144">يتم تشفير كلمات المرور على جهازك قبل حفظها في "مدير كلمات المرور" من Google</translation> <translation id="7781335840981796660">ستتم إزالة جميع حسابات المستخدمين والبيانات المحلية.</translation> <translation id="7782102568078991263">ليس هناك المزيد من الاقتراحات من Google</translation> <translation id="7782717250816686129">يمكنك تخزين البيانات الثابتة في شاشة تسجيل الدخول وإدخال بيانات الاعتماد في الجلسة.</translation> @@ -7188,7 +7188,6 @@ <translation id="8428634594422941299">حسنًا</translation> <translation id="84297032718407999">سيتم تسجيل خروجك خلال <ph name="LOGOUT_TIME_LEFT" />.</translation> <translation id="8431190899827883166">عرض النقرات</translation> -<translation id="8431730749911729314">يمكنك تشفير كلمات المرور على جهازك قبل حفظها في "مدير كلمات المرور" من Google</translation> <translation id="8434480141477525001">منفذ تصحيح أخطاء NaCl</translation> <translation id="8435395510592618362">إثبات هويتك من خلال <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">الأمريكية</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index ce8e965..1d0b4815 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -1272,6 +1272,7 @@ সহায় কেন্দ্ৰ<ph name="END_LINK" /> চাওক।</translation> <translation id="22665427234727190">কোনো ছাইটে ব্লুটুথ ডিভাইচসমূহ এক্সেছ কৰিবলৈ বিচাৰিলে সোধক (চুপাৰিছ কৰা হয়)</translation> <translation id="2266957463645820432">USB (IPPUSB)ৰ মাধ্যমেৰে IPP</translation> +<translation id="2268130516524549846">ব্লুটুথ অক্ষম কৰা হ’ল</translation> <translation id="2270450558902169558">এই ড’মেইন <ph name="DOMAIN" />ত যিকোনো ডিভাইচৰ জৰিয়তে ডেটা সাল সলনি কৰক</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ইনষ্টল কৰিলে <ph name="BEGIN_BOLD" />অপোনাৰ হাৰ্ড ড্ৰাইভটোৰ আটাইবোৰ ডেটা মচা যাব<ph name="END_BOLD" />। আপোনাৰ ডেটাৰ বেক আপ লোৱাটো নিশ্চিত কৰক।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ইনষ্টল কৰা আৰম্ভ হ’লে সেইটো বাতিল কৰিব নোৱাৰি।<ph name="END_PARAGRAPH2" /></translation> @@ -2095,7 +2096,6 @@ <translation id="3088052000289932193">ছাইটটোৱে MIDI ব্যৱহাৰ কৰি আছে</translation> <translation id="3088128611727407543">এপ্ প্ৰ’ফাইল সাজু কৰি থকা হৈছে...</translation> <translation id="3088325635286126843">&নতুন নাম দিয়ক...</translation> -<translation id="3089064280130434511">ছাইটসমূহক ৱিণ্ড’ খোলা আৰু আপোনাৰ স্ক্ৰীনসমূহত থোৱাৰ পৰা অৱৰোধ কৰক</translation> <translation id="3089137131053189723">সন্ধানৰ সমল মচা হ'ল</translation> <translation id="3090589793601454425">নিনিব</translation> <translation id="3090819949319990166">বাহ্যিক crx ফাইল <ph name="TEMP_CRX_FILE" />লৈ প্ৰতিলিপি কৰিব নোৱাৰি।</translation> @@ -3223,6 +3223,7 @@ <translation id="4275830172053184480">আপোনাৰ ডিভাইচটো ৰিষ্টাৰ্ট কৰক</translation> <translation id="4278390842282768270">অনুমতি দিয়া হৈছে</translation> <translation id="4279129444466079448">আপুনি এই ডিভাইচটোত <ph name="PROFILE_LIMIT" /> টা পৰ্যন্ত ই-ছিমৰ প্ৰ’ফাইল ইনষ্টল কৰিব পাৰে। অন্য এটা প্ৰ’ফাইল যোগ দিবলৈ প্ৰথমে পূৰ্বৰে পৰা থকা এটা প্ৰ’ফাইল আঁতৰাওক।</translation> +<translation id="4280325816108262082">বন্ধ কৰিলে অথবা ব্যৱহাৰ হৈ নাথকিলে ডিভাইচৰ সংযোগ স্বয়ংক্ৰিয়ভাৱে বিচ্ছিন্ন হৈ যাব</translation> <translation id="4281844954008187215">সেৱাৰ চৰ্তাৱলী</translation> <translation id="4282196459431406533">স্মার্ট লক অন কৰা হৈছে</translation> <translation id="4284755288573763878">বৰ্ধিত সুৰক্ষা অফ কৰিবনে?</translation> @@ -3712,6 +3713,7 @@ <translation id="4813136279048157860">মোৰ প্ৰতিচ্ছবি</translation> <translation id="4813512666221746211">নেটৱৰ্কৰ আসোঁৱাহ</translation> <translation id="4814378367953456825">এই ফিংগাৰপ্ৰিণ্টটোৰ বাবে এটা নাম দিয়ক</translation> +<translation id="481574578487123132">লিংক কৰি থোৱা ডিভাইচ</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, সবিশেষ</translation> <translation id="4816336393325437908">{COUNT,plural, =1{১ টা বুকমাৰ্ক মচা হ’ল}one{{COUNT} টা বুকমাৰ্ক মচা হ’ল}other{{COUNT} টা বুকমাৰ্ক মচা হ’ল}}</translation> <translation id="4819607494758673676">Google Assistantৰ জাননীসমূহ</translation> @@ -3726,7 +3728,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" />ৰ ইউএছবি ডিভাইচ</translation> <translation id="4829768588131278040">পিন ছেট আপ কৰক</translation> <translation id="4830026649400230050">আটাইবোৰ যোগ্য ডাউনল'ড আপোনাৰ <ph name="WEB_DRIVE" /> একাউণ্টলৈ নিয়া হয়।</translation> -<translation id="4830121310592638841">কোনো ছাইটে ৱিণ্ড’ খুলিবলৈ আৰু আপোনাৰ স্ক্ৰীনসমূহত থ’বলৈ বিচাৰিলে সোধক</translation> <translation id="4830502475412647084">OS আপডে'ট ইনষ্টল কৰি থকা হৈছে</translation> <translation id="4830573902900904548">আপোনাৰ <ph name="DEVICE_TYPE" /> <ph name="NETWORK_NAME" /> ব্যৱহাৰ কৰি ইণ্টাৰনেটৰ সৈতে সংযোগ হ’ব পৰা নাই। অনুগ্ৰহ কৰি অন্য এটা নেটৱৰ্ক বাছনি কৰক। <ph name="LEARN_MORE_LINK_START" />অধিক জানক<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">প্ৰিণ্ট ছার্ভাৰটোৰ পৰা ১ টা প্ৰিণ্টাৰ বিচাৰি পোৱা গৈছে</translation> @@ -4343,6 +4344,7 @@ <translation id="5490721031479690399">ব্লুটুথ ডিভাইচৰ পৰা সংযোগ বিচ্ছিন্ন কৰক</translation> <translation id="5490798133083738649">Linuxক আপোনাৰ মাইক্ৰ’ফ’ন এক্সেছ কৰিবলৈ দিয়ক</translation> <translation id="549211519852037402">ধোঁৱাবৰণীয়া শেতা হালধীয়া আৰু বগা</translation> +<translation id="5492637351392383067">অন-ডিভাইচ এনক্ৰিপশ্বন</translation> <translation id="5493792505296048976">স্ক্ৰীণ অন কৰা আছে</translation> <translation id="5494016731375030300">শেহতীয়াকৈ বন্ধ কৰা টেব</translation> <translation id="5494362494988149300">&ডাউনল’ড সম্পূর্ণ হ’লে খোলক</translation> @@ -4426,6 +4428,7 @@ <translation id="5563234215388768762">Googleত সন্ধান কৰক বা এটা URL টাইপ কৰক</translation> <translation id="5565735124758917034">সক্ৰিয়</translation> <translation id="5568069709869097550">ছাইন ইন কৰিব নোৱাৰি</translation> +<translation id="5571066253365925590">ব্লুটুথ সক্ষম কৰা হ'ল</translation> <translation id="5571092938913434726">গ্ল’বেল মিডিয়া নিয়ন্ত্ৰণবোৰ</translation> <translation id="5571832155627049070">আপোনাৰ প্ৰ’ফাইলটো কাষ্টমাইজ কৰক</translation> <translation id="5572851009514199876">অনুগ্ৰহ কৰি আৰম্ভ কৰি Chromeত ছাইন ইন কৰক যাতে Chromeএ আপুনি এই ছাইটটো এক্সেছ কৰিব পাৰেনে নোৱাৰে চাব পাৰে।</translation> @@ -4823,6 +4826,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{আপুনি যাতে ৱেবত ব্ৰাউজ কৰি থাকিব পাৰে সেইটো সুনিশ্চিত কৰিবলৈ আপোনাৰ প্ৰশাসকক এই এপ্লিকেশ্বনটো আঁতৰাবলৈ কওক।}one{আপুনি যাতে ৱেবত ব্ৰাউজ কৰি থাকিব পাৰে সেইটো সুনিশ্চিত কৰিবলৈ আপোনাৰ প্ৰশাসকক এই এপ্লিকেশ্বনবোৰ আঁতৰাবলৈ কওক।}other{আপুনি যাতে ৱেবত ব্ৰাউজ কৰি থাকিব পাৰে সেইটো সুনিশ্চিত কৰিবলৈ আপোনাৰ প্ৰশাসকক এই এপ্লিকেশ্বনবোৰ আঁতৰাবলৈ কওক।}}</translation> <translation id="5997337190805127100">ছাইট এক্সেছৰ বিষয়ে অধিক জানক</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />'ৰ বাবে <ph name="RESULT_COUNT" />টা ফলাফল</translation> +<translation id="6002122790816966947">আপোনাৰ ডিভাইচ</translation> <translation id="6002210667729577411">গোটটোক নতুন ৱিণ্ড’লৈ স্থানান্তৰ কৰক</translation> <translation id="6002452033851752583">আপোনাৰ Google একাউণ্টৰ পৰা পাছৱৰ্ড মচা হৈছে</translation> <translation id="6002458620803359783">অগ্ৰাধিকাৰ দিয়া ধ্বনিসমূহ</translation> @@ -5629,7 +5633,6 @@ <translation id="6833996806551876956">গোপনীয়তা ছেণ্ডবক্সৰ ট্ৰায়েল</translation> <translation id="6834652994408928492">সূৰ্যাস্ত হ’লে গাঢ় ম’ডটো স্বয়ংক্ৰিয়ভাৱে অন হ’ব</translation> <translation id="6835762382653651563">অনুগ্ৰহ কৰি আপোনাৰ <ph name="DEVICE_TYPE" /> আপডে’ট কৰিবলৈ ইন্টাৰনেটৰ সৈতে সংযোগ কৰক।</translation> -<translation id="6838034009068684089">কোনো ছাইটে ৱিণ্ড’ খুলিবলৈ আৰু আপোনাৰ স্ক্ৰীনসমূহত থ’বলৈ বিচাৰিলে সোধক (চুপাৰিছ কৰা হয়)</translation> <translation id="6839225236531462745">প্ৰমাণপত্ৰ মচাত আসোঁৱাহ</translation> <translation id="6839916869147598086">ছাইন ইন প্ৰক্ৰিয়া সলনি হৈছে</translation> <translation id="6840155290835956714">পঠিওৱাৰ আগতে সোধক</translation> @@ -7980,6 +7983,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" />এ এই ফ’ল্ডাৰটোত থকা ফাইলসমূহ খুলিব নোৱাৰে কাৰণ ইয়াত ছিষ্টেমৰ ফাইল আছে</translation> <translation id="950307215746360464">ছেটআপ গাইড</translation> <translation id="951991426597076286">অস্বীকাৰ কৰক</translation> +<translation id="952471655966876828">অন কৰিলে অথবা ব্যৱহাৰ কৰিলে ডিভাইচ স্বয়ংক্ৰিয়ভাৱে সংযুক্ত হ’ব</translation> <translation id="953434574221655299">আপুনি নিজৰ ডিভাইচটো কেতিয়া সক্ৰিয়ভাৱে ব্যৱহাৰ কৰি থাকে সেয়া জানিবলৈ দিয়া হয়</translation> <translation id="956500788634395331">আপুনি সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বনসমূহৰ পৰা সুৰক্ষিত</translation> <translation id="957960681186851048">এই ছাইটটোৱে স্বয়ংক্ৰিয়ভাৱে একাধিক ফাইল ডাউনল’ড কৰাৰ চেষ্টা কৰিছিল</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index 6a19a4c..d1482d3 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -1258,6 +1258,7 @@ yardım mərkəzinə<ph name="END_LINK" /> istinad edin.</translation> <translation id="22665427234727190">Sayt Bluetooth cihazlarına giriş etmək istədikdə icazə tələb edin (tövsiyə edilir)</translation> <translation id="2266957463645820432">IPP USB-də (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth deaktiv edildi</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> domenində istənilən cihazla data mübadiləsi edin</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Quraşdırma nəticəsində <ph name="BEGIN_BOLD" />sərt diskdəki bütün data silinəcək<ph name="END_BOLD" />. Datanızın yedəkləndiyinə əmin olun.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Quraşdırma başladıqdan sonra ləğv edilə bilməz.<ph name="END_PARAGRAPH2" /></translation> @@ -2081,7 +2082,6 @@ <translation id="3088052000289932193">Sayt MIDI istifadə edir</translation> <translation id="3088128611727407543">Tətbiq profili hazırlanır...</translation> <translation id="3088325635286126843">Adını dəyişin...</translation> -<translation id="3089064280130434511">Saytların ekranlarınızda pəncərələri açması və yerləşdirməsini bloklayın</translation> <translation id="3089137131053189723">Axtarış silindi</translation> <translation id="3090589793601454425">Köçürməyin</translation> <translation id="3090819949319990166">Xarici crx faylını <ph name="TEMP_CRX_FILE" /> üzərinə kopyalamaq olmur.</translation> @@ -3697,6 +3697,7 @@ <translation id="4813136279048157860">Şəkillərim</translation> <translation id="4813512666221746211">Şəbəkə xətası</translation> <translation id="4814378367953456825">Bu barmaq izi üçün ad daxil edin</translation> +<translation id="481574578487123132">Əlaqələndirilmiş cihazlar</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Detallar</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 əlfəcin silindi}other{{COUNT} əlfəcin silindi}}</translation> <translation id="4819607494758673676">Google Assistent Bildirişləri</translation> @@ -3711,7 +3712,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> adlı təminatçıdan USB cihazları</translation> <translation id="4829768588131278040">PIN kodu ayarlayın</translation> <translation id="4830026649400230050">Bütün uyğun endirmələr təşkilatınızın <ph name="WEB_DRIVE" /> hesabında yönləndirilir.</translation> -<translation id="4830121310592638841">Sayt ekranlarınızda pəncərələri açmaq və yerləşdirmək istədikdə soruşun</translation> <translation id="4830502475412647084">OS güncəlləməsi quraşdırılır</translation> <translation id="4830573902900904548">Sənin <ph name="DEVICE_TYPE" /> istifadə edərək İnternet qoşulmaq iqtidarında deyil <ph name="NETWORK_NAME" /> . Başqa şəbəkə seçin. <ph name="LEARN_MORE_LINK_START" /> Daha çox məlumat <ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Çap serverindən 1 printer tapıldı</translation> @@ -4412,6 +4412,7 @@ <translation id="5563234215388768762">Google'da axtarın və ya link yazın</translation> <translation id="5565735124758917034">Aktiv</translation> <translation id="5568069709869097550">Daxil ola bilməz</translation> +<translation id="5571066253365925590">Bluetooth aktivdir</translation> <translation id="5571092938913434726">Qlobal Media Nəzarətləri</translation> <translation id="5571832155627049070">Profilinizi fərdiləşdirin</translation> <translation id="5572851009514199876">Başlayın və Chrome'a daxil olun, beləliklə, Chrome bu sayta girişə icazə olub olmadığını yoxlaya bilər.</translation> @@ -4807,6 +4808,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Vebdə axtarışa davam etmək üçün administratordan bu tətbiqi silməyi tələb edin.}other{Vebdə axtarışa davam etmək üçün administratordan bu tətbiqləri silməyi tələb edin.}}</translation> <translation id="5997337190805127100">Sayta Giriş Barədə Ətraflı Öyrənin</translation> <translation id="6000758707621254961">"<ph name="SEARCH_TEXT" />" üçün <ph name="RESULT_COUNT" /> nəticə</translation> +<translation id="6002122790816966947">Cihazlarınız</translation> <translation id="6002210667729577411">Qrupu yeni pəncərəyə köçürün</translation> <translation id="6002452033851752583">Parol Google Hesabınızdan silinib</translation> <translation id="6002458620803359783">Seçilmiş Səslər</translation> @@ -5613,7 +5615,6 @@ <translation id="6833996806551876956">Privacy Sandbox sınağı</translation> <translation id="6834652994408928492">Qaranlıq rejim qürub vaxtı avtomatik aktiv ediləcək</translation> <translation id="6835762382653651563">Yeniləmə İnternetə qoşulmaq edin sizin <ph name="DEVICE_TYPE" /> .</translation> -<translation id="6838034009068684089">Sayt ekranlarınızda pəncərələri açmaq və yerləşdirmək istədikdə soruşun (tövsiyə edilir)</translation> <translation id="6839225236531462745">Sertifikatın Silinməsi Xətası</translation> <translation id="6839916869147598086">Giriş dəyişdirilib</translation> <translation id="6840155290835956714">Göndərməmişdən əvvəl soruşun</translation> @@ -6524,7 +6525,6 @@ <translation id="7775694664330414886">Tab adsız qrupa köçürüldü - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Siz bu sayt üzrə bütün tabları bağlayanadək <ph name="ORIGIN" /> <ph name="FOLDERNAME" /> qovluğundakı fayllara baxa biləcək</translation> <translation id="7776701556330691704">Səs tapılmadı</translation> -<translation id="7777284276915203144">Parolunuz Google Parol Menecerində saxlanmazdan əvvəl cihazınızda şifrələnir</translation> <translation id="7781335840981796660">Bütün istifadəçi hesabları və lokal data silinəcək.</translation> <translation id="7782102568078991263">Google'dan daha təklif yoxdur</translation> <translation id="7782717250816686129">Daimi datanı giriş ekranında saxlayıb kredensialları sessiyaya daxil edin.</translation> @@ -7175,7 +7175,6 @@ <translation id="8428634594422941299">Anladım</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> ərzində çıxış edəcəksiniz</translation> <translation id="8431190899827883166">Vizual reaksiya</translation> -<translation id="8431730749911729314">Google Parol Menecerində saxlanmazdan əvvəl cihazınızda parolları şifrələyin</translation> <translation id="8434480141477525001">NaCl Debaq Portu</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> ilə şəxsiyyətinizi doğrulayın</translation> <translation id="8437209419043462667">ABŞ</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 64bd106..07e55af 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -1262,6 +1262,7 @@ <translation id="2263679799334060788">Ваш водгук дапаможа палепшыць Google Cast, і мы цэнім гэта. Каб атрымаць дапамогу па пошуку і выпраўленні непаладак з Cast, наведайце<ph name="BEGIN_LINK" />даведачны цэнтр<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Пытацца, калі сайт запытвае доступ да прылад Bluetooth (рэкамендуецца)</translation> <translation id="2266957463645820432">IPP-over-USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth выключаны</translation> <translation id="2270450558902169558">Абмен данымі з прыладамі ў дамене <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Пры ўсталяванні <ph name="BEGIN_BOLD" />ўсе даныя на цвёрдым дыску будуць сцёрты<ph name="END_BOLD" />. Упэўніцеся, што вашы даныя маюць рэзервовую копію.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Пасля таго як усталяванне пачнецца, працэс нельга будзе скасаваць.<ph name="END_PARAGRAPH2" /></translation> @@ -2085,7 +2086,6 @@ <translation id="3088052000289932193">Сайт выкарыстоўвае MIDI</translation> <translation id="3088128611727407543">Падрыхтоўваецца профіль праграмы...</translation> <translation id="3088325635286126843">&Перайменаваць...</translation> -<translation id="3089064280130434511">Забараніць сайтам адкрываць і размяшчаць вокны на экранах</translation> <translation id="3089137131053189723">Пошукавы запыт выдалены</translation> <translation id="3090589793601454425">Не перамяшчаць</translation> <translation id="3090819949319990166">Не ўдалося скапіраваць знешні файл crx у <ph name="TEMP_CRX_FILE" />.</translation> @@ -3214,6 +3214,7 @@ <translation id="4275830172053184480">Перазапусціце прыладу</translation> <translation id="4278390842282768270">Дазволена</translation> <translation id="4279129444466079448">Максімальная колькасць профіляў eSIM-карт, якія можна ўсталяваць на гэтай прыладзе, – <ph name="PROFILE_LIMIT" />. Каб дадаць яшчэ адзін, выдаліце існуючы профіль.</translation> +<translation id="4280325816108262082">Прылада адключыцца аўтаматычна, калі яе выключаць або перастануць выкарыстоўваць</translation> <translation id="4281844954008187215">Умовы выкарыстання</translation> <translation id="4282196459431406533">Уключаны Smart Lock</translation> <translation id="4284755288573763878">Выключыць палепшаную бяспеку?</translation> @@ -3702,6 +3703,7 @@ <translation id="4813136279048157860">Мае відарысы</translation> <translation id="4813512666221746211">Памылка сеткі</translation> <translation id="4814378367953456825">Увядзіце назву для гэтага адбітка пальца</translation> +<translation id="481574578487123132">Звязаныя прылады</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, падрабязныя звесткі</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Выдалена 1 закладка}one{Выдалена {COUNT} закладка}few{Выдалена {COUNT} закладкі}many{Выдалена {COUNT} закладак}other{Выдалена {COUNT} закладкі}}</translation> <translation id="4819607494758673676">Апавяшчэнні Памочніка Google</translation> @@ -3716,7 +3718,6 @@ <translation id="482952334869563894">Прылады USB ад пастаўшчыка <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Наладзіць PIN-код</translation> <translation id="4830026649400230050">Усе дазволеныя спампоўкі накіроўваюцца ва ўліковы запіс сэрвісу "<ph name="WEB_DRIVE" />" вашай арганізацыі.</translation> -<translation id="4830121310592638841">Пытацца, калі сайт запытвае дазвол адкрываць і размяшчаць вокны на экранах</translation> <translation id="4830502475412647084">Ідзе ўсталяванне абнаўлення АС</translation> <translation id="4830573902900904548">Прыладзе <ph name="DEVICE_TYPE" /> не ўдалося падключыцца да інтэрнэту праз сетку <ph name="NETWORK_NAME" />. Выберыце іншую сетку. <ph name="LEARN_MORE_LINK_START" />Даведацца больш<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">На серверы друку знойдзены 1 прынтар</translation> @@ -4331,6 +4332,7 @@ <translation id="5490721031479690399">Адключыць прыладу Bluetooth</translation> <translation id="5490798133083738649">Дазволіць сістэме Linux доступ да мікрафона</translation> <translation id="549211519852037402">Бэжавы і белы</translation> +<translation id="5492637351392383067">Шыфраванне на прыладзе</translation> <translation id="5493792505296048976">экран уключаны.</translation> <translation id="5494016731375030300">Нядаўна закрытыя ўкладкі</translation> <translation id="5494362494988149300">Адкрыць, калі будзе &гатова</translation> @@ -4414,6 +4416,7 @@ <translation id="5563234215388768762">Увядзіце URL-адрас або запыт для пошуку праз Google</translation> <translation id="5565735124758917034">Актыўны</translation> <translation id="5568069709869097550">Не ўдалося ўвайсці ў сістэму</translation> +<translation id="5571066253365925590">Bluetooth уключаны</translation> <translation id="5571092938913434726">Агульныя элементы кіравання мультымедыйным змесцівам</translation> <translation id="5571832155627049070">Наладзьце свой профіль</translation> <translation id="5572851009514199876">Каб Chrome змог праверыць, ці дазволена вам мець доступ да гэтага сайта, запусціце Chrome і ўвайдзіце ў свой уліковы запіс.</translation> @@ -4811,6 +4814,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Каб і далей праглядаць вэб-старонкі, папрасіце адміністратара выдаліць гэту праграму.}one{Каб і далей праглядаць вэб-старонкі, папрасіце адміністратара выдаліць гэтыя праграмы.}few{Каб і далей праглядаць вэб-старонкі, папрасіце адміністратара выдаліць гэтыя праграмы.}many{Каб і далей праглядаць вэб-старонкі, папрасіце адміністратара выдаліць гэтыя праграмы.}other{Каб і далей праглядаць вэб-старонкі, папрасіце адміністратара выдаліць гэтыя праграмы.}}</translation> <translation id="5997337190805127100">Даведацца больш пра доступ да сайта</translation> <translation id="6000758707621254961">Вынікаў па запыце "<ph name="SEARCH_TEXT" />": <ph name="RESULT_COUNT" /></translation> +<translation id="6002122790816966947">Вашы прылады</translation> <translation id="6002210667729577411">Перамясціць групу ўкладак у новае акно</translation> <translation id="6002452033851752583">Пароль выдалены з Уліковага запісу Google</translation> <translation id="6002458620803359783">Пажаданыя галасы</translation> @@ -5617,7 +5621,6 @@ <translation id="6833996806551876956">Пробны перыяд Privacy Sandbox</translation> <translation id="6834652994408928492">Цёмны рэжым уключыцца аўтаматычна пасля захаду сонца</translation> <translation id="6835762382653651563">Каб абнавіць <ph name="DEVICE_TYPE" />, падключыцеся да інтэрнэту.</translation> -<translation id="6838034009068684089">Пытацца, калі сайт запытвае дазвол адкрываць і размяшчаць вокны на экранах (рэкамендуецца)</translation> <translation id="6839225236531462745">Памылка пры выдаленні сертыфіката</translation> <translation id="6839916869147598086">Працэдура ўваходу змянілася</translation> <translation id="6840155290835956714">Запытваць перад адпраўкай</translation> @@ -7967,6 +7970,7 @@ <translation id="947667444780368238">Сайт <ph name="ORIGIN" /> не можа адкрываць файлы ў гэтай папцы, бо ў ёй знаходзяцца сістэмныя файлы</translation> <translation id="950307215746360464">Дапаможнік па наладжванні</translation> <translation id="951991426597076286">Адхіліць</translation> +<translation id="952471655966876828">Прылада падключыцца аўтаматычна, калі яе ўключаць або будуць выкарыстоўваць</translation> <translation id="953434574221655299">Сайты, якім дазволена атрымліваць звесткі пра тое, калі вы карыстаецеся прыладай</translation> <translation id="956500788634395331">Вы абаронены ад патэнцыйна шкодных пашырэнняў</translation> <translation id="957960681186851048">Гэты сайт паспрабаваў аўтаматычна спампаваць некалькі файлаў</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index ce3c8dd..bc352e5be 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -1270,6 +1270,7 @@ Помощния център<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Извеждане на запитване, когато сайт иска достъп до Bluetooth устройства (препоръчително)</translation> <translation id="2266957463645820432">IPP през USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth е деактивиран</translation> <translation id="2270450558902169558">Обмен на данни с всяко устройство в домейна <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />При инсталирането <ph name="BEGIN_BOLD" />ще бъде изтрит целият ви твърд диск<ph name="END_BOLD" />. Уверете се, че данните ви имат резервно копие.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />След като инсталирането започне, не може да бъде отменено.<ph name="END_PARAGRAPH2" /></translation> @@ -2094,7 +2095,6 @@ <translation id="3088052000289932193">Сайтът използва MIDI</translation> <translation id="3088128611727407543">Потребителският профил за приложението се подготвя...</translation> <translation id="3088325635286126843">&Преименуване...</translation> -<translation id="3089064280130434511">Блокиране на сайтовете, така че да не отварят и разполагат прозорци на екраните ви</translation> <translation id="3089137131053189723">Търсенето бе изчистено</translation> <translation id="3090589793601454425">Без преместване</translation> <translation id="3090819949319990166">Външният crx файл не може да се копира в/ъв „<ph name="TEMP_CRX_FILE" />“.</translation> @@ -3224,6 +3224,7 @@ <translation id="4275830172053184480">Рестартиране на устройството ви</translation> <translation id="4278390842282768270">Разрешено</translation> <translation id="4279129444466079448">На това устройство можете да инсталирате до <ph name="PROFILE_LIMIT" /> профила на електронната SIM карта. За да добавите друг такъв профил, първо премахнете съществуващ.</translation> +<translation id="4280325816108262082">Връзката на устройството ще бъде прекратена автоматично, когато бъде изключено или не се използва</translation> <translation id="4281844954008187215">Условия за ползване</translation> <translation id="4282196459431406533">Функцията Smart Lock е включена</translation> <translation id="4284755288573763878">Искате ли да изключите подобрената защита?</translation> @@ -3713,6 +3714,7 @@ <translation id="4813136279048157860">Моите изображения</translation> <translation id="4813512666221746211">Грешка в мрежата</translation> <translation id="4814378367953456825">Въведете име за този отпечатък</translation> +<translation id="481574578487123132">Свързани устройства</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, подробности</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Изтрихте 1 отметка}other{Изтрихте {COUNT} отметки}}</translation> <translation id="4819607494758673676">Известия от Google Асистент</translation> @@ -3727,7 +3729,6 @@ <translation id="482952334869563894">USB устройства от доставчика <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Настройване на ПИН</translation> <translation id="4830026649400230050">Всички отговарящи на условията изтегляния се пренасочват към профила в(ъв) <ph name="WEB_DRIVE" /> на организацията ви.</translation> -<translation id="4830121310592638841">Извеждане на запитване, когато сайт иска да отваря и разполага прозорци на екраните ви</translation> <translation id="4830502475412647084">Актуализацията на операционната система се инсталира</translation> <translation id="4830573902900904548">Устройството ви <ph name="DEVICE_TYPE" /> не може да се свърже с интернет през „<ph name="NETWORK_NAME" />“. Моля, изберете друга мрежа. <ph name="LEARN_MORE_LINK_START" />Научете повече<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">В сървъра за отпечатване бе открит 1 принтер</translation> @@ -4344,6 +4345,7 @@ <translation id="5490721031479690399">Прекратяване на връзката на устройство с Bluetooth</translation> <translation id="5490798133083738649">Разрешаване на достъпа на Linux до микрофона ви</translation> <translation id="549211519852037402">Бежово и бяло</translation> +<translation id="5492637351392383067">Шифроване на устройството</translation> <translation id="5493792505296048976">екранът е включен</translation> <translation id="5494016731375030300">Наскоро затворени раздели</translation> <translation id="5494362494988149300">Отваряне &след изтегляне</translation> @@ -4427,6 +4429,7 @@ <translation id="5563234215388768762">Търсете с Google или въведете URL адрес</translation> <translation id="5565735124758917034">Активно</translation> <translation id="5568069709869097550">Не може да се влезе</translation> +<translation id="5571066253365925590">Bluetooth е активиран</translation> <translation id="5571092938913434726">Глобални контроли за мултимедия</translation> <translation id="5571832155627049070">Персонализиране на потребителския ви профил</translation> <translation id="5572851009514199876">Моля, стартирайте браузъра Chrome и влезте в него, за да се провери дали имате достъп до този сайт.</translation> @@ -4825,6 +4828,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{За да продължите да сърфирате безпроблемно в мрежата, помолете администратора да премахне това приложение.}other{За да продължите да сърфирате безпроблемно в мрежата, помолете администратора да премахне тези приложения.}}</translation> <translation id="5997337190805127100">Научете повече за достъпа на сайта</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> резултата за „<ph name="SEARCH_TEXT" />“</translation> +<translation id="6002122790816966947">Вашите устройства</translation> <translation id="6002210667729577411">Преместване на групата в нов прозорец</translation> <translation id="6002452033851752583">Паролата бе изтрита от профила ви в Google</translation> <translation id="6002458620803359783">Предпочитани гласове</translation> @@ -5631,7 +5635,6 @@ <translation id="6833996806551876956">Пробен период за Privacy Sandbox</translation> <translation id="6834652994408928492">Тъмният режим ще се включи автоматично при залез</translation> <translation id="6835762382653651563">Моля, свържете се с интернет, за да актуализирате устройството си <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Извеждане на запитване, когато сайт иска да отваря и разполага прозорци на екраните ви (препоръчително)</translation> <translation id="6839225236531462745">Грешка при изтриване на сертификат</translation> <translation id="6839916869147598086">Функцията за влизане в профил е променена</translation> <translation id="6840155290835956714">Извеждане на запитване преди изпращане</translation> @@ -7983,6 +7986,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> не може да отваря файловете в тази папка, защото са системни</translation> <translation id="950307215746360464">Ръководство за настройване</translation> <translation id="951991426597076286">Отхвърляне</translation> +<translation id="952471655966876828">Устройството ще се свърже автоматично, когато бъде включено и се използва</translation> <translation id="953434574221655299">Разрешено е да разпознава кога използвате устройството си активно</translation> <translation id="956500788634395331">Защитени сте от потенциално опасни разширения</translation> <translation id="957960681186851048">Този сайт опита да изтегли автоматично няколко файла</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 956d0833..8ecd80b 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -243,6 +243,7 @@ <translation id="1235458158152011030">পরিচিত নেটওয়ার্কগুলি</translation> <translation id="123578888592755962">ডিস্ক পূর্ণ</translation> <translation id="1235924639474699896">{COUNT,plural, =1{টেক্সট}one{#টি টেক্সট}other{#টি টেক্সট}}</translation> +<translation id="1236009322878349843">ফোন এডিট করুন</translation> <translation id="1239594683407221485">Files অ্যাপে ডিভাইসের কন্টেন্ট ঘুরে দেখুন।</translation> <translation id="1241066500170667906"><ph name="EXPERIMENT_NAME" />-এর জন্য পরীক্ষা করে দেখার স্ট্যাটাস বেছে নিন</translation> <translation id="124116460088058876">আরও ভাষা</translation> @@ -1275,6 +1276,7 @@ সহায়তা কেন্দ্র<ph name="END_LINK" /> দেখুন।</translation> <translation id="22665427234727190">কোনও সাইট ব্লুটুথ ডিভাইস অ্যাক্সেস করতে চাইলে, একবার জিজ্ঞাসা করে নিন (সাজেস্ট করা হয়েছে)</translation> <translation id="2266957463645820432">USB এর মাধ্যমে IPP (IPPUSB)</translation> +<translation id="2268130516524549846">ব্লুটুথ অক্ষমিত</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> ডোমেনের মধ্যে যে কোনও ডিভাইসের সাথে ডেটা বিনিময় করুন</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ইনস্টল করা হলে <ph name="BEGIN_BOLD" />আপনার হার্ড ড্রাইভের সমস্ত ডেটা মুছে যাবে<ph name="END_BOLD" />। আপনার ডেটার ব্যাক-আপ নেওয়া হয়েছে কিনা তা নিশ্চিত করুন।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ইনস্টল করা একবার শুরু হয়ে গেলে আর বন্ধ করা যাবে না।<ph name="END_PARAGRAPH2" /></translation> @@ -1957,6 +1959,7 @@ <translation id="2939908794993783865">বন্ধ থাকা অতিরিক্ত সাইট</translation> <translation id="2939938020978911855">উপলব্ধ ব্লুটুথ ডিভাইসগুলি দেখান</translation> <translation id="2941112035454246133">নিম্ন</translation> +<translation id="2941696810925320401">আপনার স্ক্রিনে অতিরিক্ত ডকুমেন্ট বা ফুল-স্ক্রিন কন্টেন্ট দেখানোর জন্য সাধারণত সাইটগুলি উইন্ডো খুলে রাখে</translation> <translation id="2942279350258725020">Android Messages</translation> <translation id="2942560570858569904">অপেক্ষা করা হচ্ছে...</translation> <translation id="2942581856830209953">এই পৃষ্ঠাটি কাস্টমাইজ করুন</translation> @@ -2098,7 +2101,6 @@ <translation id="3088052000289932193">সাইট MIDI ব্যবহার করছে</translation> <translation id="3088128611727407543">অ্যাপ প্রোফাইল প্রস্তুত করা হচ্ছে...</translation> <translation id="3088325635286126843">&পুনঃনামকরণ...</translation> -<translation id="3089064280130434511">কোনও সাইটকে আপনার স্ক্রিনে উইন্ডো খোলা ও রাখা থেকে ব্লক করুন</translation> <translation id="3089137131053189723">সার্চ বিভাগ খালি করা হয়েছে।</translation> <translation id="3090589793601454425">সরাতে চাই না</translation> <translation id="3090819949319990166"><ph name="TEMP_CRX_FILE" />-এ বহিরাগত crx ফাইলটি কপি করতে পারবেন না৷</translation> @@ -2110,6 +2112,7 @@ <translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{১টি সম্ভাব্য ক্ষতিকারক এক্সটেনশন বন্ধ করে দেওয়া হয়েছে। আপনি এটি সরিয়েও দিতে পারেন।}one{{NUM_EXTENSIONS}টি সম্ভাব্য ক্ষতিকারক এক্সটেনশন বন্ধ করে দেওয়া হয়েছে। আপনি এগুলি সরিয়েও দিতে পারেন।}other{{NUM_EXTENSIONS}টি সম্ভাব্য ক্ষতিকারক এক্সটেনশন বন্ধ করে দেওয়া হয়েছে। আপনি এগুলি সরিয়েও দিতে পারেন।}}</translation> <translation id="3101126716313987672">কম আলো</translation> <translation id="3101709781009526431">তারিখ এবং সময়</translation> +<translation id="3103451787721578293">এই ডেটা আপলোড করার জন্য একটি কারণ লিখুন:</translation> <translation id="3103941660000130485">Linux আপগ্রেড করতে সমস্যা হচ্ছে</translation> <translation id="3105796011181310544">আবার পরিবর্তন করে Google-এ ফিরে যেতে চান?</translation> <translation id="310671807099593501">সাইটটি ব্লুটুথ ব্যবহার করছে</translation> @@ -2636,6 +2639,7 @@ <translation id="3670113805793654926">যেকোনও ভেন্ডর থেকে ডিভাইস</translation> <translation id="3670229581627177274">ব্লুটুথ চালু করুন</translation> <translation id="3672681487849735243">একটি ফ্যাক্টরি ত্রুটি শনাক্ত করা হয়েছে</translation> +<translation id="3673097791729989571">সাইন-ইন ফিচারটি <ph name="SAML_DOMAIN" /> দ্বারা হোস্ট করা হয়েছে</translation> <translation id="367645871420407123">যদি আপনি ডিফল্ট টেস্ট ছবি মানে রুট পাসওয়ার্ড সেট করতে চান তবে খালি ছাড়ুন</translation> <translation id="3677106374019847299">কাস্টম প্রদানকারীর নাম লিখুন</translation> <translation id="3677911431265050325">মোবাইল সাইটের জন্য অনুরোধ করুন</translation> @@ -3418,6 +3422,7 @@ <translation id="4481467543947557978">সার্ভিস ওয়ার্কার</translation> <translation id="4481530544597605423">বিযুক্ত করা ডিভাইসগুলি</translation> <translation id="4482990632723642375">সম্প্রতি বন্ধ করা ট্যাব</translation> +<translation id="4484922932728109422">উইন্ডো খুলে রাখার জন্য আপনার স্ক্রিনের বিষয়ে তথ্য ব্যবহার করার অনুমতি সাইটগুলি দেবেন না</translation> <translation id="4487489714832036847">গতানুগতিক সফ্টওয়্যারের পরিবর্তে Chromebook কিছু অ্যাপ ব্যবহার করে। প্রোডাক্টিভিটি, বিনোদন ও আরও অনেক কিছুর জন্য অ্যাপ ইনস্টল করুন।</translation> <translation id="4488257340342212116">আপনার ক্যামেরা ব্যবহার করার অনুমতি দেওয়া হয়েছে</translation> <translation id="4488502501195719518">সব ডেটা মুছবেন?</translation> @@ -3501,6 +3506,7 @@ <translation id="4565917129334815774">সিস্টেম লগ সেভ করুন</translation> <translation id="4566417217121906555">মাইক্রোফোন মিউট করুন</translation> <translation id="456717285308019641">অনুবাদ করার জন্য পৃষ্ঠার ভাষা</translation> +<translation id="4567512141633030272">সাইন-ইন বিকল্পটি ভুল?</translation> <translation id="4567533462991917415">সেট আপ করার পরেও যেকোনও সময় আরও লোকজন যোগ করতে পারবেন। প্রত্যেক ব্যক্তি নিজের অ্যাকাউন্ট পছন্দমতো সেট আপ করে ডেটা ব্যক্তিগত রাখতে পারবেন।</translation> <translation id="4567772783389002344">শব্দ যোগ করুন</translation> <translation id="4568025708905928793">একটি নিরাপত্তা কী লাগবে</translation> @@ -3716,6 +3722,7 @@ <translation id="4813136279048157860">আমার ছবি</translation> <translation id="4813512666221746211">নেটওয়ার্ক ত্রুটি</translation> <translation id="4814378367953456825">এই আঙুলের ছাপের একটি নাম লিখুন</translation> +<translation id="481574578487123132">লিঙ্ক করা ডিভাইস</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, বিবরণ</translation> <translation id="4816336393325437908">{COUNT,plural, =1{১টি বুকমার্ক মোছা হয়েছে}one{{COUNT}টি বুকমার্ক মোছা হয়েছে}other{{COUNT}টি বুকমার্ক মোছা হয়েছে}}</translation> <translation id="4819607494758673676">Google Assistant বিজ্ঞপ্তি</translation> @@ -3730,7 +3737,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" />-এর ইউএসবি ডিভাইস</translation> <translation id="4829768588131278040">পিন সেট-আপ করুন</translation> <translation id="4830026649400230050">সমস্ত উপযুক্ত ডাউনলোড আপনার সংস্থার <ph name="WEB_DRIVE" />-এ সেভ করা হয়েছে।</translation> -<translation id="4830121310592638841">কোনও সাইট আপনার স্ক্রিনে উইন্ডো খুলতে ও রাখতে চাইলে অনুমতি নিতে বলুন</translation> <translation id="4830502475412647084">OS আপডেট ইনস্টল করা হচ্ছে</translation> <translation id="4830573902900904548">আপনার <ph name="DEVICE_TYPE" /> <ph name="NETWORK_NAME" /> ব্যবহার করে ইন্টারনেটে সংযুক্ত হতে অক্ষম। দয়া করে অন্য নেটওয়ার্ক বেছে নিন। <ph name="LEARN_MORE_LINK_START" />আরও জানুন<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">প্রিন্ট সার্ভারে ১টি প্রিন্টার পাওয়া গেছে</translation> @@ -3746,6 +3752,7 @@ <translation id="4841741146571978176">প্রয়োজনীয় ভার্চুয়াল মেশিনটি নেই। চালিয়ে যেতে <ph name="VM_TYPE" /> সেট আপ করে দেখুন</translation> <translation id="4842976633412754305">এই পৃষ্ঠাটি প্রমাণীকৃত নয় এমন সূত্র থেকে স্ক্রিপ্ট লোড করার চেষ্টা করছে।</translation> <translation id="4844333629810439236">অন্য কীবোর্ডগুলি</translation> +<translation id="4844633725025837809">অতিরিক্ত নিরাপত্তার জন্য, Google পাসওয়ার্ড ম্যানেজারে সেভ করার আগে আপনার ডিভাইসে পাসওয়ার্ড এনক্রিপ্ট করুন</translation> <translation id="4846680374085650406">আপনি এই সেটিংয়ের জন্য প্রশাসকের সুপারিশ অনুসরণ করছেন৷</translation> <translation id="4847902821209177679"><ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" /> বেছে নেওয়া হয়েছে, <ph name="TOPIC_SOURCE" />-এর অ্যালবামগুলি বেছে নিতে Enter কী প্রেস করুন</translation> <translation id="4848191975108266266">Google Assistant "হ্যালো Google"</translation> @@ -3887,6 +3894,7 @@ <translation id="499165176004408815">উচ্চ কনট্রাস্ট মোড ব্যবহার করুন</translation> <translation id="4992458225095111526">পাওয়ারওয়াশ নিশ্চিত করুন</translation> <translation id="4992473555164495036">আপনার অ্যাডমিনিস্ট্রেটর উপলভ্য ইনপুট পদ্ধতিগুলি সীমাবদ্ধ করেছেন।</translation> +<translation id="4992984395680162305">এই ডিভাইসগুলি একটি QR কোড স্ক্যান করে লিঙ্ক করা হয়েছিল।</translation> <translation id="4994474651455208930">সাইটগুলিকে প্রোটোকলের জন্য ডিফল্ট হ্যান্ডলার হওয়ার জন্য জিজ্ঞাসা করার অনুমতি দেয়</translation> <translation id="4994754230098574403">সেট-আপ করা হচ্ছে</translation> <translation id="4995131849631312693"><ph name="BEGIN_PARAGRAPH1" />এনরোল করার আগে TPM মুছতে হবে যাতে <ph name="DEVICE_OS" /> ডিভাইসের মালিকানা পেতে পারে।<ph name="END_PARAGRAPH1" /> @@ -4007,6 +4015,7 @@ <translation id="5123433949759960244">বাস্কেটবল</translation> <translation id="5125751979347152379">ভুল ইউআরএল৷</translation> <translation id="5126611267288187364">পরিবর্তনগুলি দেখুন</translation> +<translation id="5127242257756472928">উইন্ডো খুলে রাখার জন্য আপনার স্ক্রিনের বিষয়ে তথ্য ব্যবহার করার অনুমতি নেই</translation> <translation id="5127620150973591153">নিরাপদ কানেকশন আইডি: <ph name="TOKEN" /></translation> <translation id="5127805178023152808">সিঙ্ক বন্ধ রয়েছে</translation> <translation id="5127881134400491887">নেটওয়ার্ক সংযোগগুলি পরিচালনা করুন</translation> @@ -4119,6 +4128,7 @@ <translation id="5243522832766285132">কয়েক মুহূর্তের মধ্যে আবার চেষ্টা করুন</translation> <translation id="5244474230056479698"><ph name="EMAIL" /> এ সিঙ্ক হচ্ছে</translation> <translation id="5245610266855777041">একটি স্কুল অ্যাকাউন্ট দিয়ে কাজ শুরু করা যাক</translation> +<translation id="5246036036039717045">এই ডিভাইসগুলিকে নিরাপত্তা কী হিসেবে ব্যবহার করা যেতে পারে কারণ আপনি সেগুলিতে Chrome-এ সাইন-ইন করেছেন।</translation> <translation id="5246282308050205996"><ph name="APP_NAME" /> ক্র্যাশ করেছে৷ অ্যাপ পুনঃসূচনা করতে এই বেলুনটি ক্লিক করুন৷</translation> <translation id="5247051749037287028">প্রদর্শিত নাম (ঐচ্ছিক)</translation> <translation id="5249624017678798539">ব্রাউজারটি ডাউনলোড সম্পূর্ণ হওয়ার আগে ক্র্যাশ করেছে৷</translation> @@ -4431,6 +4441,7 @@ <translation id="5563234215388768762">Google-এ সার্চ করুন অথবা URL টাইপ করুন</translation> <translation id="5565735124758917034">সক্রিয়</translation> <translation id="5568069709869097550">প্রবেশ করতে পারছেন না</translation> +<translation id="5571066253365925590">ব্লুটুথ সক্ষমিত</translation> <translation id="5571092938913434726">গ্লোবাল মিডিয়া কন্ট্রোল</translation> <translation id="5571832155627049070">আপনার প্রোফাইল কাস্টমাইজ করুন</translation> <translation id="5572851009514199876">আপনার এই সাইটে অ্যাক্সেস আছে কিনা, তা দেখার জন্য Chrome চালু করে সাইন-ইন করুন।</translation> @@ -4607,6 +4618,7 @@ <translation id="5757375109985023827">প্রিভিউ করতে কোনও ট্যাব বেছে নিন</translation> <translation id="5758631781033351321">আপনি নিজের পড়ার তালিকা এখানে খুঁজে পাবেন</translation> <translation id="5759728514498647443"><ph name="APP_NAME" />-এর মাধ্যমে প্রিন্ট করার জন্য আপনার পাঠানো দস্তাবেজগুলি <ph name="APP_NAME" />-এর মাধ্যমে পড়া যাবে৷</translation> +<translation id="5762787084360227629">Google অ্যাকাউন্টের তথ্য লিখুন</translation> <translation id="5763751966069581670">কোনও USB ডিভাইস খুঁজে পাওয়া যায়নি</translation> <translation id="5764483294734785780">এইরূপে অডিও সংর&ক্ষণ করুন...</translation> <translation id="57646104491463491">পরিবর্তনের তারিখ</translation> @@ -4829,6 +4841,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনটি সরিয়ে দিতে বলুন।}one{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনগুলি সরিয়ে দিতে বলুন।}other{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনগুলি সরিয়ে দিতে বলুন।}}</translation> <translation id="5997337190805127100">সাইট অ্যাক্সেস সম্পর্কে আরও জানুন</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />'-এর জন্য <ph name="RESULT_COUNT" />টি ফলাফল</translation> +<translation id="6002122790816966947">আপনার ডিভাইসগুলি</translation> <translation id="6002210667729577411">নতুন উইন্ডোতে গ্রুপ সরান</translation> <translation id="6002452033851752583">আপনার Google অ্যাকাউন্ট থেকে পসওয়ার্ড মুছে ফেলা হয়েছে</translation> <translation id="6002458620803359783">পছন্দসই ভয়েস</translation> @@ -5635,7 +5648,6 @@ <translation id="6833996806551876956">গোপনীয়তা স্যান্ডবক্স ট্রায়াল</translation> <translation id="6834652994408928492">সূর্যাস্তের সময় ডার্ক মোড অটোমেটিক চালু হয়ে যাবে</translation> <translation id="6835762382653651563">আপনার <ph name="DEVICE_TYPE" /> আপডেট করার জন্য দয়া করে ইন্টারনেটে সংযুক্ত হোন।</translation> -<translation id="6838034009068684089">কোনও সাইট আপনার স্ক্রিনে উইন্ডো খুলে রাখতে চাইলে অনুমতি নিতে বলুন (সাজেস্ট করা হয়েছে)</translation> <translation id="6839225236531462745">সার্টিফিকেট মুছতে সমস্যা</translation> <translation id="6839916869147598086">সাইন-ইন পরিবর্তন করা হয়েছে</translation> <translation id="6840155290835956714">পাঠানোর আগে জিজ্ঞাসা করুন</translation> @@ -5752,6 +5764,7 @@ <translation id="6965382102122355670">ঠিক আছে</translation> <translation id="6965648386495488594">পোর্ট</translation> <translation id="6965978654500191972">ডিভাইস</translation> +<translation id="6966370001499648704">নিরাপত্তা কী হিসেবে আপনি কোন ফোন ব্যবহার করেন তা নিয়ন্ত্রণ করুন</translation> <translation id="6967430741871315905">ডিভাইসটি ব্যবহার করা যাবে কিনা তা চেক করতে অক্ষম</translation> <translation id="696780070563539690">বিভিন্ন ওয়েবসাইট জুড়ে আপনার ব্রাউজিং অ্যাক্টিভিটি যেমন বিশেষভাবে বেছে নেওয়া বিজ্ঞাপন দেখার জন্য সাইট কুকি ব্যবহার করতে পারবে না</translation> <translation id="6968288415730398122">স্ক্রিন লক কনফিগার করতে আপনার পাসওয়ার্ড লিখুন</translation> @@ -5926,6 +5939,7 @@ <translation id="7135729336746831607">ব্লুটুথ চালু করবেন?</translation> <translation id="7136694880210472378">ডিফল্ট করুন</translation> <translation id="7136993520339022828">একটি সমস্যা হয়েছে। অনুগ্রহ করে অন্য একটি ছবি বেছে নিয়ে আবার চেষ্টা করুন।</translation> +<translation id="7137472406312798422">সাইটগুলি উইন্ডো খুলে রাখার জন্য আপনার সাইট সম্পর্কিত তথ্য ব্যবহার করতে চাইতে পারে</translation> <translation id="7138515695467025690">সূর্যাস্তের পর অটোমেটিক বন্ধ / চালু হবে</translation> <translation id="7138678301420049075">অন্যান্য</translation> <translation id="7139627972753429585"><ph name="APP_NAME" /> আপনার মাইক্রোফোন ব্যবহার করছে</translation> @@ -6546,7 +6560,6 @@ <translation id="7775694664330414886">নামবিহীন গ্রুপে ট্যাব সরানো হয়েছে - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> <ph name="FOLDERNAME" /> ফোল্ডারের ফাইলগুলি দেখতে পারবে, যতক্ষণ না আপনি এই সাইটের জন্য সব ট্যাব বন্ধ করে দিচ্ছেন</translation> <translation id="7776701556330691704">কোনও ভয়েস নেই</translation> -<translation id="7777284276915203144">আপনার পাসওয়ার্ড Google পাসওয়ার্ড ম্যানেজারে সেভ হওয়ার আগে আপনার ডিভাইসে এনক্রিপ্ট করা হয়</translation> <translation id="7781335840981796660">সব ব্যবহারকারী অ্যাকাউন্ট ও স্থানীয় ডেটা সরানো হবে।</translation> <translation id="7782102568078991263">Google থেকে আর কোনো পরামর্শ নেই</translation> <translation id="7782717250816686129">লগ-ইন স্ক্রিনে বারবার ব্যবহার করা ডেটা স্টোর করুন এবং সেশনে ক্রেডেনশিয়াল যোগ করুন।</translation> @@ -6813,6 +6826,7 @@ <translation id="8028803902702117856">ডাউনলোড হচ্ছে <ph name="SIZE" />, <ph name="FILE_NAME" /></translation> <translation id="8028993641010258682">সাইজ</translation> <translation id="8029492516535178472"><ph name="WINDOW_TITLE" /> - অনুমতি চাওয়া হয়েছে, উত্তর দিতে ⌘ + 'বিকল্প' বোতাম + 'নিম্নমুখী তীরচিহ্ন' বোতাম প্রেস করুন</translation> +<translation id="8029539783236818164">উইন্ডো খুলে রাখার জন্য আপনার স্ক্রিনের বিষয়ে তথ্য ব্যবহার করার অনুমতি দিন</translation> <translation id="8030169304546394654">সংযোগ বিচ্ছিন্ন</translation> <translation id="8030852056903932865">অনুমতি দিন</translation> <translation id="8032244173881942855">ট্যাব কাস্ট করতে অক্ষম৷</translation> @@ -6825,6 +6839,7 @@ <translation id="8038399858950372766"><ph name="DEVICE_COUNT" />টির মধ্যে <ph name="DEVICE_INDEX" /> নম্বর ডিভাইস, কীবোর্ডের নাম <ph name="DEVICE_NAME" /></translation> <translation id="8041089156583427627">প্রতিক্রিয়া পাঠান</translation> <translation id="8042142357103597104">টেক্সটের অস্বচ্ছতা</translation> +<translation id="8042331986490021244">আপনার পাসওয়ার্ড Google পাসওয়ার্ড ম্যানেজারে সেভ হওয়ার আগে আপনার ডিভাইসে এনক্রিপ্ট করা হয়</translation> <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> উত্তর দিচ্ছে না।</translation> <translation id="8044899503464538266">মন্থর</translation> <translation id="8045253504249021590">Google ড্যাশবোর্ড মারফত সিঙ্ক থামানো হয়েছে।</translation> @@ -7198,7 +7213,6 @@ <translation id="8428634594422941299">বুঝেছি</translation> <translation id="84297032718407999">আপনি <ph name="LOGOUT_TIME_LEFT" />-এ সাইন-আউট হয়ে যাবেন</translation> <translation id="8431190899827883166">ট্যাপগুলি দেখুন</translation> -<translation id="8431730749911729314">Google পাসওয়ার্ড ম্যানেজারে সেভ করার আগে আপনার ডিভাইসে পাসওয়ার্ড এনক্রিপ্ট করুন</translation> <translation id="8434480141477525001">NaCl ডিবাগ পোর্ট</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> ব্যবহার করে আপনার পরিচয় যাচাই করুন</translation> <translation id="8437209419043462667">মার্কিন যুক্তরাষ্ট্রীয়</translation> @@ -7585,6 +7599,7 @@ <translation id="8838234842677265403"><ph name="WEB_DRIVE_MESSAGE" /> (<ph name="SUPPORT_INFO" />)</translation> <translation id="8838601485495657486">অস্বচ্ছ</translation> <translation id="8838770651474809439">হ্যামবার্গার</translation> +<translation id="8838778928843281408">ফোন ম্যানেজ করুন</translation> <translation id="883911313571074303">ছবি ব্যাখ্যা করুন</translation> <translation id="8841843049738266382">সাদা তালিকাভুক্ত ব্যবহারকারীদের তালিকা পড়ুন ও পরিবর্তন করুন</translation> <translation id="8842594465773264717">এই ফিঙ্গারপ্রিন্ট মুছুন</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index cb30238..6008976 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -217,7 +217,7 @@ <translation id="120368089816228251">Muzička nota</translation> <translation id="1203942045716040624">Dijeljeni radnik: <ph name="SCRIPT_URL" /></translation> <translation id="1211769675100312947">Prečice birate sami</translation> -<translation id="1213254615020057352">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo koje vaše dijete ima s Androidom automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. 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 postavku je nametnuo vlasnik. Vlasnik može odabrati da se podaci o dijagnostici i korištenju ovog uređaja šalju Googleu. Ako je za vaše dijete uključena postavka za dodatnu Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na Google računu djeteta.</translation> +<translation id="1213254615020057352">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo koje vaše dijete ima s Androidom automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. 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 Androidovi programeri. Ovu postavku je nametnuo vlasnik. Vlasnik može odabrati da se podaci o dijagnostici i korištenju ovog uređaja šalju Googleu. Ako je za vaše dijete uključena postavka za dodatnu Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na Google računu djeteta.</translation> <translation id="121384500095351701">Nije moguće sigurno preuzeti fajl</translation> <translation id="1215411991991485844">Dodana je nova aplikacija u pozadini</translation> <translation id="1216542092748365687">Ukloni otisak prsta</translation> @@ -1273,6 +1273,7 @@ centar za pomoć<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Traži odobrenje kada web lokacija želi pristupiti Bluetooth uređajima (preporučeno)</translation> <translation id="2266957463645820432">IPP putem USB-a (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth je onemogućen</translation> <translation id="2270450558902169558">Razmijeni podatke s bilo kojim uređajem u domeni <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Prilikom instaliranja će se <ph name="BEGIN_BOLD" />potpuno izbrisati vaš cijeli tvrdi disk<ph name="END_BOLD" />. Vodite računa da napravite sigurnosnu kopiju podataka.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Kada instalacija započne, nije je moguće otkazati.<ph name="END_PARAGRAPH2" /></translation> @@ -1958,7 +1959,7 @@ <translation id="2942279350258725020">Android Messages</translation> <translation id="2942560570858569904">Čekanje...</translation> <translation id="2942581856830209953">Prilagođavanje stranice</translation> -<translation id="2944060181911631861">Šaljite podatke o upotrebi i dijagnostici. Poboljšajte svoje iskustvo korištenja Androida automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo će pomoći poboljšati stabilnost sistema i aplikacija i još mnogo toga. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri. Ako je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ovi podaci će možda biti sačuvani na vaš Google račun. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation> +<translation id="2944060181911631861">Šaljite podatke o upotrebi i dijagnostici. Poboljšajte svoje iskustvo korištenja Androida automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo će pomoći poboljšati stabilnost sistema i aplikacija i još mnogo toga. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ako je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ovi podaci će možda biti sačuvani na vaš Google račun. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation> <translation id="2946119680249604491">Dodaj vezu</translation> <translation id="2946640296642327832">Omogući Bluetooth</translation> <translation id="2947605845283690091">Pregledanje weba bi trebalo biti brzo. Odvojite malo vremena da sada <ph name="BEGIN_LINK" />provjerite ekstenzije<ph name="END_LINK" />.</translation> @@ -2096,7 +2097,6 @@ <translation id="3088052000289932193">Web lokacija koristi MIDI uređaj</translation> <translation id="3088128611727407543">Pripremanje profila aplikacije...</translation> <translation id="3088325635286126843">&Promijeni naziv…</translation> -<translation id="3089064280130434511">Blokiraj web lokacijama otvaranje i postavljanje prozora na ekranima</translation> <translation id="3089137131053189723">Pretraživanje je izbrisano</translation> <translation id="3090589793601454425">Nemoj premjestiti</translation> <translation id="3090819949319990166">Nije moguće kopirati crx fajl u <ph name="TEMP_CRX_FILE" />.</translation> @@ -2453,7 +2453,7 @@ <translation id="3473479545200714844">Povećalo ekrana</translation> <translation id="3474218480460386727">Za nove riječi koristite 99 slova ili manje</translation> <translation id="3475843873335999118">Još uvijek ne možemo prepoznati vaše otiske prsta. Unesite lozinku.</translation> -<translation id="3476303763173086583">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo korištenja Androida svog djeteta automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo se neće koristiti za identifikaciju vašeg djeteta, a pomoći će stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. 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. Vlasnik može odlučiti da šalje podatke o dijagnostici i korištenju ovog uređaja u Google. Ako je za vaše dijete uključena postavka dodatna Aktivnost na webu i u aplikacijama, ovi podaci se mogu pohranjivati na njegov Google račun. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> +<translation id="3476303763173086583">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo korištenja Androida svog djeteta automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo se neće koristiti za identifikaciju vašeg djeteta, a pomoći će stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ovu <ph name="BEGIN_LINK1" />postavku<ph name="END_LINK1" /> je nametnuo vlasnik. Vlasnik može odlučiti da šalje podatke o dijagnostici i korištenju ovog uređaja u Google. Ako je za vaše dijete uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci mogu biti sačuvani na njegovom Google računu. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> <translation id="347670947055184738">Ups! Sistem nije uspio preuzeti pravila za vaš uređaj.</translation> <translation id="347785443197175480">I dalje dozvoljavaj host računaru <ph name="HOST" /> da pristupa kameri i mikrofonu</translation> <translation id="3479552764303398839">Ne sada</translation> @@ -2808,7 +2808,7 @@ <translation id="3831436149286513437">Prijedlozi za pretraživanje Google Diska</translation> <translation id="3834728400518755610">Za promjenu postavki mikrofona potrebno je isključiti Linux. Isključite Linux da nastavite.</translation> <translation id="3834775135533257713">Dodavanje aplikacije "<ph name="TO_INSTALL_APP_NAME" />" nije uspjelo jer je u konfliktu s aplikacijom "<ph name="INSTALLED_APP_NAME" />".</translation> -<translation id="383669374481694771">Ovo su opće informacije o ovom uređaju i načinu na koji se koristi (kao što je nivo napunjenosti baterije, aktivnosti sistema i aplikacija te greške). Ovi podaci će se koristiti da se poboljša Android, a neki zbirni podaci će također pomoći Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.</translation> +<translation id="383669374481694771">Ovo su opće informacije o ovom uređaju i načinu na koji se koristi (kao što je nivo napunjenosti baterije, aktivnosti sistema i aplikacija te greške). Ovi podaci će se koristiti da se poboljša Android, a neki zbirni podaci će također pomoći Google aplikacijama i partnerima, kao što su Androidovi programeri, da poboljšaju svoje aplikacije i proizvode.</translation> <translation id="3838085852053358637">Učitavanje ekstenzije nije uspjelo</translation> <translation id="3838486795898716504">Više: <ph name="PAGE_TITLE" /></translation> <translation id="383891835335927981">Nijedna web lokacija nije uvećana ili umanjena</translation> @@ -3170,7 +3170,7 @@ <translation id="4209464433672152343">Dokumenti se <ph name="BEGIN_LINK_HELP" />šalju Googleu<ph name="END_LINK_HELP" /> kako bi se pripremili za štampanje. Štampače i njihovu historiju možete pregledati, uređivati i upravljati njima pomoću <ph name="BEGIN_LINK_DASHBOARD" />kontrolne table Google štampanja u oblaku<ph name="END_LINK_DASHBOARD" />.</translation> <translation id="4210048056321123003">Preuzimanje virtuelnog računara</translation> <translation id="421182450098841253">&Prikaži traku oznaka</translation> -<translation id="4211851069413100178">Šaljite podatke o korištenju i dijagnostici. Poboljšajte svoje iskustvo korištenja Androida automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo će pomoći poboljšati stabilnost sistema i aplikacija i još mnogo toga. 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 korisnik. Vlasnik može odabrati slanje podataka o dijagnostici i korištenju ovog uređaja Googleu. Ako je uključena postavka dodatne Aktivnosti na webu i u aplikacijama, ti podaci se mogu sačuvati na vaš Google račun. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> +<translation id="4211851069413100178">Šaljite podatke o korištenju i dijagnostici. Poboljšajte svoje iskustvo korištenja Androida automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo će pomoći poboljšati stabilnost sistema i aplikacija i još mnogo toga. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ovu <ph name="BEGIN_LINK1" />postavku<ph name="END_LINK1" /> je nametnuo korisnik. Vlasnik može odabrati slanje podataka o dijagnostici i korištenju ovog uređaja Googleu. Ako je uključena postavka dodatne Aktivnosti na webu i u aplikacijama, ti podaci se mogu sačuvati na vaš Google račun. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> <translation id="42126664696688958">Izvezi</translation> <translation id="42137655013211669">Server je zabranio pristup ovom izvoru.</translation> <translation id="4217571870635786043">Diktiranje</translation> @@ -3715,6 +3715,7 @@ <translation id="4813136279048157860">Moje slike</translation> <translation id="4813512666221746211">Greška na mreži</translation> <translation id="4814378367953456825">Unesite naziv za ovaj otisak prsta</translation> +<translation id="481574578487123132">Povezani uređaji</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detalji</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Izbrisana je 1 oznaka}one{Izbrisana je {COUNT} oznaka}few{Izbrisane su {COUNT} oznake}other{Izbrisano je {COUNT} oznaka}}</translation> <translation id="4819607494758673676">Obavještenja Google Asistenta</translation> @@ -3729,7 +3730,6 @@ <translation id="482952334869563894">USB uređaji dobavljača <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Postavi PIN</translation> <translation id="4830026649400230050">Sva preuzimanja koja ispunjavaju uslove se preusmjeravaju na <ph name="WEB_DRIVE" /> račun vaše organizacije.</translation> -<translation id="4830121310592638841">Traži odobrenje kada web lokacija želi otvarati i postavljati prozore na ekranima</translation> <translation id="4830502475412647084">Instaliranje ažuriranja operativnog sistema</translation> <translation id="4830573902900904548">Vaš uređaj <ph name="DEVICE_TYPE" /> se ne može povezati na internet putem mreže <ph name="NETWORK_NAME" />. Odaberite drugu mrežu. <ph name="LEARN_MORE_LINK_START" />Saznajte više<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Pronađen je 1 štampač na serveru za štampanje</translation> @@ -3909,7 +3909,7 @@ <translation id="5017643436812738274">Možete navigirati stranicama pomoću kursora za tekst. Pritisnite Ctrl+Search+7 da isključite.</translation> <translation id="5017828934289857214">Podsjeti me kasnije</translation> <translation id="5018207570537526145">Otvori ekstenziju web lokacije</translation> -<translation id="5018526990965779848">Šaljite podatke o korištenju i dijagnostici. Poboljšajte svoje iskustvo s Androidom automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. To će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation> +<translation id="5018526990965779848">Šaljite podatke o korištenju i dijagnostici. Poboljšajte svoje iskustvo s Androidom automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. To će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation> <translation id="5021750053540820849">Još uvijek nije ažurirano</translation> <translation id="5026492829171796515">Prijavite se da dodate Google račun</translation> <translation id="5026806129670917316">Uključite WiFi</translation> @@ -4074,7 +4074,7 @@ <translation id="5195863934285556588"><ph name="BEGIN_PARAGRAPH1" />Googleova usluga lokacije koristi izvore poput WiFi-ja, mobilnih mreža i senzora radi lakše procjene lokacije ovog uređaja.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Možete isključiti lokaciju Androida na ovom uređaju bilo kada u Postavkama > Aplikacije > Google Play trgovina > Upravljajte postavkama Androida > Sigurnost i lokacija > Lokacija. Također možete isključiti korištenje WiFi-ja, mobilnih mreža i senzora za lokaciju Androida isključivanjem "Googleove preciznosti lokacije" u istom meniju.<ph name="END_PARAGRAPH2" /></translation> <translation id="5197255632782567636">Internet</translation> -<translation id="5198430103906431024">Šaljite podatke o korištenju i dijagnostici. Ovaj uređaj trenutno automatski šalje Googleu podatke o dijagnostici, uređaju i korištenju aplikacija. To će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation> +<translation id="5198430103906431024">Šaljite podatke o korištenju i dijagnostici. Ovaj uređaj trenutno automatski šalje Googleu podatke o dijagnostici, uređaju i korištenju aplikacija. To će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation> <translation id="5199729219167945352">Eksperimenti</translation> <translation id="5203920255089865054">{NUM_EXTENSIONS,plural, =1{Kliknite da vidite ekstenziju}one{Kliknite da vidite ekstenzije}few{Kliknite da vidite ekstenzije}other{Kliknite da vidite ekstenzije}}</translation> <translation id="5204673965307125349">Izvršite powerwash uređaja i pokušajte ponovo.</translation> @@ -4430,6 +4430,7 @@ <translation id="5563234215388768762">Pretražite Google ili upišite URL</translation> <translation id="5565735124758917034">Aktivan</translation> <translation id="5568069709869097550">Ne možete se prijaviti</translation> +<translation id="5571066253365925590">Bluetooth je omogućen</translation> <translation id="5571092938913434726">Globalne kontrole medija</translation> <translation id="5571832155627049070">Prilagodite profil</translation> <translation id="5572851009514199876">Pokrenite Chrome i prijavite se tako da Chrome može provjeriti imate li pristup ovoj web lokaciji.</translation> @@ -4444,7 +4445,7 @@ <translation id="5583640892426849032">Tipka za brisanje</translation> <translation id="5584088138253955452">Sačuvati korisničko ime?</translation> <translation id="5584091888252706332">Prilikom pokretanja</translation> -<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />Ovo su opće informacije o vašem uređaju i načinu korištenja (kao što su nivo napunjenosti baterije, aktivnosti sistema i aplikacija te greške). Ovi podaci će se koristiti za poboljšanje Androida, a neki zbirni podaci će također pomoći Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.<ph name="END_PARAGRAPH1" /> +<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />Ovo su opće informacije o vašem uređaju i načinu korištenja (kao što su nivo napunjenosti baterije, aktivnosti sistema i aplikacija te greške). Ovi podaci će se koristiti za poboljšanje Androida, a neki zbirni podaci će također pomoći Google aplikacijama i partnerima, kao što su Androidovi programeri, da poboljšaju svoje aplikacije i proizvode.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Isključivanjem ove funkcije uređaj će i dalje moći slati informacije potrebne za ključne usluge kao što su ažuriranja sistema i sigurnost.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Vlasnik može upravljati ovom funkcijom iz menija Postavke > Napredno > Automatsko slanje dijagnostičkih podataka i podataka o korištenju Googleu.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Ako vam je uključena postavka dodatne Aktivnosti na webu i u aplikacijama, ti podaci će možda biti pohranjeni na vašem Google računu. Na stranici account.google.com možete vidjeti i izbrisati svoje podatke te izmijeniti svoje postavke računa.<ph name="END_PARAGRAPH4" /></translation> @@ -4827,6 +4828,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Da i dalje pregledate web, zatražite od administratora da ukloni ovu aplikaciju.}one{Da i dalje pregledate web, zatražite od administratora da ukloni ove aplikacije.}few{Da i dalje pregledate web, zatražite od administratora da ukloni ove aplikacije.}other{Da i dalje pregledate web, zatražite od administratora da ukloni ove aplikacije.}}</translation> <translation id="5997337190805127100">Saznajte više o pristupu web lokacijama</translation> <translation id="6000758707621254961">Broj rezultata <ph name="RESULT_COUNT" /> za "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Vaši uređaji</translation> <translation id="6002210667729577411">Premjesti grupu u novi prozor</translation> <translation id="6002452033851752583">Lozinka je izbrisana s vašeg Google računa</translation> <translation id="6002458620803359783">Preferirani glasovi</translation> @@ -4872,7 +4874,7 @@ <translation id="6047632800149092791">Sinhronizacija ne funkcionira. Pokušajte se odjaviti i ponovo prijaviti.</translation> <translation id="6049797270917061226">Ovaj fajl može omogućiti napadačima da ukradu vaše lične informacije.</translation> <translation id="6051354611314852653">Ups! Sistem nije uspio odobriti pristup API-ju za ovaj uređaj.</translation> -<translation id="6051638103735819069"><ph name="BEGIN_PARAGRAPH1" />Ako dozvolite ChromeOS uređajima da šalju automatske izvještaje, pomoći ćete nam da damo prioritet stvarima koje je potrebno popraviti i poboljšati u ChromeOS-u. Ti izvještaji mogu sadržavati informacije o padovima ChromeOS-a kao i o tome koje funkcije su se koristile, koliko memorije je obično korišteno te podatke o dijagnostici i korištenju Android aplikacije. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri.<ph name="END_PARAGRAPH1" /> +<translation id="6051638103735819069"><ph name="BEGIN_PARAGRAPH1" />Ako dozvolite ChromeOS uređajima da šalju automatske izvještaje, pomoći ćete nam da damo prioritet stvarima koje je potrebno popraviti i poboljšati u ChromeOS-u. Ti izvještaji mogu sadržavati informacije o padovima ChromeOS-a kao i o tome koje funkcije su se koristile, koliko memorije je obično korišteno te podatke o dijagnostici i korištenju Android aplikacije. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Možete dozvoliti ili onemogućiti te izvještaje bilo kada u postavkama ChromeOS uređaja djeteta. Ako ste administrator domene, možete promijeniti ovu postavku u administratorskoj konzoli.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Isključivanjem ove funkcije uređaj će i dalje moći slati informacije potrebne za ključne usluge kao što su ažuriranja sistema i sigurnost.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Ako je postavka Aktivnost na webu i u aplikacijama uključena za Google račun vašeg djeteta, podaci djeteta se mogu sačuvati na njegovom Google računu. Saznajte više o ovim postavkama i kako ih prilagoditi na stranici families.google.com<ph name="END_PARAGRAPH4" /></translation> @@ -5526,7 +5528,7 @@ <translation id="6725206449694821596">Internetski protokol za štampanje (IPP)</translation> <translation id="6725970970008349185">Broj kandidata za prikazivanje po stranici</translation> <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="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 Androidovi 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="6733620523445262364">Stavka "<ph name="BOOKMARK_TITLE" />" je kreirana.</translation> <translation id="6735304988756581115">Prikaži kolačiće i druge podatke o web lokaciji...</translation> @@ -5633,7 +5635,6 @@ <translation id="6833996806551876956">Probni period Zaštićenog okruženja za privatnost</translation> <translation id="6834652994408928492">Tamni način rada će se automatski uključiti u sumrak</translation> <translation id="6835762382653651563">Povežite se na internet da ažurirate uređaj <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Traži odobrenje kada web lokacija želi otvarati i postavljati prozore na ekranima (preporučeno)</translation> <translation id="6839225236531462745">Greška prilikom brisanja potvrde</translation> <translation id="6839916869147598086">Način prijave je promijenjen</translation> <translation id="6840155290835956714">Pitaj prije slanja</translation> @@ -5649,7 +5650,7 @@ <translation id="6848388270925200958">Trenutno imate nekoliko kartica koje se mogu koristiti samo na ovom uređaju</translation> <translation id="6848716236260083778">Da postavi otisak prsta, vaše dijete treba dodirnuti senzor za otisak prsta. Podaci otiska prsta vašeg djeteta se sigurno pohranjuju i nikada ne napuštaju uređaj <ph name="DEVICE_TYPE" />.</translation> <translation id="6850286078059909152">Boja teksta</translation> -<translation id="6851181413209322061">Š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 aplikacija, kao i drugim unapređenjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri. Ovu postavku je nametnuo vlasnik. Ako je za vaše dijete uključena dodatna Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na njegovom Google računu.</translation> +<translation id="6851181413209322061">Š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 aplikacija, kao i drugim unapređenjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ovu postavku je nametnuo vlasnik. Ako je za vaše dijete uključena dodatna Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na njegovom Google računu.</translation> <translation id="6851497530878285708">Aplikacija je omogućena</translation> <translation id="6853388645642883916">Program za ažuriranje je u stanju mirovanja</translation> <translation id="68541483639528434">Zatvori ostale kartice</translation> @@ -5973,7 +5974,7 @@ <translation id="7203150201908454328">Prošireno</translation> <translation id="7206693748120342859">Preuzimanje dodatka: <ph name="PLUGIN_NAME" />…</translation> <translation id="720715819012336933">{NUM_PAGES,plural, =1{Napusti stranicu}one{Napusti stranice}few{Napusti stranice}other{Napusti stranice}}</translation> -<translation id="7207457272187520234">Šaljite podatke o korištenju i dijagnostici. Ovaj uređaj trenutno automatski šalje Googleu podatke o dijagnostici, uređaju i korištenju aplikacija. To će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri. Ovu postavku je nametnuo vlasnik. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation> +<translation id="7207457272187520234">Šaljite podatke o korištenju i dijagnostici. Ovaj uređaj trenutno automatski šalje Googleu podatke o dijagnostici, uređaju i korištenju aplikacija. To će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ovu postavku je nametnuo vlasnik. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation> <translation id="7207631048330366454">Pretražite aplikacije</translation> <translation id="7210499381659830293">Štampači ekstenzija</translation> <translation id="7211783048245131419">Još uvijek nije dodijeljen nijedan prekidač za pristup</translation> @@ -6544,7 +6545,6 @@ <translation id="7775694664330414886">Kartica je premještena u neimenovanu grupu – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> će moći prikazivati fajlove u folderu <ph name="FOLDERNAME" /> dok ne zatvorite sve kartice za ovu web lokaciju</translation> <translation id="7776701556330691704">Nije pronađen nijedan glas</translation> -<translation id="7777284276915203144">Lozinke se šifriraju na uređaju prije nego što se pohrane u Googleov Upravitelj lozinki</translation> <translation id="7781335840981796660">Uklonit će se računi svih korisnika i svi lokalni podaci.</translation> <translation id="7782102568078991263">Google nema više prijedloga</translation> <translation id="7782717250816686129">Pohrani trajne podatke na ekranu za prijavu i ubaci akreditive u sesiju.</translation> @@ -7056,7 +7056,7 @@ <translation id="8265671588726449108">{COUNT,plural, =1{Vaš anonimni prozor se neće ponovo otvoriti kada ponovo pokrenete}one{Vaš {COUNT} anonimni prozor se neće ponovo otvoriti kada ponovo pokrenete}few{Vaša {COUNT} anonimna prozora se neće ponovo otvoriti kada ponovo pokrenete}other{Vaših {COUNT} anonimnih prozora se neće ponovo otvoriti kada ponovo pokrenete}}</translation> <translation id="8266947622852630193">Svi načini unosa</translation> <translation id="8267539814046467575">Dodajte štampač</translation> -<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Ovo su opće informacije o ovom uređaju i načinu na koji se koristi (kao što je nivo napunjenosti baterije, aktivnosti sistema i aplikacija te greške). Ovi podaci će se koristiti za poboljšanje Androida, a neki zbirni podaci će također pomoći Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.<ph name="END_PARAGRAPH1" /> +<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Ovo su opće informacije o ovom uređaju i načinu na koji se koristi (kao što je nivo napunjenosti baterije, aktivnosti sistema i aplikacija te greške). Ovi podaci će se koristiti za poboljšanje Androida, a neki zbirni podaci će također pomoći Google aplikacijama i partnerima, kao što su Androidovi programeri, da poboljšaju svoje aplikacije i proizvode.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Isključivanjem ove funkcije uređaj će i dalje moći slati informacije potrebne za ključne usluge kao što su ažuriranja sistema i sigurnost.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Vlasnik može upravljati ovom funkcijom iz menija Postavke > Napredno > Automatsko slanje dijagnostičkih podataka i podataka o korištenju Googleu.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Ako je za vaše dijete uključena postavka dodatne Aktivnosti na webu i u aplikacijama, ti podaci se mogu sačuvati na njegovom Google računu. Saznajte više o ovim postavkama i kako ih prilagoditi na stranici families.google.com<ph name="END_PARAGRAPH4" /></translation> @@ -7197,7 +7197,6 @@ <translation id="8428634594422941299">Shvaćam</translation> <translation id="84297032718407999">Bit ćete odjavljeni za <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Prikaži dodire</translation> -<translation id="8431730749911729314">Šifrirajte lozinke na uređaju prije nego što se pohrane u Googleov Upravitelj lozinki</translation> <translation id="8434480141477525001">NaCl port za otklanjanje grešaka</translation> <translation id="8435395510592618362">Potvrdite identitet pomoću aplikacije <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">SAD</translation> @@ -7328,7 +7327,7 @@ <translation id="8591783563402255548">1 sekunda</translation> <translation id="8592141010104017453">Uopšte ne prikazuj obavještenja</translation> <translation id="859246725979739260">Ovoj web lokaciji je blokiran pristup vašoj lokaciji.</translation> -<translation id="8593121833493516339">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo korištenja Androida svog djeteta automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo se neće koristiti za identifikaciju vašeg djeteta, a pomoći će stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su programeri za Android. Ako je za vaše dijete uključena dodatna Aktivnost na webu i u aplikacijama, ovi podaci se mogu pohranjivati na njegov Google račun. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation> +<translation id="8593121833493516339">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo korištenja Androida svog djeteta automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo se neće koristiti za identifikaciju vašeg djeteta, a pomoći će stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su programeri za Android. Ako je za vaše dijete uključena dodatna Aktivnost na webu i u aplikacijama, ti podaci mogu biti sačuvani na njegovom Google računu. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation> <translation id="8594908476761052472">Snimi videozapis</translation> <translation id="8596540852772265699">Prilagođeni fajlovi</translation> <translation id="8597845839771543242">Format atributa:</translation> @@ -7370,7 +7369,7 @@ <translation id="8637542770513281060">Vaš računar sadrži sigurnosni modul koji se koristi za primjenu mnogih ključnih sigurnosnih funkcija u Chrome OS-u. Posjetite Chromebookov centar za pomoć da saznate više: https://support.google.com/chromebook/?p=sm</translation> <translation id="8637688295594795546">Dostupno je ažuriranje sistema. Priprema za preuzimanje…</translation> <translation id="8639047128869322042">Provjeravanje prisutnosti štetnog softvera...</translation> -<translation id="8639635302972078117">Š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. Ako je za vaše dijete uključena postavka za dodatnu Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na Google računu djeteta.</translation> +<translation id="8639635302972078117">Š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 Androidovi programeri. Ako je za vaše dijete uključena postavka za dodatnu Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na Google računu djeteta.</translation> <translation id="8642900771896232685">2 sekunde</translation> <translation id="8642947597466641025">Uvećavanje teksta</translation> <translation id="8643443571868262066">Fajl <ph name="FILE_NAME" /> može biti opasan. Poslati Googleovoj Naprednoj zaštiti radi skeniranja?</translation> @@ -7483,7 +7482,7 @@ <translation id="8737916108453753541">URL-ovi se dijele s Googleom radi razumijevanja pregledanja</translation> <translation id="8740247629089392745">Ovaj Chromebook možete predati korisniku <ph name="SUPERVISED_USER_NAME" />. Postavljanje je skoro gotovo, nakon čega možete početi istraživati.</translation> <translation id="8741944563400125534">Vodič za postavljanje prekidača za pristup</translation> -<translation id="8742998548129056176">Ovo su opće informacije o vašem uređaju i načinu korištenja (kao što su nivo napunjenosti baterije, aktivnosti sistema i aplikacija te greške). Ti podaci će se koristiti za poboljšanje Androida, a neke zbirne informacije će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.</translation> +<translation id="8742998548129056176">Ovo su opće informacije o vašem uređaju i načinu korištenja (kao što su nivo napunjenosti baterije, aktivnosti sistema i aplikacija te greške). Ti podaci će se koristiti za poboljšanje Androida, a neke zbirne informacije će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri, da poboljšaju svoje aplikacije i proizvode.</translation> <translation id="8746654918629346731">Već ste zatražili ekstenziju "<ph name="EXTENSION_NAME" />"</translation> <translation id="874689135111202667">{0,plural, =1{Otpremiti 1 fajl na ovu web lokaciju?}one{Otpremiti # fajl na ovu web lokaciju?}few{Otpremiti # fajla na ovu web lokaciju?}other{Otpremiti # fajlova na ovu web lokaciju?}}</translation> <translation id="8749805710397399240">Nije moguće emitirati vaš ekran. Provjerite odobrenje za Snimač ekrana u Postavkama sistema.</translation> @@ -7675,7 +7674,7 @@ <translation id="8929696694736010839">Samo trenutna sesija u anonimnom načinu rada</translation> <translation id="8930351635855238750">Nove postavke kolačića postat će aktivne nakon ponovnog učitavanja stranice</translation> <translation id="8930622219860340959">Bežično</translation> -<translation id="8931076093143205651">Šaljite podatke o korištenju i dijagnostici. Poboljšajte svoje iskustvo s Androidom automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. To će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri. Ovu postavku je nametnuo vlasnik. Vlasnik može odabrati da se podaci o dijagnostici i korištenju ovog uređaja šalju Googleu. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation> +<translation id="8931076093143205651">Šaljite podatke o korištenju i dijagnostici. Poboljšajte svoje iskustvo s Androidom automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. To će pomoći stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ovu postavku je nametnuo vlasnik. Vlasnik može odabrati da se podaci o dijagnostici i korištenju ovog uređaja šalju Googleu. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu.</translation> <translation id="8931475688782629595">Upravljajte sadržajem koji sinhronizirate</translation> <translation id="8932654652795262306">Detalji o Trenutnom povezivanju putem mobitela</translation> <translation id="8932894639908691771">Opcije prekidača za pristup</translation> @@ -7926,9 +7925,9 @@ <translation id="9170848237812810038">&Poništi</translation> <translation id="9170884462774788842">Drugi program na vašem računaru je dodao temu koja može izmijeniti način na koji Chrome funkcionira.</translation> <translation id="917350715406657904">Dostignuto je vremensko ograničenje koje je tvoj roditelj postavio za <ph name="APP_NAME" />. Sutra je možeš koristiti <ph name="TIME_LIMIT" />.</translation> -<translation id="9174401638287877180">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo koje vaše dijete ima s Androidom automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. 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. Ako je za vaše dijete uključena postavka za dodatnu Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na Google računu djeteta.</translation> +<translation id="9174401638287877180">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo koje vaše dijete ima s Androidom automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. 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 Androidovi programeri. Ako je za vaše dijete uključena postavka za dodatnu Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na Google računu djeteta.</translation> <translation id="917510707618656279">Traži odobrenje kada web lokacija želi pristupiti Bluetooth uređajima</translation> -<translation id="9176476835295860688">Šaljite podatke o korištenju i dijagnostici. Ovaj uređaj trenutno automatski šalje Googleu podatke o dijagnostici, uređaju i korištenju aplikacija. Ovo će pomoći poboljšati stabilnost sistema i aplikacija i još mnogo toga. 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 vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> +<translation id="9176476835295860688">Šaljite podatke o korištenju i dijagnostici. Ovaj uređaj trenutno automatski šalje Googleu podatke o dijagnostici, uređaju i korištenju aplikacija. Ovo će pomoći poboljšati stabilnost sistema i aplikacija i još mnogo toga. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Androidovi programeri. Ovu <ph name="BEGIN_LINK1" />postavku<ph name="END_LINK1" /> je nametnuo vlasnik. Ako vam je uključena postavka dodatna Aktivnost na webu i u aplikacijama, ti podaci će možda biti sačuvani na vašem Google računu. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetooth uređaj je povezan</translation> <translation id="9178061802301856367">Izbrišite podatke za prijavu</translation> <translation id="9179524979050048593">Korisničko ime na ekranu za prijavu</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index deb6de9..bde71ae 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1258,6 +1258,7 @@ <translation id="2263679799334060788">Els suggeriments ens ajuden a millorar Google Cast. Si vols obtenir assistència per resoldre problemes amb l'emissió de contingut, consulta el <ph name="BEGIN_LINK" />Centre d'ajuda<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Pregunta'm quan un lloc web vulgui accedir a dispositius Bluetooth (opció recomanada)</translation> <translation id="2266957463645820432">IPP a través d'USB (IPPUSB)</translation> +<translation id="2268130516524549846">S'ha desactivat el Bluetooth</translation> <translation id="2270450558902169558">Intercanviar dades amb un altre dispositiu del domini <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />La instal·lació <ph name="BEGIN_BOLD" />esborrarà tota la unitat de disc dur<ph name="END_BOLD" />. Assegura't de tenir còpies de seguretat de les dades.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Quan comenci la instal·lació, no es podrà cancel·lar.<ph name="END_PARAGRAPH2" /></translation> @@ -2082,7 +2083,6 @@ <translation id="3088052000289932193">El lloc web fa servir MIDI</translation> <translation id="3088128611727407543">S'està preparant el perfil de l'aplicació...</translation> <translation id="3088325635286126843">&Canvia el nom...</translation> -<translation id="3089064280130434511">Impedeix que els llocs web obrin i col·loquin finestres a les teves pantalles</translation> <translation id="3089137131053189723">La cerca s'ha esborrat</translation> <translation id="3090589793601454425">No les moguis</translation> <translation id="3090819949319990166">No es pot copiar el fitxer crx extern a <ph name="TEMP_CRX_FILE" />.</translation> @@ -3210,6 +3210,7 @@ <translation id="4275830172053184480">Reinici del dispositiu</translation> <translation id="4278390842282768270">Permès</translation> <translation id="4279129444466079448">Pots instal·lar <ph name="PROFILE_LIMIT" /> perfils d'eSIM com a màxim en aquest dispositiu. Per afegir-ne un altre, primer suprimeix-ne un.</translation> +<translation id="4280325816108262082">El dispositiu es desconnectarà automàticament quan s'apagui o no s'estigui fent servir</translation> <translation id="4281844954008187215">Condicions del servei</translation> <translation id="4282196459431406533">Smart Lock està activat</translation> <translation id="4284755288573763878">Vols desactivar la Navegació segura millorada?</translation> @@ -3698,6 +3699,7 @@ <translation id="4813136279048157860">Les meves imatges</translation> <translation id="4813512666221746211">Error de la xarxa</translation> <translation id="4814378367953456825">Introdueix un nom per a aquesta empremta digital</translation> +<translation id="481574578487123132">Dispositius enllaçats</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detalls</translation> <translation id="4816336393325437908">{COUNT,plural, =1{S'ha suprimit 1 adreça d'interès}other{S'han suprimit {COUNT} adreces d'interès}}</translation> <translation id="4819607494758673676">Notificacions de l'Assistent de Google</translation> @@ -3712,7 +3714,6 @@ <translation id="482952334869563894">Dispositius USB del proveïdor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configura un PIN</translation> <translation id="4830026649400230050">Totes les baixades aptes s'encaminen al compte de <ph name="WEB_DRIVE" /> de la teva organització.</translation> -<translation id="4830121310592638841">Pregunta'm quan un lloc web vulgui obrir i col·locar finestres a les pantalles</translation> <translation id="4830502475412647084">S'està instal·lant l'actualització del sistema operatiu</translation> <translation id="4830573902900904548">El vostre dispositiu <ph name="DEVICE_TYPE" /> no es pot connectar a Internet mitjançant <ph name="NETWORK_NAME" />. Trieu una altra xarxa. <ph name="LEARN_MORE_LINK_START" />Més informació<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">S'ha trobat 1 impressora al servidor d'impressió</translation> @@ -4330,6 +4331,7 @@ <translation id="5490721031479690399">Desconnecta el dispositiu Bluetooth</translation> <translation id="5490798133083738649">Permet que Linux accedeixi al micròfon</translation> <translation id="549211519852037402">Beix i blanc</translation> +<translation id="5492637351392383067">Encriptació al dispositiu</translation> <translation id="5493792505296048976">pantalla activada</translation> <translation id="5494016731375030300">Pestanyes tancades recentment</translation> <translation id="5494362494988149300">Obre quan &acabi</translation> @@ -4413,6 +4415,7 @@ <translation id="5563234215388768762">Cerca a Google o escriu un URL</translation> <translation id="5565735124758917034">Actiu</translation> <translation id="5568069709869097550">No puc accedir</translation> +<translation id="5571066253365925590">S'ha activat el Bluetooth</translation> <translation id="5571092938913434726">Controls multimèdia globals</translation> <translation id="5571832155627049070">Personalitza el perfil</translation> <translation id="5572851009514199876">Obre Chrome i inicia-hi la sessió perquè Chrome pugui comprovar si tens permís per accedir a aquest lloc.</translation> @@ -4811,6 +4814,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Per assegurar-te que pots continuar navegant per Internet, demana a l'administrador que suprimeixi aquesta aplicació.}other{Per assegurar-te que pots continuar navegant per Internet, demana a l'administrador que suprimeixi aquestes aplicacions.}}</translation> <translation id="5997337190805127100">Més informació sobre l'accés als llocs web</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultats per a "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Els teus dispositius</translation> <translation id="6002210667729577411">Mou el grup a una finestra nova</translation> <translation id="6002452033851752583">S'ha suprimit la contrasenya del teu Compte de Google</translation> <translation id="6002458620803359783">Veus preferides</translation> @@ -5617,7 +5621,6 @@ <translation id="6833996806551876956">Prova de la zona de proves de privadesa</translation> <translation id="6834652994408928492">El mode fosc s'activarà automàticament al vespre</translation> <translation id="6835762382653651563">Connecteu-vos a Internet per actualitzar el dispositiu <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Pregunta'm quan un lloc web vulgui obrir i col·locar finestres a les pantalles (opció recomanada)</translation> <translation id="6839225236531462745">Error de supressió del certificat</translation> <translation id="6839916869147598086">L'inici de sessió ha canviat</translation> <translation id="6840155290835956714">Pregunta abans d'enviar</translation> @@ -7970,6 +7973,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> no pot obrir els fitxers que es troben en aquesta carpeta perquè conté fitxers del sistema</translation> <translation id="950307215746360464">Guia de configuració</translation> <translation id="951991426597076286">Rebutja</translation> +<translation id="952471655966876828">El dispositiu es desconnectarà automàticament quan s'encengui o s'estigui fent servir</translation> <translation id="953434574221655299">Amb permís per saber quan estàs utilitzant el dispositiu de manera activa</translation> <translation id="956500788634395331">Tens protecció contra les extensions potencialment perjudicials</translation> <translation id="957960681186851048">Aquest lloc web ha provat de baixar diversos fitxers automàticament</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 9ad6f89..b2b52df 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -1261,6 +1261,7 @@ <translation id="2263679799334060788">Vaše zpětná vazba nám pomáhá technologii Google Cast vylepšovat a velmi ji oceňujeme. Pokud potřebujete pomoci odstranit problémy s odesíláním, přejděte do <ph name="BEGIN_LINK" />centra nápovědy<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Zeptat se, když chce web získat přístup k zařízením Bluetooth (doporučeno)</translation> <translation id="2266957463645820432">IPP přes USB (IPPUSB)</translation> +<translation id="2268130516524549846">Rozhraní Bluetooth deaktivováno</translation> <translation id="2270450558902169558">Výměna dat s libovolným zařízením v doméně <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Při instalaci bude <ph name="BEGIN_BOLD" />zcela vymazán pevný disk<ph name="END_BOLD" />. Ujistěte se, zda máte data zálohovaná.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Po spuštění již instalaci nelze zrušit.<ph name="END_PARAGRAPH2" /></translation> @@ -2084,7 +2085,6 @@ <translation id="3088052000289932193">Web používá zařízení MIDI</translation> <translation id="3088128611727407543">Probíhá příprava profilu aplikace...</translation> <translation id="3088325635286126843">&Přejmenovat...</translation> -<translation id="3089064280130434511">Blokovat webům otevírání a umísťování oken na obrazovkách</translation> <translation id="3089137131053189723">Vyhledávání bylo vymazáno</translation> <translation id="3090589793601454425">Nepřesouvat</translation> <translation id="3090819949319990166">Obsah externího souboru CRX nelze zkopírovat do souboru <ph name="TEMP_CRX_FILE" />.</translation> @@ -3212,6 +3212,7 @@ <translation id="4275830172053184480">Restartovat zařízení</translation> <translation id="4278390842282768270">Povoleno</translation> <translation id="4279129444466079448">Do tohoto zařízení můžete nainstalovat nejvýše <ph name="PROFILE_LIMIT" /> profilů eSIM. Pokud chcete přidat další profil, nejdříve některý z existujících odstraňte.</translation> +<translation id="4280325816108262082">Když zařízení vypnete nebo když nebude používáno, automaticky se odpojí</translation> <translation id="4281844954008187215">Smluvní podmínky</translation> <translation id="4282196459431406533">Funkce Smart Lock je zapnutá</translation> <translation id="4284755288573763878">Vypnout vylepšené zabezpečení?</translation> @@ -3700,6 +3701,7 @@ <translation id="4813136279048157860">Moje obrázky</translation> <translation id="4813512666221746211">Chyba sítě</translation> <translation id="4814378367953456825">Zadejte název tohoto otisku prstu</translation> +<translation id="481574578487123132">Propojená zařízení</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, podrobnosti</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Byla smazána 1 záložka}few{Byly smazány {COUNT} záložky}many{Bylo smazáno {COUNT} záložky}other{Bylo smazáno {COUNT} záložek}}</translation> <translation id="4819607494758673676">Oznámení Asistenta Google</translation> @@ -3714,7 +3716,6 @@ <translation id="482952334869563894">Zařízení USB od dodavatele <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Nastavit PIN</translation> <translation id="4830026649400230050">Všechna aktivní stahování jsou směrována na účet <ph name="WEB_DRIVE" /> organizace.</translation> -<translation id="4830121310592638841">Zeptat se, když chce web otevřít okna a umístit je na obrazovky</translation> <translation id="4830502475412647084">Instalace aktualizace operačního systému</translation> <translation id="4830573902900904548">Váš <ph name="DEVICE_TYPE" /> se pomocí sítě <ph name="NETWORK_NAME" /> nemůže připojit k internetu. Zkuste prosím jinou síť. <ph name="LEARN_MORE_LINK_START" />Další informace<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Na tiskovém serveru byla nalezena jedna tiskárna</translation> @@ -4331,6 +4332,7 @@ <translation id="5490721031479690399">Odpojit zařízení Bluetooth</translation> <translation id="5490798133083738649">Povolit Linuxu přístup k mikrofonu</translation> <translation id="549211519852037402">Béžová a bílá</translation> +<translation id="5492637351392383067">Šifrování v zařízení</translation> <translation id="5493792505296048976">obrazovka je zapnutá</translation> <translation id="5494016731375030300">Nedávno zavřené karty</translation> <translation id="5494362494988149300">Po &dokončení otevřít</translation> @@ -4414,6 +4416,7 @@ <translation id="5563234215388768762">Hledejte na Googlu nebo zadejte adresu URL</translation> <translation id="5565735124758917034">Aktivní</translation> <translation id="5568069709869097550">Nepodařilo se přihlásit</translation> +<translation id="5571066253365925590">Rozhraní Bluetooth aktivováno</translation> <translation id="5571092938913434726">Globální ovládací prvky médií</translation> <translation id="5571832155627049070">Upravte si profil</translation> <translation id="5572851009514199876">Přihlaste se do Chromu, aby bylo možné ověřit, zda máte povolení tento web navštívit.</translation> @@ -4811,6 +4814,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Abyste mohli nadále procházet web, požádejte administrátora o odstranění této aplikace.}few{Abyste mohli nadále procházet web, požádejte administrátora o odstranění této aplikace.}many{Abyste mohli nadále procházet web, požádejte administrátora o odstranění této aplikace.}other{Abyste mohli nadále procházet web, požádejte administrátora o odstranění této aplikace.}}</translation> <translation id="5997337190805127100">Další informace o přístupu k webům</translation> <translation id="6000758707621254961">Výsledky pro dotaz <ph name="SEARCH_TEXT" /> (<ph name="RESULT_COUNT" />)</translation> +<translation id="6002122790816966947">Vaše zařízení</translation> <translation id="6002210667729577411">Přesunout skupinu do nového okna</translation> <translation id="6002452033851752583">Heslo bylo smazáno z účtu Google</translation> <translation id="6002458620803359783">Preferované hlasy</translation> @@ -5617,7 +5621,6 @@ <translation id="6833996806551876956">Testování izolovaného prostoru ochrany soukromí</translation> <translation id="6834652994408928492">Tmavý režim se zapne automaticky za soumraku</translation> <translation id="6835762382653651563">Chcete-li zařízení <ph name="DEVICE_TYPE" /> aktualizovat, připojte se k internetu.</translation> -<translation id="6838034009068684089">Zeptat se, když chce web otevřít okna a umístit je na obrazovky (doporučeno)</translation> <translation id="6839225236531462745">Chyba při mazání certifikátu</translation> <translation id="6839916869147598086">Přihlášení se změnilo</translation> <translation id="6840155290835956714">Před odesláním se zeptat</translation> @@ -7970,6 +7973,7 @@ <translation id="947667444780368238">Web <ph name="ORIGIN" /> soubory v této složce nemůže otevřít, protože tato složka obsahuje systémové soubory</translation> <translation id="950307215746360464">Průvodce nastavením</translation> <translation id="951991426597076286">Odmítnout</translation> +<translation id="952471655966876828">Když zařízení bude zapnuté a bude používáno, automaticky se připojí</translation> <translation id="953434574221655299">Mohou zjistit, kdy aktivně používáte své zařízení</translation> <translation id="956500788634395331">Jste chráněni před potenciálně škodlivými rozšířenými</translation> <translation id="957960681186851048">Tento web se pokusil automaticky stáhnout několik souborů</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index fd690a7..d675c04a 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1275,6 +1275,7 @@ Hjælp<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Spørg, når et website vil have adgang til Bluetooth-enheder (anbefales)</translation> <translation id="2266957463645820432">IPP via USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth er deaktiveret</translation> <translation id="2270450558902169558">Udveksle data med en enhed på domænet <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Hvis du installerer, <ph name="BEGIN_BOLD" />ryddes hele din harddisk<ph name="END_BOLD" />. Sørg for, at du har sikkerhedskopieret dine data.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Når installationen er gået i gang, kan den ikke annulleres.<ph name="END_PARAGRAPH2" /></translation> @@ -2099,7 +2100,6 @@ <translation id="3088052000289932193">Websitet anvender MIDI</translation> <translation id="3088128611727407543">Forbereder app-profil…</translation> <translation id="3088325635286126843">&Omdøb...</translation> -<translation id="3089064280130434511">Bloker websites fra at åbne og placere vinduer på dine skærme</translation> <translation id="3089137131053189723">Søgningen blev ryddet</translation> <translation id="3090589793601454425">Flyt ikke</translation> <translation id="3090819949319990166">Ekstern crx-fil kan ikke kopieres til <ph name="TEMP_CRX_FILE" />.</translation> @@ -3228,6 +3228,7 @@ <translation id="4275830172053184480">Genstart din enhed</translation> <translation id="4278390842282768270">Tilladt</translation> <translation id="4279129444466079448">Du kan installere op til <ph name="PROFILE_LIMIT" /> eSIM-profiler på denne enhed. Hvis du vil tilføje en ny profil, skal du først fjerne en eksisterende profil.</translation> +<translation id="4280325816108262082">Forbindelsen til enheden afbrydes automatisk, når enheden slukkes eller ikke er i brug</translation> <translation id="4281844954008187215">Servicevilkår</translation> <translation id="4282196459431406533">Smart Lock er slået til</translation> <translation id="4284755288573763878">Vil du deaktivere Udvidet beskyttet browsing?</translation> @@ -3717,6 +3718,7 @@ <translation id="4813136279048157860">Mine billeder</translation> <translation id="4813512666221746211">Netværksfejl</translation> <translation id="4814378367953456825">Angiv et navn til dette fingeraftryk</translation> +<translation id="481574578487123132">Tilknyttede enheder</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, info</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 bogmærke blev slettet}one{{COUNT} bogmærke blev slettet}other{{COUNT} bogmærker blev slettet}}</translation> <translation id="4819607494758673676">Google Assistent-notifikationer</translation> @@ -3731,7 +3733,6 @@ <translation id="482952334869563894">USB-enheder fra leverandøren <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Konfiguration af pinkode</translation> <translation id="4830026649400230050">Alle kvalificerede downloads dirigeres til din organisations <ph name="WEB_DRIVE" />-konto.</translation> -<translation id="4830121310592638841">Spørg, når et website gerne vil åbne og placere vinduer på dine skærme</translation> <translation id="4830502475412647084">Installerer OS-opdateringen</translation> <translation id="4830573902900904548">Din <ph name="DEVICE_TYPE" /> kan ikke oprette forbindelse til internettet via <ph name="NETWORK_NAME" />. Vælg et andet netværk. <ph name="LEARN_MORE_LINK_START" />Få flere oplysninger<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Der blev fundet 1 printer på printerserveren</translation> @@ -4181,7 +4182,7 @@ <translation id="5305145881844743843">Denne konto administreres af <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5307030433605830021">Kilden understøttes ikke</translation> <translation id="5307386115243749078">Par Bluetooth-kontakt</translation> -<translation id="5308380583665731573">Få forbindelse</translation> +<translation id="5308380583665731573">Opret forbindelse</translation> <translation id="5309418307557605830">Google Assistent kan også bruges på denne enhed</translation> <translation id="5310281978693206542">Send linket til dine enheder</translation> <translation id="5311304534597152726">Logger ind som</translation> @@ -4348,6 +4349,7 @@ <translation id="5490721031479690399">Afbryd forbindelsen til Bluetooth-enhed</translation> <translation id="5490798133083738649">Tillad, at Linux får adgang til din mikrofon</translation> <translation id="549211519852037402">Beige og hvid</translation> +<translation id="5492637351392383067">Kryptering på enheden</translation> <translation id="5493792505296048976">skærmen er tændt</translation> <translation id="5494016731375030300">Seneste lukkede faner</translation> <translation id="5494362494988149300">Åbn når &færdigt</translation> @@ -4431,6 +4433,7 @@ <translation id="5563234215388768762">Søg på Google, eller angiv en webadresse</translation> <translation id="5565735124758917034">Aktiv</translation> <translation id="5568069709869097550">Kan ikke logge ind</translation> +<translation id="5571066253365925590">Bluetooth er aktiveret</translation> <translation id="5571092938913434726">Global mediestyring</translation> <translation id="5571832155627049070">Tilpas din profil</translation> <translation id="5572851009514199876">Start og log ind på Chrome, så Chrome kan kontrollere, om du har adgang til dette website.</translation> @@ -4828,6 +4831,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Hvis du vil være sikker på fortsat at kunne bruge internettet, skal du bede din administrator om at fjerne denne app.}one{Hvis du vil være sikker på fortsat at kunne bruge internettet, skal du bede din administrator om at fjerne denne app.}other{Hvis du vil være sikker på fortsat at kunne bruge internettet, skal du bede din administrator om at fjerne disse apps.}}</translation> <translation id="5997337190805127100">Få flere oplysninger om websiteadgang</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultater for "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Dine enheder</translation> <translation id="6002210667729577411">Flyt gruppe til nyt vindue</translation> <translation id="6002452033851752583">Adgangskoden blev slettet fra din Google-konto</translation> <translation id="6002458620803359783">Foretrukne stemmer</translation> @@ -5634,7 +5638,6 @@ <translation id="6833996806551876956">Prøveperiode til Privacy Sandbox</translation> <translation id="6834652994408928492">Mørk tilstand aktiveres automatisk ved solnedgang</translation> <translation id="6835762382653651563">Opret forbindelse til internettet for at opdatere din <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Spørg, når et website vil åbne og placere vinduer på dine skærme (anbefales)</translation> <translation id="6839225236531462745">Fejl under sletning af certifikat</translation> <translation id="6839916869147598086">Login blev ændret</translation> <translation id="6840155290835956714">Spørg, før der sendes</translation> @@ -7987,6 +7990,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> kan ikke åbne filer i denne mappe, da den indeholder systemfiler</translation> <translation id="950307215746360464">Konfigurationsvejledning</translation> <translation id="951991426597076286">Afvis</translation> +<translation id="952471655966876828">Forbindelsen til enheden oprettes automatisk, når enheden tændes eller er i brug</translation> <translation id="953434574221655299">Har tilladelse til at vide, hvornår du aktivt bruger din enhed</translation> <translation id="956500788634395331">Du er beskyttet mod potentielt skadelige udvidelser</translation> <translation id="957960681186851048">Dette website har forsøgt at downloade flere filer automatisk</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 780574e..98547420 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1256,6 +1256,7 @@ <translation id="2263679799334060788">Wir freuen uns über Ihr Feedback. Es hilft uns, Google Cast zu verbessern. Informationen zur Behebung von Problemen mit Google Cast finden Sie <ph name="BEGIN_LINK" />in der Hilfe<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Nachfragen, wenn eine Website auf Bluetooth-Geräte zugreifen möchte (empfohlen)</translation> <translation id="2266957463645820432">IPP über USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth deaktiviert</translation> <translation id="2270450558902169558">Daten mit einem beliebigen Gerät in der Domain "<ph name="DOMAIN" />" austauschen</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Durch die Installation <ph name="BEGIN_BOLD" />wird Ihre gesamte Festplatte gelöscht<ph name="END_BOLD" />. Sichern Sie unbedingt Ihre Daten.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Sobald die Installation gestartet wurde, kann sie nicht mehr abgebrochen werden.<ph name="END_PARAGRAPH2" /></translation> @@ -2080,7 +2081,6 @@ <translation id="3088052000289932193">Die Website verwendet ein MIDI-Gerät</translation> <translation id="3088128611727407543">App-Profil wird vorbereitet...</translation> <translation id="3088325635286126843">&Umbenennen...</translation> -<translation id="3089064280130434511">Websites daran hindern, Fenster auf Ihren Bildschirmen zu öffnen und zu platzieren</translation> <translation id="3089137131053189723">Suche gelöscht</translation> <translation id="3090589793601454425">Nicht verschieben</translation> <translation id="3090819949319990166">Externe CRX-Datei konnte nicht als <ph name="TEMP_CRX_FILE" /> kopiert werden.</translation> @@ -3698,6 +3698,7 @@ <translation id="4813136279048157860">Meine Bilder</translation> <translation id="4813512666221746211">Netzwerkfehler</translation> <translation id="4814378367953456825">Geben Sie einen Namen für diesen Fingerabdruck ein</translation> +<translation id="481574578487123132">Verknüpfte Geräte</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Details</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 Lesezeichen gelöscht}other{{COUNT} Lesezeichen gelöscht}}</translation> <translation id="4819607494758673676">Google Assistant-Benachrichtigungen</translation> @@ -3712,7 +3713,6 @@ <translation id="482952334869563894">USB-Geräte vom Anbieter <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">PIN erstellen</translation> <translation id="4830026649400230050">Alle berechtigten Downloads werden im <ph name="WEB_DRIVE" />-Konto Ihrer Organisation gespeichert.</translation> -<translation id="4830121310592638841">Nachfragen, wenn eine Website Fenster auf meinen Bildschirmen öffnen und platzieren möchte</translation> <translation id="4830502475412647084">Betriebssystem-Update wird installiert</translation> <translation id="4830573902900904548">Ihr Gerät (<ph name="DEVICE_TYPE" />) kann über <ph name="NETWORK_NAME" /> keine Internetverbindung herstellen. Bitte wählen Sie ein anderes Netzwerk aus. <ph name="LEARN_MORE_LINK_START" />Weitere Informationen<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Auf dem Druckserver wurde 1 Drucker gefunden</translation> @@ -4411,6 +4411,7 @@ <translation id="5563234215388768762">Mit Google suchen oder eine URL eingeben</translation> <translation id="5565735124758917034">Aktiv</translation> <translation id="5568069709869097550">Anmeldung nicht möglich</translation> +<translation id="5571066253365925590">Bluetooth aktiviert</translation> <translation id="5571092938913434726">Globale Mediensteuerelemente</translation> <translation id="5571832155627049070">Profil anpassen</translation> <translation id="5572851009514199876">Melden Sie sich zuerst in Chrome an, damit überprüft werden kann, ob Sie auf diese Website zugreifen dürfen.</translation> @@ -4808,6 +4809,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Bitten Sie den Administrator, diese Anwendung zu entfernen, damit Sie weiterhin im Web surfen können.}other{Bitten Sie den Administrator, diese Anwendungen zu entfernen, damit Sie weiterhin im Web surfen können.}}</translation> <translation id="5997337190805127100">Weitere Informationen zum Websitezugriff</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> Ergebnisse für "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Meine Geräte</translation> <translation id="6002210667729577411">Gruppe in ein neues Fenster verschieben</translation> <translation id="6002452033851752583">Passwort aus Ihrem Google-Konto gelöscht</translation> <translation id="6002458620803359783">Bevorzugte Stimmen</translation> @@ -5614,7 +5616,6 @@ <translation id="6833996806551876956">Privacy Sandbox-Testmodus</translation> <translation id="6834652994408928492">Dunkler Modus wird bei Sonnenuntergang automatisch aktiviert</translation> <translation id="6835762382653651563">Stellen Sie eine Internetverbindung her, um Ihr Gerät (<ph name="DEVICE_TYPE" />) zu aktualisieren.</translation> -<translation id="6838034009068684089">Nachfragen, wenn eine Website Fenster auf meinen Bildschirmen öffnen und platzieren möchte (empfohlen)</translation> <translation id="6839225236531462745">Fehler beim Löschen des Zertifikats</translation> <translation id="6839916869147598086">Anmeldung hat sich geändert</translation> <translation id="6840155290835956714">Vor dem Senden nachfragen</translation> @@ -6525,7 +6526,6 @@ <translation id="7775694664330414886">Tab wurde in unbenannte Gruppe verschoben – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> kann dann Dateien im Ordner <ph name="FOLDERNAME" /> lesen, solange Tabs dieser Website geöffnet sind</translation> <translation id="7776701556330691704">Keine Stimmen gefunden</translation> -<translation id="7777284276915203144">Ihre Passwörter werden auf Ihrem Gerät verschlüsselt, bevor sie im Passwortmanager von Google gespeichert werden</translation> <translation id="7781335840981796660">Alle Benutzerkonten und lokalen Daten werden entfernt.</translation> <translation id="7782102568078991263">Keine weiteren Vorschläge von Google</translation> <translation id="7782717250816686129">Vom Nutzer auf dem Anmeldebildschirm angegebene Daten speichern und mit anderen Erweiterungen in der Nutzersitzung teilen.</translation> @@ -7177,7 +7177,6 @@ <translation id="8428634594422941299">Ok</translation> <translation id="84297032718407999">Sie werden in <ph name="LOGOUT_TIME_LEFT" /> abgemeldet</translation> <translation id="8431190899827883166">Fingertipps anzeigen</translation> -<translation id="8431730749911729314">Lassen Sie Passwörter auf Ihrem Gerät verschlüsseln, bevor sie im Passwortmanager von Google gespeichert werden</translation> <translation id="8434480141477525001">NaCl-Debug-Port</translation> <translation id="8435395510592618362">Ihre Identität mit <ph name="APP_NAME" /> bestätigen</translation> <translation id="8437209419043462667">USA</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index ada39fb..b888e0d2 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1274,6 +1274,7 @@ Κέντρο βοήθειας<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Να γίνεται ερώτηση όταν κάποιος ιστότοπος θέλει να αποκτήσει πρόσβαση σε συσκευές Bluetooth (συνιστάται)</translation> <translation id="2266957463645820432">IPP μέσω USB (IPPUSB)</translation> +<translation id="2268130516524549846">Το Bluetooth έχει απενεργοποιηθεί</translation> <translation id="2270450558902169558">Ανταλλαγή δεδομένων με συσκευές στον τομέα <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Με την εγκατάσταση <ph name="BEGIN_BOLD" />θα διαγραφούν όλα τα δεδομένα του σκληρού δίσκου σας<ph name="END_BOLD" />. Βεβαιωθείτε ότι έχετε δημιουργήσει αντίγραφα ασφαλείας για τα δεδομένα σας.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Μετά την έναρξη της εγκατάστασης, δεν είναι δυνατή η ακύρωσή της.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">Ο ιστότοπος χρησιμοποιεί MIDI.</translation> <translation id="3088128611727407543">Προετοιμασία προφίλ εφαρμογής…</translation> <translation id="3088325635286126843">&Μετονομασία...</translation> -<translation id="3089064280130434511">Αποκλεισμός ιστοτόπων σε ό,τι αφορά το άνοιγμα και την τοποθέτηση παραθύρων στις οθόνες σας</translation> <translation id="3089137131053189723">Η αναζήτηση διαγράφηκε</translation> <translation id="3090589793601454425">Να μην γίνει μετακίνηση</translation> <translation id="3090819949319990166">Δεν είναι δυνατή η αντιγραφή του εξωτερικού αρχείου crx στο <ph name="TEMP_CRX_FILE" />.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">Οι εικόνες μου</translation> <translation id="4813512666221746211">Σφάλμα δικτύου</translation> <translation id="4814378367953456825">Εισαγάγετε ένα όνομα για αυτό το μοναδικό χαρακτηριστικό</translation> +<translation id="481574578487123132">Συνδεδεμένες συσκευές</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Λεπτομέρειες</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 σελιδοδείκτης διαγράφηκε}other{{COUNT} σελιδοδείκτες διαγράφηκαν}}</translation> <translation id="4819607494758673676">Ειδοποιήσεις Βοηθού Google</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">Συσκευές USB από τον πάροχο <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Ρύθμιση PIN</translation> <translation id="4830026649400230050">Όλες οι κατάλληλες λήψεις δρομολογούνται στον λογαριασμό <ph name="WEB_DRIVE" /> του οργανισμού σας.</translation> -<translation id="4830121310592638841">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να ανοίξει και να τοποθετήσει παράθυρα στις οθόνες σας</translation> <translation id="4830502475412647084">Εγκατάσταση ενημέρωσης λειτουργικού συστήματος</translation> <translation id="4830573902900904548">Η συσκευή σας <ph name="DEVICE_TYPE" /> δεν μπορεί να συνδεθεί στο διαδίκτυο χρησιμοποιώντας το δίκτυο <ph name="NETWORK_NAME" />. Επιλέξτε κάποιο άλλο δίκτυο. <ph name="LEARN_MORE_LINK_START" />Μάθετε περισσότερα<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Βρέθηκε ένας εκτυπωτής από τον διακομιστή εκτύπωσης.</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Κάντε αναζήτηση στο Google ή πληκτρολογήστε κάποιο URL</translation> <translation id="5565735124758917034">Ενεργό</translation> <translation id="5568069709869097550">Δεν είναι δυνατή η σύνδεση</translation> +<translation id="5571066253365925590">Το Bluetooth έχει ενεργοποιηθεί</translation> <translation id="5571092938913434726">Καθολικά στοιχεία ελέγχου μέσων</translation> <translation id="5571832155627049070">Προσαρμογή του προφίλ σας</translation> <translation id="5572851009514199876">Εκκινήστε και συνδεθείτε στο Chrome, έτσι ώστε το Chrome να μπορεί να ελέγξει εάν έχετε δικαίωμα πρόσβασης σε αυτόν τον ιστότοπο.</translation> @@ -4830,6 +4831,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Για να είστε σίγουροι ότι θα μπορείτε να περιηγηθείτε στον ιστό, ζητήστε από τον διαχειριστή να καταργήσει αυτήν την εφαρμογή.}other{Για να είστε σίγουροι ότι θα μπορείτε να περιηγηθείτε στον ιστό, ζητήστε από τον διαχειριστή να καταργήσει αυτές τις εφαρμογές.}}</translation> <translation id="5997337190805127100">Μάθετε περισσότερα για την πρόσβαση ιστοτόπου</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> αποτελέσματα για την αναζήτηση "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Οι συσκευές σας</translation> <translation id="6002210667729577411">Μετακίνηση ομάδας σε νέο παράθυρο</translation> <translation id="6002452033851752583">Ο κωδικός πρόσβασης διαγράφηκε από τον Λογαριασμό σας Google.</translation> <translation id="6002458620803359783">Προτιμώμενες φωνές</translation> @@ -5636,7 +5638,6 @@ <translation id="6833996806551876956">Δοκιμή Πλαίσιο ιδιωτικότητας</translation> <translation id="6834652994408928492">Η Λειτουργία χαμηλού φωτισμού θα ενεργοποιείται αυτόματα κατά τη δύση του ηλίου</translation> <translation id="6835762382653651563">Συνδεθείτε στο Διαδίκτυο για να ενημερώσετε τη συσκευή σας <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να ανοίξει και να τοποθετήσει παράθυρα στις οθόνες σας (συνιστάται)</translation> <translation id="6839225236531462745">Σφάλμα διαγραφής πιστοποιητικού</translation> <translation id="6839916869147598086">Η σύνδεση έχει αλλάξει</translation> <translation id="6840155290835956714">Ερώτηση πριν από την αποστολή</translation> @@ -6547,7 +6548,6 @@ <translation id="7775694664330414886">Η καρτέλα μεταφέρθηκε σε ομάδα χωρίς όνομα - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Ο ιστότοπος <ph name="ORIGIN" /> θα μπορεί να βλέπει αρχεία στον φάκελο <ph name="FOLDERNAME" /> μέχρι να κλείσετε όλες τις καρτέλες για αυτόν τον ιστότοπο</translation> <translation id="7776701556330691704">Δεν βρέθηκαν φωνές</translation> -<translation id="7777284276915203144">Οι κωδικοί πρόσβασης κρυπτογραφούνται στη συσκευή σας προτού αποθηκευτούν στον Διαχειριστή κωδικών πρόσβασης Google</translation> <translation id="7781335840981796660">Θα καταργηθούν όλοι οι λογαριασμοί χρηστών και τα τοπικά δεδομένα.</translation> <translation id="7782102568078991263">Δεν υπάρχουν άλλες προτάσεις από την Google</translation> <translation id="7782717250816686129">Αποθήκευση σταθερών δεδομένων στην οθόνη σύνδεσης και ενσωμάτωση διαπιστευτηρίων στην περίοδο σύνδεσης.</translation> @@ -7200,7 +7200,6 @@ <translation id="8428634594422941299">Το κατάλαβα</translation> <translation id="84297032718407999">Θα αποσυνδεθείτε σε <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Εμφάνιση πατημάτων</translation> -<translation id="8431730749911729314">Κρυπτογραφήστε τους κωδικούς πρόσβασης στη συσκευή σας προτού αποθηκευτούν στον Διαχειριστή κωδικών πρόσβασης Google</translation> <translation id="8434480141477525001">NaCl Εντοπισμός σφαλμάτων θύρας</translation> <translation id="8435395510592618362">Επαληθεύστε την ταυτότητά σας με την εφαρμογή <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">ΗΠΑ</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 7ac9b58..183f5a5 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -1274,6 +1274,7 @@ Help Centre<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Ask when a site wants to access HID devices (recommended)</translation> <translation id="2266957463645820432">IPP over USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth disabled</translation> <translation id="2270450558902169558">Exchange data with any device in the domain <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Installation <ph name="BEGIN_BOLD" />will erase your entire hard drive<ph name="END_BOLD" />. Make sure that your data is backed up.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Once installation starts it can’t be cancelled.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">Site is using MIDI</translation> <translation id="3088128611727407543">Preparing app profile…</translation> <translation id="3088325635286126843">&Rename...</translation> -<translation id="3089064280130434511">Block sites from opening and placing windows on your screens</translation> <translation id="3089137131053189723">Search cleared</translation> <translation id="3090589793601454425">Don't move</translation> <translation id="3090819949319990166">Can't copy external crx file to <ph name="TEMP_CRX_FILE" />.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">My Images</translation> <translation id="4813512666221746211">Network error</translation> <translation id="4814378367953456825">Enter a name for this fingerprint</translation> +<translation id="481574578487123132">Linked devices</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Details</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 bookmark deleted}other{{COUNT} bookmarks deleted}}</translation> <translation id="4819607494758673676">Google Assistant notifications</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">USB devices from vendor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Set up PIN</translation> <translation id="4830026649400230050">All eligible downloads are routed to your organisation's <ph name="WEB_DRIVE" /> account.</translation> -<translation id="4830121310592638841">Ask when a site wants to open and place windows on your screens</translation> <translation id="4830502475412647084">Installing OS update</translation> <translation id="4830573902900904548">Your <ph name="DEVICE_TYPE" /> is unable to connect to the Internet using <ph name="NETWORK_NAME" />. Please choose another network. <ph name="LEARN_MORE_LINK_START" />Find out more<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Found one printer from the print server</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Search Google or type a URL</translation> <translation id="5565735124758917034">Active</translation> <translation id="5568069709869097550">Can't sign in</translation> +<translation id="5571066253365925590">Bluetooth enabled</translation> <translation id="5571092938913434726">Global Media Controls</translation> <translation id="5571832155627049070">Customise your profile</translation> <translation id="5572851009514199876">Please start and sign in to Chrome so that Chrome can check whether you are allowed to access this site.</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{To ensure that you can keep browsing the web, ask your administrator to remove this application.}other{To ensure that you can keep browsing the web, ask your administrator to remove these applications.}}</translation> <translation id="5997337190805127100">Learn more about site access</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> results for '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">Your devices</translation> <translation id="6002210667729577411">Move group to new window</translation> <translation id="6002452033851752583">Password deleted from your Google Account</translation> <translation id="6002458620803359783">Preferred Voices</translation> @@ -5635,7 +5637,6 @@ <translation id="6833996806551876956">Privacy sandbox trial</translation> <translation id="6834652994408928492">Dark mode will turn on automatically at sunset</translation> <translation id="6835762382653651563">Please connect to the Internet to update your <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Ask when a site wants to open and place windows on your screens (recommended)</translation> <translation id="6839225236531462745">Certificate Deletion Error</translation> <translation id="6839916869147598086">Sign-in has changed</translation> <translation id="6840155290835956714">Ask before sending</translation> @@ -6546,7 +6547,6 @@ <translation id="7775694664330414886">Tab moved into unnamed group – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> will be able to view files in <ph name="FOLDERNAME" /> until you close all tabs for this site</translation> <translation id="7776701556330691704">No voices found</translation> -<translation id="7777284276915203144">Your passwords are encrypted on your device before they‘re saved to Google Password Manager</translation> <translation id="7781335840981796660">All user accounts and local data will be removed.</translation> <translation id="7782102568078991263">No more suggestions from Google</translation> <translation id="7782717250816686129">Store persistent data on the login screen and inject credentials into the session.</translation> @@ -7199,7 +7199,6 @@ <translation id="8428634594422941299">Got it</translation> <translation id="84297032718407999">You'll be signed out in <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Show taps</translation> -<translation id="8431730749911729314">Encrypt passwords on your device before they‘re saved to Google Password Manager</translation> <translation id="8434480141477525001">NaCl Debug Port</translation> <translation id="8435395510592618362">Verify your identity with <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 2e46fda98..ef3d0a9 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -1256,6 +1256,7 @@ <translation id="2263679799334060788">Agradecemos tus comentarios, ya que nos ayudan a mejorar Google Cast. Si quieres obtener asistencia para solucionar problemas de transmisión, visita el <ph name="BEGIN_LINK" />Centro de ayuda<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Preguntar cuando un sitio desee acceder a dispositivos Bluetooth (recomendado)</translation> <translation id="2266957463645820432">IPP por USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth desactivado</translation> <translation id="2270450558902169558">Intercambiar datos con cualquier dispositivo del dominio <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />La instalación <ph name="BEGIN_BOLD" />borrará todo el disco duro<ph name="END_BOLD" />. Asegúrate de que los datos tengan una copia de seguridad.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Una vez que comienza la instalación, no puede cancelarse.<ph name="END_PARAGRAPH2" /></translation> @@ -2080,7 +2081,6 @@ <translation id="3088052000289932193">El sitio está usando la conexión MIDI</translation> <translation id="3088128611727407543">Preparando el perfil de la app…</translation> <translation id="3088325635286126843">Cambia&r nombre...</translation> -<translation id="3089064280130434511">Impedir que los sitios abran y ubiquen ventanas en tus pantallas</translation> <translation id="3089137131053189723">Se borró la búsqueda</translation> <translation id="3090589793601454425">No mover</translation> <translation id="3090819949319990166">No se puede copiar el archivo crx externo a <ph name="TEMP_CRX_FILE" />.</translation> @@ -3209,6 +3209,7 @@ <translation id="4275830172053184480">Reiniciar tu dispositivo</translation> <translation id="4278390842282768270">Permitido</translation> <translation id="4279129444466079448">Puedes instalar hasta <ph name="PROFILE_LIMIT" /> perfiles de eSIM en este dispositivo. Para agregar otro perfil, primero debes quitar uno de los perfiles existentes.</translation> +<translation id="4280325816108262082">El dispositivo se desconectará de forma automática cuando lo desactives o no lo uses</translation> <translation id="4281844954008187215">Condiciones del Servicio</translation> <translation id="4282196459431406533">Smart Lock está activado</translation> <translation id="4284755288573763878">¿Quieres desactivar la seguridad mejorada?</translation> @@ -3697,6 +3698,7 @@ <translation id="4813136279048157860">Mis imágenes</translation> <translation id="4813512666221746211">Error de red</translation> <translation id="4814378367953456825">Escribe un nombre para esta huella dactilar</translation> +<translation id="481574578487123132">Dispositivos vinculados</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Detalles</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 favorito borrado}other{{COUNT} favoritos borrados}}</translation> <translation id="4819607494758673676">Notificaciones del Asistente de Google</translation> @@ -3711,7 +3713,6 @@ <translation id="482952334869563894">Dispositivos USB del proveedor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configurar PIN</translation> <translation id="4830026649400230050">Todas las descargas aptas se envían a la cuenta de <ph name="WEB_DRIVE" /> de tu organización.</translation> -<translation id="4830121310592638841">Preguntar si deseas que un sitio abra y ubique ventanas en tus pantallas</translation> <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> @@ -4328,6 +4329,7 @@ <translation id="5490721031479690399">Desconectar el dispositivo Bluetooth</translation> <translation id="5490798133083738649">Permitir que Linux acceda a tu micrófono</translation> <translation id="549211519852037402">Beige y blanco</translation> +<translation id="5492637351392383067">Encriptación integrada en el dispositivo</translation> <translation id="5493792505296048976">pantalla encendida</translation> <translation id="5494016731375030300">Pestañas cerradas recientemente</translation> <translation id="5494362494988149300">Abrir cuan&do esté listo</translation> @@ -4411,6 +4413,7 @@ <translation id="5563234215388768762">Haz una búsqueda en Google o escribe una URL</translation> <translation id="5565735124758917034">Activo</translation> <translation id="5568069709869097550">No puedo acceder</translation> +<translation id="5571066253365925590">Bluetooth activado</translation> <translation id="5571092938913434726">Controles generales de contenido multimedia</translation> <translation id="5571832155627049070">Personaliza tu perfil</translation> <translation id="5572851009514199876">Abre Chrome y accede a tu cuenta para que el programa pueda comprobar si puedes acceder a este sitio.</translation> @@ -4808,6 +4811,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para asegurarte de que puedas seguir navegando en la Web, pídele a tu administrador que quite esta aplicación.}other{Para asegurarte de que puedas seguir navegando en la Web, pídele a tu administrador que quite estas aplicaciones.}}</translation> <translation id="5997337190805127100">Más información sobre el acceso a sitios</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Tus dispositivos</translation> <translation id="6002210667729577411">Mover grupo a ventana nueva</translation> <translation id="6002452033851752583">Se borró la contraseña guardada en tu Cuenta de Google</translation> <translation id="6002458620803359783">Voces preferidas</translation> @@ -5614,7 +5618,6 @@ <translation id="6833996806551876956">Prueba de Privacy Sandbox</translation> <translation id="6834652994408928492">Se activa el modo oscuro automáticamente al atardecer.</translation> <translation id="6835762382653651563">Conéctate a Internet para actualizar tu <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Preguntar cuando un sitio web quiera abrir y colocar ventanas en tus pantallas (recomendado)</translation> <translation id="6839225236531462745">Error en la eliminación del certificado</translation> <translation id="6839916869147598086">Se modificó el acceso</translation> <translation id="6840155290835956714">Preguntar antes de enviar</translation> @@ -7966,6 +7969,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> no puede abrir los archivos de esta carpeta porque contiene archivos del sistema.</translation> <translation id="950307215746360464">Guía de configuración</translation> <translation id="951991426597076286">Rechazar</translation> +<translation id="952471655966876828">El dispositivo se conectará de forma automática cuando lo actives y lo uses</translation> <translation id="953434574221655299">Pueden saber en qué momento estás usando activamente el dispositivo</translation> <translation id="956500788634395331">Cuentas con protección contra extensiones potencialmente dañinas</translation> <translation id="957960681186851048">Este sitio intentó descargar varios archivos automáticamente</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 382cff6..25aefc4 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1260,6 +1260,7 @@ Si quieres consultar cómo solucionar problemas relacionados con el envío de contenido, ve al <ph name="BEGIN_LINK" />Centro de Ayuda<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Preguntar cuando un sitio web quiera acceder a los dispositivos Bluetooth (recomendado)</translation> <translation id="2266957463645820432">Protocolo IPP por USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth inhabilitado</translation> <translation id="2270450558902169558">Intercambiar datos con cualquier dispositivo del dominio <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />La instalación <ph name="BEGIN_BOLD" />borrará la unidad de disco duro al completo<ph name="END_BOLD" />. Asegúrate de que tengas una copia de seguridad de tus datos.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Una vez que empiece, la instalación no se podrá cancelar.<ph name="END_PARAGRAPH2" /></translation> @@ -2083,7 +2084,6 @@ <translation id="3088052000289932193">El sitio web está usando MIDI</translation> <translation id="3088128611727407543">Preparando perfil de la aplicación…</translation> <translation id="3088325635286126843">&Cambiar nombre...</translation> -<translation id="3089064280130434511">No permitir que los sitios abran y coloquen ventanas en tus pantallas</translation> <translation id="3089137131053189723">Se ha borrado la búsqueda</translation> <translation id="3090589793601454425">No transferirlas</translation> <translation id="3090819949319990166">No se puede copiar el archivo crx externo en <ph name="TEMP_CRX_FILE" />.</translation> @@ -3211,6 +3211,7 @@ <translation id="4275830172053184480">Reiniciar tu dispositivo</translation> <translation id="4278390842282768270">Permitido</translation> <translation id="4279129444466079448">Puedes instalar hasta <ph name="PROFILE_LIMIT" /> perfiles de eSIM en este dispositivo. Para añadir otro perfil, quita primero uno que ya esté creado.</translation> +<translation id="4280325816108262082">El dispositivo se desconectará automáticamente cuando se apague o no se esté usando</translation> <translation id="4281844954008187215">Términos del Servicio</translation> <translation id="4282196459431406533">Smart Lock está activado</translation> <translation id="4284755288573763878">¿Desactivar seguridad mejorada?</translation> @@ -3699,6 +3700,7 @@ <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="481574578487123132">Dispositivos vinculados</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detalles</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 marcador eliminado}other{{COUNT} marcadores eliminados}}</translation> <translation id="4819607494758673676">Notificaciones del Asistente de Google</translation> @@ -3713,7 +3715,6 @@ <translation id="482952334869563894">Dispositivos USB del proveedor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configurar PIN</translation> <translation id="4830026649400230050">Todas las descargas aptas se redirigen a la cuenta de <ph name="WEB_DRIVE" /> de tu organización.</translation> -<translation id="4830121310592638841">Preguntar cuando un sitio web quiera abrir y colocar ventanas en tus pantallas</translation> <translation id="4830502475412647084">Instalando actualización del SO</translation> <translation id="4830573902900904548">Tu <ph name="DEVICE_TYPE" /> no puede conectarse a Internet con <ph name="NETWORK_NAME" />. Selecciona otra red. <ph name="LEARN_MORE_LINK_START" />Más información<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Se ha encontrado 1 impresora en el servidor de impresión</translation> @@ -4330,6 +4331,7 @@ <translation id="5490721031479690399">Desconectar dispositivo Bluetooth</translation> <translation id="5490798133083738649">Permitir a Linux acceder a tu micrófono</translation> <translation id="549211519852037402">Beis y blanco</translation> +<translation id="5492637351392383067">Cifrado en el dispositivo</translation> <translation id="5493792505296048976">pantalla encendida</translation> <translation id="5494016731375030300">Pestañas cerradas recientemente</translation> <translation id="5494362494988149300">Abrir al &finalizar</translation> @@ -4413,6 +4415,7 @@ <translation id="5563234215388768762">Buscar en Google o escribir una URL</translation> <translation id="5565735124758917034">Activo</translation> <translation id="5568069709869097550">No puedo iniciar sesión</translation> +<translation id="5571066253365925590">Bluetooth habilitado</translation> <translation id="5571092938913434726">Controles multimedia globales</translation> <translation id="5571832155627049070">Personaliza tu perfil</translation> <translation id="5572851009514199876">Abre Chrome e inicia sesión en el navegador para que compruebe si tienes permiso para acceder a este sitio web.</translation> @@ -4810,6 +4813,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para seguir navegando por Internet, pide a tu administrador que quite esta aplicación.}other{Para seguir navegando por Internet, pide a tu administrador que quite estas aplicaciones.}}</translation> <translation id="5997337190805127100">Más información sobre el acceso del sitio web</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Tus dispositivos</translation> <translation id="6002210667729577411">Mover grupo a una nueva ventana</translation> <translation id="6002452033851752583">Contraseña eliminada de tu cuenta de Google</translation> <translation id="6002458620803359783">Voces preferidas</translation> @@ -5616,7 +5620,6 @@ <translation id="6833996806551876956">Demostración del entorno aislado de privacidad</translation> <translation id="6834652994408928492">El modo oscuro se activará automáticamente cuando anochezca.</translation> <translation id="6835762382653651563">Conéctate a Internet para actualizar tu <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Preguntar cuando un sitio web quiera abrir y colocar ventanas en tus pantallas (recomendado)</translation> <translation id="6839225236531462745">Error de eliminación de certificado</translation> <translation id="6839916869147598086">El proceso de inicio de sesión ha cambiado</translation> <translation id="6840155290835956714">Preguntar antes de enviar</translation> @@ -7968,6 +7971,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> no puede abrir los archivos de esta carpeta porque son archivos del sistema</translation> <translation id="950307215746360464">Guía de configuración</translation> <translation id="951991426597076286">Rechazar</translation> +<translation id="952471655966876828">El dispositivo se conectará automáticamente cuando se encienda y se esté usando</translation> <translation id="953434574221655299">Permitir que sepan cuándo usas activamente tu dispositivo</translation> <translation id="956500788634395331">Tienes protección frente a extensiones potencialmente dañinas</translation> <translation id="957960681186851048">Este sitio web ha intentado descargar varios archivos automáticamente</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index c90f212..5cd0956 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -1265,6 +1265,7 @@ abikeskust<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Küsi, kui sait soovib juurdepääsu Bluetooth-seadmetele (soovitatav)</translation> <translation id="2266957463645820432">IPP USB kaudu (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth on keelatud</translation> <translation id="2270450558902169558">Vaheta andmeid mis tahes seadmega domeenis <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Installimisel <ph name="BEGIN_BOLD" />tühjendatakse kogu kõvaketas<ph name="END_BOLD" />. Varundage kindlasti oma andmed.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Pärast installimise alustamist ei saa seda tühistada.<ph name="END_PARAGRAPH2" /></translation> @@ -2089,7 +2090,6 @@ <translation id="3088052000289932193">Sait kasutab MIDI-seadet</translation> <translation id="3088128611727407543">Rakenduse profiili ettevalmistamine …</translation> <translation id="3088325635286126843">&Nimeta ümber ...</translation> -<translation id="3089064280130434511">Saitide jaoks blokeeritakse teie ekraanikuvadel akende avamine ja nende sinna paigutamine</translation> <translation id="3089137131053189723">Otsing on tühjendatud</translation> <translation id="3090589793601454425">Ära teisalda</translation> <translation id="3090819949319990166">Välist crx-faili ei saa faili <ph name="TEMP_CRX_FILE" /> kopeerida.</translation> @@ -3218,6 +3218,7 @@ <translation id="4275830172053184480">Taaskäivitage seade</translation> <translation id="4278390842282768270">Lubatud</translation> <translation id="4279129444466079448">Saate sellesse seadmesse installida kuni <ph name="PROFILE_LIMIT" /> eSIM-i profiili. Veel ühe profiili lisamiseks eemaldage mõni olemasolev.</translation> +<translation id="4280325816108262082">Kui seade on välja lülitatud või seda ei kasutata, katkestatakse automaatselt selle ühendus</translation> <translation id="4281844954008187215">Teenusetingimused</translation> <translation id="4282196459431406533">Smart Lock on sisse lülitatud</translation> <translation id="4284755288573763878">Kas lülitada täiustatud kaitse välja?</translation> @@ -3706,6 +3707,7 @@ <translation id="4813136279048157860">Minu pildid</translation> <translation id="4813512666221746211">Võrgu viga</translation> <translation id="4814378367953456825">Sisestage sellele sõrmejäljele nimi</translation> +<translation id="481574578487123132">Lingitud seadmed</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, üksikasjad</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 järjehoidja kustutati}other{{COUNT} järjehoidjat kustutati}}</translation> <translation id="4819607494758673676">Google'i assistendi märguanded</translation> @@ -3720,7 +3722,6 @@ <translation id="482952334869563894">Ettevõtte <ph name="VENDOR_ID" /> USB-seadmed</translation> <translation id="4829768588131278040">Seadista PIN-kood</translation> <translation id="4830026649400230050">Kõik sobilikud allalaadimised suunatakse teie organisatsiooni teenuse <ph name="WEB_DRIVE" /> kontole.</translation> -<translation id="4830121310592638841">Küsitakse, kui sait soovib teie ekraanikuvadel aknaid avada ja neid sinna paigutada</translation> <translation id="4830502475412647084">OS-i värskenduse installimine</translation> <translation id="4830573902900904548">Seade <ph name="DEVICE_TYPE" /> ei saa võrgu <ph name="NETWORK_NAME" /> kaudu Internetiga ühendust. Valige mõni teine võrk. <ph name="LEARN_MORE_LINK_START" />Lisateave<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Prindiserverist leiti 1 printer</translation> @@ -4337,6 +4338,7 @@ <translation id="5490721031479690399">Bluetooth-seadmete eemaldamine</translation> <translation id="5490798133083738649">Andke Linuxile luba teie mikrofonile juurde pääseda</translation> <translation id="549211519852037402">Beež ja valge</translation> +<translation id="5492637351392383067">Krüpteerimine seadmes</translation> <translation id="5493792505296048976">ekraan on sees</translation> <translation id="5494016731375030300">Hiljuti suletud vahelehed</translation> <translation id="5494362494988149300">Ava, kui on &valmis</translation> @@ -4420,6 +4422,7 @@ <translation id="5563234215388768762">Otsige Google'ist või sisestage URL</translation> <translation id="5565735124758917034">Aktiivne</translation> <translation id="5568069709869097550">Ei saa sisse logida</translation> +<translation id="5571066253365925590">Bluetooth on lubatud</translation> <translation id="5571092938913434726">Üldised meedia juhtelemendid</translation> <translation id="5571832155627049070">Profiili kohandamine</translation> <translation id="5572851009514199876">Alustage ja logige Chrome'i sisse, et Chrome saaks kontrollida, kas teil on luba sellele saidile juurdepääsemiseks.</translation> @@ -4817,6 +4820,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Kui soovite jätkuvalt veebi sirvida, paluge administraatoril see rakendus eemaldada.}other{Kui soovite jätkuvalt veebi sirvida, paluge administraatoril need rakendused eemaldada.}}</translation> <translation id="5997337190805127100">Lisateave saidile juurdepääsu kohta</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> tulemust otsingule „<ph name="SEARCH_TEXT" />”</translation> +<translation id="6002122790816966947">Teie seadmed</translation> <translation id="6002210667729577411">Teisalda grupp uude aknasse</translation> <translation id="6002452033851752583">Parool kustutati teie Google'i kontolt</translation> <translation id="6002458620803359783">Eelistatud hääled</translation> @@ -5623,7 +5627,6 @@ <translation id="6833996806551876956">Privaatsuse liivakasti prooviperiood</translation> <translation id="6834652994408928492">Tume režiim lülitub päikeseloojangul automaatselt sisse</translation> <translation id="6835762382653651563">Seadme <ph name="DEVICE_TYPE" /> värskendamiseks looge ühendus Internetiga.</translation> -<translation id="6838034009068684089">Küsi, kui sait soovib ekraanikuvadel aknaid avada ja neid sinna paigutada (soovitatav)</translation> <translation id="6839225236531462745">Sertifikaadi kustutamise viga</translation> <translation id="6839916869147598086">Sisselogimine on muutunud</translation> <translation id="6840155290835956714">Küsi enne saatmist</translation> @@ -7975,6 +7978,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> ei saa selles kaustas olevaid faile avada, kuna see sisaldab süsteemifaile</translation> <translation id="950307215746360464">Seadistusjuhend</translation> <translation id="951991426597076286">Keeldu</translation> +<translation id="952471655966876828">Kui seade on sisse lülitatud ja seda kasutatakse, ühendatakse seade automaatselt</translation> <translation id="953434574221655299">Lubatud teada, millal oma seadet aktiivselt kasutate</translation> <translation id="956500788634395331">Olete potentsiaalselt ohtlike laienduste eest kaitstud</translation> <translation id="957960681186851048">Sait püüdis automaatselt mitut faili alla laadida</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 7311854..53e7462 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -1259,6 +1259,7 @@ <translation id="2263679799334060788">Asko eskertzen dizugu iritzia ematea, Google Cast hobetzeko erabiltzen baitugu. Igortzeko arazoak konpontzeko laguntza nahi baduzu, joan <ph name="BEGIN_LINK" />laguntza-zentrora<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Eskatu nire baimena webguneren batek Bluetooth bidezko gailuak atzitu nahi dituenean (gomendatua)</translation> <translation id="2266957463645820432">USB bidezko IPP protokoloa (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth-a desgaituta dago</translation> <translation id="2270450558902169558">Partekatu datuak <ph name="DOMAIN" /> domeinuko edozein gailurekin</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Instalatuz gero, <ph name="BEGIN_BOLD" />disko gogorreko eduki guztia ezabatuko da<ph name="END_BOLD" />. Ziurtatu datuen babeskopiak egin dituzula.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Instalazio-prozesua hasiz gero, ezin da bertan behera utzi.<ph name="END_PARAGRAPH2" /></translation> @@ -2082,7 +2083,6 @@ <translation id="3088052000289932193">MIDI gailu bat erabiltzen ari da webgunea</translation> <translation id="3088128611727407543">Aplikazioko profila prestatzen…</translation> <translation id="3088325635286126843">&Aldatu izena…</translation> -<translation id="3089064280130434511">Ez utzi webguneei pantailetan leihoak irekitzen eta kokatzen</translation> <translation id="3089137131053189723">Garbitu da bilaketa</translation> <translation id="3090589793601454425">Ez eraman</translation> <translation id="3090819949319990166">Ezin da kanpoko crx fitxategia <ph name="TEMP_CRX_FILE" /> fitxategian kopiatu.</translation> @@ -3700,6 +3700,7 @@ <translation id="4813136279048157860">Nire irudiak</translation> <translation id="4813512666221746211">Sareko errorea</translation> <translation id="4814378367953456825">Idatzi hatz-markaren izena</translation> +<translation id="481574578487123132">Lotutako gailuak</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Xehetasunak</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 zerbitzuaren jakinarazpenak</translation> @@ -3714,7 +3715,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> etxeko USB bidezko gailuak</translation> <translation id="4829768588131278040">Konfiguratu PINa</translation> <translation id="4830026649400230050">Deskarga egoki guztiak erakundearen <ph name="WEB_DRIVE" /> zerbitzuko kontura bideratzen dira.</translation> -<translation id="4830121310592638841">Eskatu zure baimena webguneren batek zure pantailetan leihoak ireki eta kokatu nahi dituenean</translation> <translation id="4830502475412647084">Sistema eragilearen eguneratzea instalatzen</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> gailuak ezin du konektatu Internetera <ph name="NETWORK_NAME" /> erabilita. Aukeratu beste sare bat. <ph name="LEARN_MORE_LINK_START" />Lortu informazio gehiago<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Inprimagailu bat aurkitu da inprimatze-zerbitzarian</translation> @@ -4415,6 +4415,7 @@ <translation id="5563234215388768762">Bilatu Google-n edo idatzi URL bat</translation> <translation id="5565735124758917034">Aktibo</translation> <translation id="5568069709869097550">Ezin da hasi saioa</translation> +<translation id="5571066253365925590">Bluetooth-a gaitu da</translation> <translation id="5571092938913434726">Multimedia-edukia kontrolatzeko aukera orokorrak</translation> <translation id="5571832155627049070">Pertsonalizatu profila</translation> <translation id="5572851009514199876">Ireki Chrome eta hasi saioa Chrome-k webgune hau atzitzeko baimena duzula egiazta dezan.</translation> @@ -4812,6 +4813,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Sarea arakatzen jarrai dezakezula ziurtatzeko, eskatu administratzaileari aplikazio hau kentzeko.}other{Sarea arakatzen jarrai dezakezula ziurtatzeko, eskatu administratzaileari aplikazio hauek kentzeko.}}</translation> <translation id="5997337190805127100">Lortu informazio gehiago webguneetarako sarbideari buruz</translation> <translation id="6000758707621254961">"<ph name="SEARCH_TEXT" />" bilaketak <ph name="RESULT_COUNT" /> emaitza ditu</translation> +<translation id="6002122790816966947">Zure gailuak</translation> <translation id="6002210667729577411">Eraman taldea leiho berri batera</translation> <translation id="6002452033851752583">Ezabatu da pasahitza Google-ko kontutik</translation> <translation id="6002458620803359783">Ahots hobetsiak</translation> @@ -5618,7 +5620,6 @@ <translation id="6833996806551876956">Pribatutasunaren proben eremuaren probaldia</translation> <translation id="6834652994408928492">Modu iluna automatikoki aktibatuko da iluntzean</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" /> eguneratzeko, konektatu Internetera.</translation> -<translation id="6838034009068684089">Eskatu zure baimena webguneren batek zure pantailetan leihoak ireki eta kokatu nahi dituenean (gomendatua)</translation> <translation id="6839225236531462745">Errore bat gertatu da ziurtagiria ezabatzean</translation> <translation id="6839916869147598086">Aldatu egin da saioa hasteko modua</translation> <translation id="6840155290835956714">Eskatu berrespena bidali aurretik</translation> @@ -6529,7 +6530,6 @@ <translation id="7775694664330414886">Talde izengabe batera eraman da fitxa (<ph name="GROUP_CONTENTS" />)</translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> webguneak <ph name="FOLDERNAME" /> karpetako fitxategiak ikusteko baimena izango du webguneko fitxa guztiak ixten dituzun arte</translation> <translation id="7776701556330691704">Ez da aurkitu ahotsik</translation> -<translation id="7777284276915203144">Pasahitzak gailuan bertan enkriptatzen dira Google-ren Pasahitz-kudeatzailea atalean gorde aurretik</translation> <translation id="7781335840981796660">Erabiltzaile-kontu guztiak eta gailuko datuak kendu egingo dira.</translation> <translation id="7782102568078991263">Google-k ez du iradokizun gehiagorik</translation> <translation id="7782717250816686129">Gorde datu iraunkorrak saio-hasierako pantailan eta idatzi kredentzialak saioa hasteko.</translation> @@ -7180,7 +7180,6 @@ <translation id="8428634594422941299">Ados</translation> <translation id="84297032718407999">Saioa amaituko egingo da <ph name="LOGOUT_TIME_LEFT" /> igarotakoan</translation> <translation id="8431190899827883166">Erakutsi sakatutakoa</translation> -<translation id="8431730749911729314">Enkriptatu pasahitzak gailuan Google-ren Pasahitz-kudeatzailea atalean gorde aurretik</translation> <translation id="8434480141477525001">NaCl arazketa-ataka</translation> <translation id="8435395510592618362">Egiaztatu identitatea <ph name="APP_NAME" /> aplikazioa erabilita</translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index c1a65ed..147279b 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -1271,6 +1271,7 @@ مرکز راهنمایی<ph name="END_LINK" /> مراجعه کنید.</translation> <translation id="22665427234727190">وقتی سایتی میخواهد به دستگاههای مجهز به بلوتوث دسترسی پیدا کند سؤال شود (توصیه میشود)</translation> <translation id="2266957463645820432">IPP ازطریق USB (IPPUSB)</translation> +<translation id="2268130516524549846">بلوتوث غیرفعال است</translation> <translation id="2270450558902169558">تبادل داده با هر دستگاهی در دامنه <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />در روند نصب <ph name="BEGIN_BOLD" />کل دادههای دیسک سخت پاک خواهد شد<ph name="END_BOLD" />. حتماً از دادههایتان پشتیبانگیری کنید.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />وقتی نصب شروع شود، نمیتوان آن را لغو کرد.<ph name="END_PARAGRAPH2" /></translation> @@ -2095,7 +2096,6 @@ <translation id="3088052000289932193">سایت درحال استفاده از MIDI است</translation> <translation id="3088128611727407543">درحال آمادهسازی نمایه برنامه...</translation> <translation id="3088325635286126843">&تغییرنام...</translation> -<translation id="3089064280130434511">مسدود کردن سایتها از باز کردن و جایگذاری پنجرهها در صفحه</translation> <translation id="3089137131053189723">جستجو پاک شد</translation> <translation id="3090589793601454425">منتقل نشود</translation> <translation id="3090819949319990166">فایل خارجی crx در <ph name="TEMP_CRX_FILE" /> کپی نمیشود.</translation> @@ -3714,6 +3714,7 @@ <translation id="4813136279048157860">تصاویر من</translation> <translation id="4813512666221746211">خطای شبکه</translation> <translation id="4814378367953456825">نامی برای این اثرانگشت وارد کنید</translation> +<translation id="481574578487123132">دستگاههای پیوندشده</translation> <translation id="4816097470512964351"><ph name="DEVICE" />، جزئیات</translation> <translation id="4816336393325437908">{COUNT,plural, =1{۱ نشانک حذف شد}one{{COUNT} نشانک حذف شد}other{{COUNT} نشانک حذف شد}}</translation> <translation id="4819607494758673676">اعلانهای «دستیار Google»</translation> @@ -3728,7 +3729,6 @@ <translation id="482952334869563894">دستگاههای USB از فروشنده <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">تنظیم پین</translation> <translation id="4830026649400230050">همه بارگیریهای واجدشرایط به حساب <ph name="WEB_DRIVE" /> سازمانتان ارسال میشود.</translation> -<translation id="4830121310592638841">وقتی سایتی میخواهد پنجرهها را باز کند و در صفحه جایگذاری کند درخواست شود</translation> <translation id="4830502475412647084">درحال نصب بهروزرسانی سیستمعامل</translation> <translation id="4830573902900904548">دستگاه <ph name="DEVICE_TYPE" /> شما نمیتواند با استفاده از <ph name="NETWORK_NAME" /> به اینترنت متصل شود. لطفاً شبکه دیگری انتخاب کنید. <ph name="LEARN_MORE_LINK_START" />بیشتر بدانید<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">۱ چاپگر از این سرور چاپ پیدا شد</translation> @@ -4429,6 +4429,7 @@ <translation id="5563234215388768762">جستجوی Google یا تایپ نشانی وب</translation> <translation id="5565735124758917034">فعال</translation> <translation id="5568069709869097550">ورود به سیستم ممکن نیست</translation> +<translation id="5571066253365925590">بلوتوث فعال شد</translation> <translation id="5571092938913434726">کنترلهای رسانه جهانی</translation> <translation id="5571832155627049070">سفارشی کردن نمایه</translation> <translation id="5572851009514199876">لطفاً Chrome را باز کنید و به سیستم آن وارد شوید تا Chrome بتواند بررسی کند آیا مجاز به دسترسی به این سایت هستید یا خیر.</translation> @@ -4826,6 +4827,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{برای اطمینان از اینکه همچنان میتوانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامه را بردارد.}one{برای اطمینان از اینکه همچنان میتوانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامهها را بردارد.}other{برای اطمینان از اینکه همچنان میتوانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامهها را بردارد.}}</translation> <translation id="5997337190805127100">درباره دسترسی به سایت بیشتر بدانید</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> نتیجه برای «<ph name="SEARCH_TEXT" />»</translation> +<translation id="6002122790816966947">دستگاههای شما</translation> <translation id="6002210667729577411">انتقال گروه به پنجرهای جدید</translation> <translation id="6002452033851752583">گذرواژه از «حساب Google» حذف شده است</translation> <translation id="6002458620803359783">صداهای برگزیده</translation> @@ -5632,7 +5634,6 @@ <translation id="6833996806551876956">دوره آزمایشی «جعبه ایمنی حریمخصوصی»</translation> <translation id="6834652994408928492">«حالت تاریک» هنگام غروب آفتاب بهطور خودکار روشن خواهد شد</translation> <translation id="6835762382653651563">برای بهروزرسانی <ph name="DEVICE_TYPE" />، لطفاً به اینترنت وصل شوید.</translation> -<translation id="6838034009068684089">وقتی سایتی میخواهد پنجرهها را باز کند و در صفحه جایگذاری کند سؤال شود (توصیه میشود)</translation> <translation id="6839225236531462745">خطای حذف مجوز</translation> <translation id="6839916869147598086">ورود به سیستم تغییر کرده است</translation> <translation id="6840155290835956714">پیش از ارسال سؤال شود</translation> @@ -6543,7 +6544,6 @@ <translation id="7775694664330414886">برگه به گروه بینام منتقل شد - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">تا زمانیکه همه برگههای <ph name="ORIGIN" /> را نبندید، این سایت میتواند فایلهای موجود در <ph name="FOLDERNAME" /> را مشاهده کند</translation> <translation id="7776701556330691704">صدایی پیدا نشد</translation> -<translation id="7777284276915203144">گذرواژههایتان قبلاز ذخیره شدن در «مدیر گذرواژه Google» در دستگاهتان رمزگذاری میشوند</translation> <translation id="7781335840981796660">همه حسابهای کاربر و دادههای محلی حذف میشوند.</translation> <translation id="7782102568078991263">پیشنهاد دیگری از Google وجود ندارد</translation> <translation id="7782717250816686129">دادههای دائمی در صفحه ورود به سیستم ذخیره شود و اطلاعات کاربری در جلسه تزریق شود.</translation> @@ -7196,7 +7196,6 @@ <translation id="8428634594422941299">متوجه شدم</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> دیگر از سیستم خارج میشوید</translation> <translation id="8431190899827883166">نمایش ضربهها</translation> -<translation id="8431730749911729314">گذرواژهها را قبلاز ذخیره شدن در «مدیر گذرواژه Google» در دستگاهتان رمزگذاری میکند</translation> <translation id="8434480141477525001">درگاه اشکالزدایی NaCl</translation> <translation id="8435395510592618362">هویتتان را با <ph name="APP_NAME" /> تأیید کنید</translation> <translation id="8437209419043462667">آمریکایی</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 2b09516..af039894 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1273,6 +1273,7 @@ <ph name="END_LINK" />.</translation> <translation id="22665427234727190">Kysy aina, jos sivusto pyytää pääsyä Bluetooth-laitteelle (suositus)</translation> <translation id="2266957463645820432">IPP–USB-yhteys (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth pois käytöstä</translation> <translation id="2270450558902169558">Vaihtaa tietoja minkä tahansa verkkotunnusta <ph name="DOMAIN" /> käyttävän laitteen kanssa.</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Asennus <ph name="BEGIN_BOLD" />tyhjentää koko kiintolevysi<ph name="END_BOLD" />. Varmista, että datasi on varmuuskopioitu.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Kun asennus on alkanut, sitä ei voi perua.<ph name="END_PARAGRAPH2" /></translation> @@ -2097,7 +2098,6 @@ <translation id="3088052000289932193">Sivusto käyttää MIDIä</translation> <translation id="3088128611727407543">Sovellusprofiilia valmistellaan…</translation> <translation id="3088325635286126843">Nimeä uudelleen...</translation> -<translation id="3089064280130434511">Estä sivustoja avaamasta ikkunoita ja sijoittamasta niitä näytöillesi</translation> <translation id="3089137131053189723">Haku tyhjennetty</translation> <translation id="3090589793601454425">Älä siirrä</translation> <translation id="3090819949319990166">Ulkoista crx-tiedostoa ei voi kopioida kohteeseen <ph name="TEMP_CRX_FILE" />.</translation> @@ -3713,6 +3713,7 @@ <translation id="4813136279048157860">Omat kuvat</translation> <translation id="4813512666221746211">Verkkovirhe</translation> <translation id="4814378367953456825">Anna sormenjäljelle nimi</translation> +<translation id="481574578487123132">Linkitetyt laitteet</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, tiedot</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 kirjanmerkki poistettiin}other{{COUNT} kirjanmerkkiä poistettiin}}</translation> <translation id="4819607494758673676">Google Assistant ‑ilmoitukset</translation> @@ -3727,7 +3728,6 @@ <translation id="482952334869563894">USB-laitteet (myyjä: <ph name="VENDOR_ID" />)</translation> <translation id="4829768588131278040">Määritä PIN-koodi</translation> <translation id="4830026649400230050">Kaikki kelvolliset lataukset ohjataan organisaatiosi tilille: <ph name="WEB_DRIVE" />.</translation> -<translation id="4830121310592638841">Kysy, kun sivusto haluaa avata ikkunoita ja sijoittaa niitä näytöillesi</translation> <translation id="4830502475412647084">Asennetaan käyttöjärjestelmäpäivitystä</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> ei voi muodostaa internetyhteyttä verkon <ph name="NETWORK_NAME" /> kautta. Valitse toinen verkko. <ph name="LEARN_MORE_LINK_START" />Lisätietoja<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Tulostuspalvelimelta löytyi yksi tulostin</translation> @@ -4428,6 +4428,7 @@ <translation id="5563234215388768762">Hae Googlesta tai kirjoita URL-osoite</translation> <translation id="5565735124758917034">Aktiivinen</translation> <translation id="5568069709869097550">Ei voi kirjautua sisään</translation> +<translation id="5571066253365925590">Bluetooth käytössä</translation> <translation id="5571092938913434726">Yleiset mediaohjaimet</translation> <translation id="5571832155627049070">Muokkaa profiiliasi</translation> <translation id="5572851009514199876">Aloita ja kirjaudu sisään, jotta Chrome voi tarkistaa, onko sinulla oikeus käyttää tätä sivustoa.</translation> @@ -4825,6 +4826,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Pyydä järjestelmänvalvojaasi poistamaan tämä sovellus, jotta voit varmasti jatkaa verkon selaamista.}other{Pyydä järjestelmänvalvojaasi poistamaan nämä sovellukset, jotta voit varmasti jatkaa verkon selaamista.}}</translation> <translation id="5997337190805127100">Lisätietoja sivustojen käyttöoikeuksista</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> tulosta: <ph name="SEARCH_TEXT" /></translation> +<translation id="6002122790816966947">Omat laitteet</translation> <translation id="6002210667729577411">Siirrä ryhmä uuteen ikkunaan</translation> <translation id="6002452033851752583">Salasana poistettu Google-tililtäsi</translation> <translation id="6002458620803359783">Ensisijaiset äänet</translation> @@ -5631,7 +5633,6 @@ <translation id="6833996806551876956">Tietosuojan hiekkalaatikko ‑kokeilu</translation> <translation id="6834652994408928492">Tumma tila menee automaattisesti päälle, kun aurinko laskee</translation> <translation id="6835762382653651563">Muodosta internetyhteys, niin voit päivittää laitteen <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Kysy, kun sivusto haluaa avata ikkunoita ja sijoittaa niitä näytöillesi (suositus)</translation> <translation id="6839225236531462745">Varmenteen poistovirhe</translation> <translation id="6839916869147598086">Kirjautuminen on muuttunut</translation> <translation id="6840155290835956714">Kysy ennen lähettämistä</translation> @@ -6542,7 +6543,6 @@ <translation id="7775694664330414886">Välilehti siirretty nimettömään ryhmään – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> voi nähdä kansion <ph name="FOLDERNAME" /> tiedostoja, kunnes suljet sivuston kaikki välilehdet</translation> <translation id="7776701556330691704">Ääniä ei löydy</translation> -<translation id="7777284276915203144">Salasanat salataan laitteella ennen niiden tallentamista Googlen Salasanojen ylläpitoon</translation> <translation id="7781335840981796660">Kaikki käyttäjätilit ja paikalliset tiedot poistetaan.</translation> <translation id="7782102568078991263">Ei enää ehdotuksia Googlelta</translation> <translation id="7782717250816686129">Tallenna kirjautumisnäytölle pysyvää dataa ja lisää kirjautumistiedot käyttökertaan.</translation> @@ -7194,7 +7194,6 @@ <translation id="8428634594422941299">Selvä</translation> <translation id="84297032718407999">Sinut kirjataan ulos <ph name="LOGOUT_TIME_LEFT" /> päästä</translation> <translation id="8431190899827883166">Näytä kosketus</translation> -<translation id="8431730749911729314">Salaa salasanat laitteella ennen niiden tallentamista Googlen Salasanojen ylläpitoon</translation> <translation id="8434480141477525001">NaCl-vianetsintäportti</translation> <translation id="8435395510592618362">Henkilöllisyyden vahvistaminen: <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">USA</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 559ea532..dada45f 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1275,6 +1275,7 @@ help center<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Magtanong kapag gusto ng isang site na i-access ang mga Bluetooth device (inirerekomenda)</translation> <translation id="2266957463645820432">IPP sa USB (IPPUSB)</translation> +<translation id="2268130516524549846">Hindi pinagana ang Bluetooth</translation> <translation id="2270450558902169558">Makipagpalit ng data sa device na nasa domain ng <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" /><ph name="BEGIN_BOLD" />Mabubura ng pag-install ang iyong buong hard drive<ph name="END_BOLD" />. Tiyaking naka-back up ang iyong data.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Kapag nagsimula na ang pag-install, hindi na ito makakansela.<ph name="END_PARAGRAPH2" /></translation> @@ -2099,7 +2100,6 @@ <translation id="3088052000289932193">Gumagamit ng MIDI ang site</translation> <translation id="3088128611727407543">Inihahanda ang profile sa app...</translation> <translation id="3088325635286126843">&Palitan ang pangalan...</translation> -<translation id="3089064280130434511">Bina-block ang mga site na magbukas at maglagay ng mga window sa iyong mga screen</translation> <translation id="3089137131053189723">Na-clear ang paghahanap</translation> <translation id="3090589793601454425">Huwag ilipat</translation> <translation id="3090819949319990166">Hindi makopya ang external na crx file sa <ph name="TEMP_CRX_FILE" />.</translation> @@ -3718,6 +3718,7 @@ <translation id="4813136279048157860">Aking Mga Larawan</translation> <translation id="4813512666221746211">Error sa network</translation> <translation id="4814378367953456825">Maglagay ng pangalan para sa fingerprint na ito</translation> +<translation id="481574578487123132">Mga naka-link na device</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Mga Detalye</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Na-delete ang 1 bookmark}one{Na-delete ang {COUNT} bookmark}other{Na-delete ang {COUNT} na bookmark}}</translation> <translation id="4819607494758673676">Mga Notification ng Google Assistant</translation> @@ -3732,7 +3733,6 @@ <translation id="482952334869563894">Mga USB device mula sa vendor na <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Mag-set up ng PIN</translation> <translation id="4830026649400230050">Niruruta sa <ph name="WEB_DRIVE" /> account ng iyong organisasyon ang lahat ng kwalipikadong pag-download.</translation> -<translation id="4830121310592638841">Magtanong kapag gusto ng isang site na magbukas at maglagay ng mga window sa iyong mga screen</translation> <translation id="4830502475412647084">Ini-install ang update sa OS</translation> <translation id="4830573902900904548">Hindi makakonekta sa Internet ang iyong <ph name="DEVICE_TYPE" /> gamit ang <ph name="NETWORK_NAME" />. Mangyaring pumili ng ibang network. <ph name="LEARN_MORE_LINK_START" />Matuto pa<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">May nakitang 1 printer mula sa server sa pag-print</translation> @@ -4433,6 +4433,7 @@ <translation id="5563234215388768762">Maghanap sa Google o mag-type ng URL</translation> <translation id="5565735124758917034">Aktibo</translation> <translation id="5568069709869097550">Hindi makapag-sign in</translation> +<translation id="5571066253365925590">Pinapagana ang Bluetooth</translation> <translation id="5571092938913434726">Mga Kontrol ng Pangkalahatang Media</translation> <translation id="5571832155627049070">I-customize ang iyong profile</translation> <translation id="5572851009514199876">Magsimula at mag-sign in sa Chrome upang masuri ng Chrome kung pinapayagan kang i-access ang site na ito.</translation> @@ -4830,6 +4831,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para matiyak na makakapag-browse ka pa rin sa web, hilingin sa iyong administrator na alisin ang application na ito.}one{Para matiyak na makakapag-browse ka pa rin sa web, hilingin sa iyong administrator na alisin ang mga application na ito.}other{Para matiyak na makakapag-browse ka pa rin sa web, hilingin sa iyong administrator na alisin ang mga application na ito.}}</translation> <translation id="5997337190805127100">Matuto pa Tungkol sa Access sa Site</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> (na) resulta para sa '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">Ang iyong mga device</translation> <translation id="6002210667729577411">Ilipat ang grupo sa bagong window</translation> <translation id="6002452033851752583">Na-delete ang password sa iyong Google Account</translation> <translation id="6002458620803359783">Mga Gustong Boses</translation> @@ -5636,7 +5638,6 @@ <translation id="6833996806551876956">Trial ng Privacy Sandbox</translation> <translation id="6834652994408928492">Awtomatikong mag-o-on ang dark mode sa paglubog ng araw</translation> <translation id="6835762382653651563">Mangyaring kumonekta sa Internet upang ma-update ang iyong <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Magtanong kapag gusto ng isang site na magbukas at maglagay ng mga window sa iyong mga screen (inirerekomenda)</translation> <translation id="6839225236531462745">Error sa Pagtanggal ng Certificate</translation> <translation id="6839916869147598086">Nagbago ang pag-sign in</translation> <translation id="6840155290835956714">Magtanong bago magpadala</translation> @@ -6547,7 +6548,6 @@ <translation id="7775694664330414886">Inilipat ang tab sa isang grupong walang pangalan - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Matitingnan ng <ph name="ORIGIN" /> ang mga file sa <ph name="FOLDERNAME" /> hanggang sa isara mo ang lahat ng tab para sa site na ito</translation> <translation id="7776701556330691704">Walang nakitang boses</translation> -<translation id="7777284276915203144">Ine-encrypt ang iyong mga password sa device mo bago i-save ang mga ito sa Google Password Manager</translation> <translation id="7781335840981796660">Aalisin ang lahat ng user account at lokal na data.</translation> <translation id="7782102568078991263">Wala nang mga suhestiyon mula sa Google</translation> <translation id="7782717250816686129">I-store ang mga persistent data sa screen sa pag-log in at ilagay ang mga kredensyal sa session.</translation> @@ -7200,7 +7200,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Masa-sign out ka sa loob ng <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Ipakita ang mga pag-tap</translation> -<translation id="8431730749911729314">I-encrypt ang mga password sa iyong device bago i-save ang mga ito sa Google Password Manager</translation> <translation id="8434480141477525001">NaCl Debug Port</translation> <translation id="8435395510592618362">I-verify ang iyong pagkakakilanlan gamit ang <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 807145b6..47c50c3 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -1260,6 +1260,7 @@ <translation id="2263679799334060788">Nous vous remercions de vos commentaires, qui vont nous aider à améliorer la technologie Google Cast. Pour obtenir de l'aide avec la résolution de problèmes liés à la diffusion, veuillez vous reporter au <ph name="BEGIN_LINK" />centre d'aide<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Demander une autorisation lorsqu'un site veut accéder à des appareils Bluetooth (recommandé)</translation> <translation id="2266957463645820432">IPP sur USB (IPPUSB)</translation> +<translation id="2268130516524549846">La connectivité Bluetooth est désactivée</translation> <translation id="2270450558902169558">Échanger des données avec n'importe quel appareil du domaine <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />L'installation <ph name="BEGIN_BOLD" />effacera l'ensemble des données présentes sur votre disque dur<ph name="END_BOLD" />. Assurez-vous que vos données sont sauvegardées.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Une fois que l'installation a commencé, elle ne peut pas être annulée.<ph name="END_PARAGRAPH2" /></translation> @@ -2085,7 +2086,6 @@ <translation id="3088052000289932193">Le site utilise un appareil MIDI</translation> <translation id="3088128611727407543">Préparation du profil d'application en cours…</translation> <translation id="3088325635286126843">&Renommer...</translation> -<translation id="3089064280130434511">Empêcher les sites d'ouvrir et de placer des fenêtres sur vos écrans</translation> <translation id="3089137131053189723">Recherche effacée</translation> <translation id="3090589793601454425">Ne pas déplacer</translation> <translation id="3090819949319990166">Impossible de copier un fichier crx externe dans <ph name="TEMP_CRX_FILE" />.</translation> @@ -3214,6 +3214,7 @@ <translation id="4275830172053184480">Redémarrer l'appareil</translation> <translation id="4278390842282768270">Autorisé</translation> <translation id="4279129444466079448">Vous pouvez installer un maximum de <ph name="PROFILE_LIMIT" /> profils de carte eSIM sur cet appareil. Pour en ajouter un autre, commencez par supprimer un profil existant.</translation> +<translation id="4280325816108262082">L'appareil se déconnecte automatiquement lorsqu'il est éteint ou qu'il n'est pas utilisé</translation> <translation id="4281844954008187215">Conditions d'utilisation</translation> <translation id="4282196459431406533">Smart Lock est activé</translation> <translation id="4284755288573763878">Désactiver la sécurité améliorée?</translation> @@ -3702,6 +3703,7 @@ <translation id="4813136279048157860">Mes images</translation> <translation id="4813512666221746211">Erreur réseau</translation> <translation id="4814378367953456825">Entrez un nom pour cette empreinte digitale</translation> +<translation id="481574578487123132">Appareils associés</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, détails</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 favori supprimé}one{{COUNT} favori supprimé}other{{COUNT} favoris supprimés}}</translation> <translation id="4819607494758673676">Notifications de l'Assistant Google</translation> @@ -3716,7 +3718,6 @@ <translation id="482952334869563894">Appareils USB par le fournisseur <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configurer un NIP</translation> <translation id="4830026649400230050">Tous les téléchargements admissibles sont acheminés vers le compte <ph name="WEB_DRIVE" /> de votre organisation.</translation> -<translation id="4830121310592638841">Demander la permission lorsqu'un site souhaite ouvrir et placer des fenêtres sur vos écrans</translation> <translation id="4830502475412647084">Installation d'une mise à jour du système d'exploitation en cours…</translation> <translation id="4830573902900904548">Votre <ph name="DEVICE_TYPE" /> ne parvient pas à se connecter à Internet en utilisant <ph name="NETWORK_NAME" />. Veuillez choisir un autre réseau. <ph name="LEARN_MORE_LINK_START" />En savoir plus<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">1 imprimante a été trouvée sur le serveur d'impression</translation> @@ -4333,6 +4334,7 @@ <translation id="5490721031479690399">Déconnecter l'appareil Bluetooth</translation> <translation id="5490798133083738649">Autoriser Linux à accéder à votre microphone</translation> <translation id="549211519852037402">Beige et blanc</translation> +<translation id="5492637351392383067">Chiffrement sur l'appareil</translation> <translation id="5493792505296048976">écran activé</translation> <translation id="5494016731375030300">Onglets récemment fermés</translation> <translation id="5494362494988149300">Ouvrir une fois le téléchargement &terminé</translation> @@ -4416,6 +4418,7 @@ <translation id="5563234215388768762">Effectuez une recherche sur Google ou entrez une adresse URL</translation> <translation id="5565735124758917034">Actif</translation> <translation id="5568069709869097550">Impossible de se connecter</translation> +<translation id="5571066253365925590">Bluetooth activé</translation> <translation id="5571092938913434726">Commandes multimédias générales</translation> <translation id="5571832155627049070">Personnaliser votre profil</translation> <translation id="5572851009514199876">Veuillez démarrer Chrome et vous connecter pour que Chrome puisse vérifier si vous pouvez accéder à ce site.</translation> @@ -4813,6 +4816,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Pour vous assurer de pouvoir continuer à naviguer sur le Web, demandez à votre administrateur de supprimer cette application.}one{Pour vous assurer de pouvoir continuer à naviguer sur le Web, demandez à votre administrateur de supprimer cette application.}other{Pour vous assurer de pouvoir continuer à naviguer sur le Web, demandez à votre administrateur de supprimer ces applications.}}</translation> <translation id="5997337190805127100">En savoir plus sur l'accès aux sites</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> résultats trouvés pour « <ph name="SEARCH_TEXT" /> »</translation> +<translation id="6002122790816966947">Vos appareils</translation> <translation id="6002210667729577411">Déplacer le groupe vers une nouvelle fenêtre</translation> <translation id="6002452033851752583">Le mot de passe a été supprimé de votre compte Google</translation> <translation id="6002458620803359783">Voix préférées</translation> @@ -5619,7 +5623,6 @@ <translation id="6833996806551876956">Essai du bac à sable de confidentialité</translation> <translation id="6834652994408928492">Le mode sombre s'activera automatiquement au coucher du soleil</translation> <translation id="6835762382653651563">Veuillez vous connecter à Internet pour mettre à jour votre <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Demander la permission lorsqu'un site souhaite ouvrir et placer des fenêtres sur vos écrans (recommandé)</translation> <translation id="6839225236531462745">Erreur de suppression de certificat</translation> <translation id="6839916869147598086">La procédure de connexion a changé</translation> <translation id="6840155290835956714">Demander avant d'envoyer</translation> @@ -7971,6 +7974,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> ne peut pas ouvrir les fichiers dans ce dossier parce qu'il contient des fichiers système</translation> <translation id="950307215746360464">Guide de configuration</translation> <translation id="951991426597076286">Refuser</translation> +<translation id="952471655966876828">L'appareil se connecte automatiquement lorsqu'il est allumé et utilisé</translation> <translation id="953434574221655299">Autorisés à savoir quand vous utilisez activement votre appareil</translation> <translation id="956500788634395331">Vous êtes protégé contre les extensions potentiellement nuisibles</translation> <translation id="957960681186851048">Ce site a tenté de télécharger plusieurs fichiers automatiquement</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index ee2815b..6ef5c337 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -1260,6 +1260,7 @@ <translation id="2263679799334060788">Nous vous remercions de vos commentaires, qui vont nous aider à améliorer Google Cast. Pour obtenir de l'aide concernant les problèmes liés à Cast, veuillez consulter le <ph name="BEGIN_LINK" />Centre d'aide<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Me demander lorsqu'un site souhaite accéder aux appareils Bluetooth (recommandé)</translation> <translation id="2266957463645820432">IPP sur USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth désactivé</translation> <translation id="2270450558902169558">Échanger des données avec n'importe quel appareil dans le domaine suivant : "<ph name="DOMAIN" />"</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />L'installation <ph name="BEGIN_BOLD" />effacera tout votre disque dur<ph name="END_BOLD" />. Vérifiez que vos données sont sauvegardées.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Une fois l'installation lancée, elle ne peut plus être annulée.<ph name="END_PARAGRAPH2" /></translation> @@ -2084,7 +2085,6 @@ <translation id="3088052000289932193">Le site utilise actuellement un appareil MIDI</translation> <translation id="3088128611727407543">Préparation du profil de l'application…</translation> <translation id="3088325635286126843">&Renommer...</translation> -<translation id="3089064280130434511">Empêcher les sites d'ouvrir et de placer des fenêtres sur vos écrans</translation> <translation id="3089137131053189723">Recherche effacée</translation> <translation id="3090589793601454425">Ne pas transférer</translation> <translation id="3090819949319990166">Impossible de copier le fichier crx externe dans <ph name="TEMP_CRX_FILE" />.</translation> @@ -3702,6 +3702,7 @@ <translation id="4813136279048157860">Mes images</translation> <translation id="4813512666221746211">Erreur réseau.</translation> <translation id="4814378367953456825">Attribuez un nom à cette empreinte</translation> +<translation id="481574578487123132">Appareils associés</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, détails</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 favori supprimé}one{{COUNT} favori supprimé}other{{COUNT} favoris supprimés}}</translation> <translation id="4819607494758673676">Notifications de l'Assistant Google</translation> @@ -3716,7 +3717,6 @@ <translation id="482952334869563894">Appareils USB du fournisseur <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configurer un code</translation> <translation id="4830026649400230050">Tous les téléchargements éligibles sont acheminés vers le compte <ph name="WEB_DRIVE" /> de votre organisation.</translation> -<translation id="4830121310592638841">Vous demander votre avis lorsqu'un site souhaite ouvrir et placer des fenêtres sur vos écrans</translation> <translation id="4830502475412647084">Installation de la mise à jour du système d'exploitation</translation> <translation id="4830573902900904548">Votre <ph name="DEVICE_TYPE" /> ne parvient pas à se connecter à Internet via le réseau <ph name="NETWORK_NAME" />. Veuillez sélectionner un autre réseau. <ph name="LEARN_MORE_LINK_START" />En savoir plus<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">1 imprimante trouvée sur le serveur d'impression</translation> @@ -4417,6 +4417,7 @@ <translation id="5563234215388768762">Effectuez une recherche sur Google ou saisissez une URL</translation> <translation id="5565735124758917034">Actif</translation> <translation id="5568069709869097550">Impossible de se connecter</translation> +<translation id="5571066253365925590">Bluetooth activé</translation> <translation id="5571092938913434726">Contrôles multimédias généraux</translation> <translation id="5571832155627049070">Personnalisez votre profil</translation> <translation id="5572851009514199876">Veuillez démarrer Chrome et vous connecter à votre compte pour que le navigateur puisse vérifier que vous êtes autorisé à accéder à ce site.</translation> @@ -4815,6 +4816,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Pour pouvoir continuer à naviguer sur Internet, demandez à votre administrateur de supprimer cette application.}one{Pour pouvoir continuer à naviguer sur Internet, demandez à votre administrateur de supprimer cette application.}other{Pour pouvoir continuer à naviguer sur Internet, demandez à votre administrateur de supprimer ces applications.}}</translation> <translation id="5997337190805127100">En savoir plus sur l'accès aux sites</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> résultats pour "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Vos appareils</translation> <translation id="6002210667729577411">Déplacer le groupe vers une nouvelle fenêtre</translation> <translation id="6002452033851752583">Mot de passe supprimé de votre compte Google</translation> <translation id="6002458620803359783">Voix préférées</translation> @@ -5621,7 +5623,6 @@ <translation id="6833996806551876956">Essai de Privacy Sandbox</translation> <translation id="6834652994408928492">Le mode sombre sera activé automatiquement au coucher du soleil</translation> <translation id="6835762382653651563">Connectez-vous à Internet pour mettre à jour votre <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Vous demander votre avis lorsqu'un site souhaite ouvrir et placer des fenêtres sur vos écrans (recommandé)</translation> <translation id="6839225236531462745">Erreur de suppression de certificat</translation> <translation id="6839916869147598086">Le processus de connexion a été modifié</translation> <translation id="6840155290835956714">Demander avant d'envoyer</translation> @@ -6532,7 +6533,6 @@ <translation id="7775694664330414886">Onglet déplacé vers un groupe sans nom : <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> pourra consulter les fichiers du dossier <ph name="FOLDERNAME" /> jusqu'à ce que vous fermiez tous les onglets de ce site</translation> <translation id="7776701556330691704">Aucune voix trouvée</translation> -<translation id="7777284276915203144">Vos mots de passe sont chiffrés sur votre appareil avant d'être enregistrés dans le Gestionnaire de mots de passe Google</translation> <translation id="7781335840981796660">Tous les comptes utilisateur et toutes les données locales seront supprimés.</translation> <translation id="7782102568078991263">Aucune autre suggestion de Google</translation> <translation id="7782717250816686129">Enregistrer les données persistantes dans l'écran de connexion et injecter les identifiants dans la session.</translation> @@ -7185,7 +7185,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Vous allez être déconnecté dans <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Afficher les éléments sélectionnés</translation> -<translation id="8431730749911729314">Chiffrez les mots de passe sur votre appareil avant qu'ils soient enregistrés dans le Gestionnaire de mots de passe Google</translation> <translation id="8434480141477525001">Port de débogage de Native Client</translation> <translation id="8435395510592618362">Valider votre identité avec <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">Américain</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 29030c0a..f098a6da 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -1258,6 +1258,7 @@ <translation id="2263679799334060788">Valoramos moito os teus comentarios, que nos axudan a mellorar Google Cast. Se queres axuda para solucionar problemas relacionados coa emisión, consulta o <ph name="BEGIN_LINK" />Centro de Axuda<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Preguntar cando un sitio queira acceder aos dispositivos Bluetooth (recomendado)</translation> <translation id="2266957463645820432">Protocolo IPP por USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth desactivado</translation> <translation id="2270450558902169558">Intercambiar datos con calquera dispositivo do dominio <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Coa instalación <ph name="BEGIN_BOLD" />borrarase toda a unidade de disco duro<ph name="END_BOLD" />. Asegúrate de ter copias de seguranza dos teus datos.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Unha vez que comeza a instalación, non se pode cancelar.<ph name="END_PARAGRAPH2" /></translation> @@ -2081,7 +2082,6 @@ <translation id="3088052000289932193">O sitio está utilizando MIDI</translation> <translation id="3088128611727407543">Preparando perfil da aplicación...</translation> <translation id="3088325635286126843">&Cambiar o nome...</translation> -<translation id="3089064280130434511">Impedir que os sitios abran e coloquen ventás nas túas pantallas</translation> <translation id="3089137131053189723">Borrouse a busca</translation> <translation id="3090589793601454425">Non transferir</translation> <translation id="3090819949319990166">Non se pode copiar o ficheiro crx externo en <ph name="TEMP_CRX_FILE" />.</translation> @@ -3210,6 +3210,7 @@ <translation id="4275830172053184480">Reinicia o dispositivo</translation> <translation id="4278390842282768270">Permitida</translation> <translation id="4279129444466079448">Podes instalar ata <ph name="PROFILE_LIMIT" /> perfís de eSIM neste dispositivo. Para engadir outro perfil, primeiro quita un que xa teñas.</translation> +<translation id="4280325816108262082">O dispositivo desconectarase automaticamente cando se atope apagado ou non se estea utilizando</translation> <translation id="4281844954008187215">Condicións de servizo</translation> <translation id="4282196459431406533">Smart Lock está activado</translation> <translation id="4284755288573763878">Queres desactivar a seguranza mellorada?</translation> @@ -3698,6 +3699,7 @@ <translation id="4813136279048157860">As miñas imaxes</translation> <translation id="4813512666221746211">Erro de rede</translation> <translation id="4814378367953456825">Ponlle un nome a esta impresión dixital</translation> +<translation id="481574578487123132">Dispositivos vinculados</translation> <translation id="4816097470512964351"><ph name="DEVICE" />; detalles</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Eliminouse 1 marcador}other{Elimináronse {COUNT} marcadores}}</translation> <translation id="4819607494758673676">Notificacións do Asistente de Google</translation> @@ -3712,7 +3714,6 @@ <translation id="482952334869563894">Dispositivos USB do provedor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configurar PIN</translation> <translation id="4830026649400230050">Todas as descargas aptas enrútanse á conta de <ph name="WEB_DRIVE" /> da túa organización.</translation> -<translation id="4830121310592638841">Preguntar cando un sitio queira abrir e colocar ventás nas túas pantallas</translation> <translation id="4830502475412647084">Instalando actualización do SO</translation> <translation id="4830573902900904548">O teu dispositivo <ph name="DEVICE_TYPE" /> non pode conectarse a Internet a través de <ph name="NETWORK_NAME" />. Selecciona outra rede. <ph name="LEARN_MORE_LINK_START" />Máis información<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Atopouse 1 impresora no servidor de impresión</translation> @@ -4329,6 +4330,7 @@ <translation id="5490721031479690399">Desconectar dispositivo Bluetooth</translation> <translation id="5490798133083738649">Permitir que Linux acceda ao micrófono</translation> <translation id="549211519852037402">Beixe e branco</translation> +<translation id="5492637351392383067">Encriptación no dispositivo</translation> <translation id="5493792505296048976">pantalla activada</translation> <translation id="5494016731375030300">Pestanas pechadas recentemente</translation> <translation id="5494362494988149300">Abrir ao fi&nalizar</translation> @@ -4412,6 +4414,7 @@ <translation id="5563234215388768762">Realiza unha busca en Google ou escribe un URL</translation> <translation id="5565735124758917034">Activo</translation> <translation id="5568069709869097550">Non se pode iniciar sesión</translation> +<translation id="5571066253365925590">Bluetooth activado</translation> <translation id="5571092938913434726">Controis multimedia globais</translation> <translation id="5571832155627049070">Personaliza o teu perfil</translation> <translation id="5572851009514199876">Abre Chrome e inicia sesión para que o navegador poida comprobar se tes permiso para acceder a este sitio.</translation> @@ -4809,6 +4812,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para asegurarte de que podes seguir navegando pola web, pídelle ao administrador que elimine esta aplicación.}other{Para asegurarte de que podes seguir navegando pola web, pídelle ao administrador que elimine estas aplicacións.}}</translation> <translation id="5997337190805127100">Máis información sobre o acceso aos sitios</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Os teus dispositivos</translation> <translation id="6002210667729577411">Mover grupo a unha ventá nova</translation> <translation id="6002452033851752583">Eliminouse o contrasinal da túa Conta de Google</translation> <translation id="6002458620803359783">Voces preferidas</translation> @@ -5615,7 +5619,6 @@ <translation id="6833996806551876956">Proba de Privacy Sandbox</translation> <translation id="6834652994408928492">O modo escuro activarase automaticamente ao anoitecer</translation> <translation id="6835762382653651563">Conéctate a Internet para actualizar o teu dispositivo <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Preguntar cando un sitio queira abrir e colocar ventás nas túas pantallas (recomendado)</translation> <translation id="6839225236531462745">Erro de eliminación do certificado</translation> <translation id="6839916869147598086">O inicio de sesión cambiou</translation> <translation id="6840155290835956714">Preguntar antes de enviar</translation> @@ -7965,6 +7968,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> non pode abrir os ficheiros deste cartafol porque contén ficheiros do sistema</translation> <translation id="950307215746360464">Guía de configuración</translation> <translation id="951991426597076286">Rexeitar</translation> +<translation id="952471655966876828">O dispositivo conectarase automaticamente cando se atope acendido e se estea utilizando</translation> <translation id="953434574221655299">Sitios que teñen permiso para saber cando estás utilizando o dispositivo de maneira activa</translation> <translation id="956500788634395331">Tes protección contra extensións potencialmente daniñas</translation> <translation id="957960681186851048">Este sitio tentou descargar varios ficheiros automaticamente</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index d1503ba0..34da5f4 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -241,6 +241,7 @@ <translation id="1235458158152011030">જાણીતા નેટવર્ક્સ</translation> <translation id="123578888592755962">ડિસ્ક સંપૂર્ણ ભરેલી છે</translation> <translation id="1235924639474699896">{COUNT,plural, =1{ટેક્સ્ટ}one{# ટેક્સ્ટ}other{# ટેક્સ્ટ}}</translation> +<translation id="1236009322878349843">ફોનમાં ફેરફાર કરો</translation> <translation id="1239594683407221485">Files ઍપમાં ડિવાઇસના કન્ટેન્ટ વિશે શોધખોળ કરો.</translation> <translation id="1241066500170667906"><ph name="EXPERIMENT_NAME" /> માટે પ્રયોગની સ્થિતિ પસંદ કરો</translation> <translation id="124116460088058876">વધુ ભાષાઓ</translation> @@ -1257,6 +1258,7 @@ કાસ્ટ કરવા સાથેની સમસ્યાઓના નિવારણ માટે, કૃપા કરીને <ph name="BEGIN_LINK" />સહાયતા કેન્દ્ર<ph name="END_LINK" />નો સંદર્ભ લો.</translation> <translation id="22665427234727190">જ્યારે કોઈ સાઇટ બ્લૂટૂથ ડિવાઇસને ઍક્સેસ કરવા માગે ત્યારે પૂછો (સુઝાવ આપીએ છીએ)</translation> <translation id="2266957463645820432">USB પર IPP (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth અક્ષમ છે</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> ડોમેન્સમાં કોઈપણ ઉપકરણો સાથે ડેટા વિનિમય કરો</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ઇન્સ્ટૉલેશન કરવાથી, <ph name="BEGIN_BOLD" />તમારી હાર્ડ ડ્રાઇવનો બધો ડેટા કાઢી નાખવામાં આવશે<ph name="END_BOLD" />. તમારા ડેટાનું બૅકઅપ લેવામાં આવ્યું હોવાની ખાતરી કરો.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />એકવાર ઇન્સ્ટૉલેશન શરૂ થયા પછી, તેને રદ કરી શકાશે નહીં.<ph name="END_PARAGRAPH2" /></translation> @@ -1940,6 +1942,7 @@ <translation id="2939908794993783865">વધારાની નિષ્ક્રિય સાઇટ</translation> <translation id="2939938020978911855">ઉપલબ્ધ Bluetooth ડિવાઇસ બતાવો</translation> <translation id="2941112035454246133">નીચું</translation> +<translation id="2941696810925320401">તમારી સ્ક્રીન પર વધારાના દસ્તાવેજો અથવા પૂર્ણસ્ક્રીન કન્ટેન્ટ બતાવવા માટે, સામાન્ય રીતે સાઇટ વિન્ડોને ખોલે છે અને સ્થાન પર ગોઠવે છે</translation> <translation id="2942279350258725020">Android Messages</translation> <translation id="2942560570858569904">રાહ જોઈ રહ્યાં છીએ...</translation> <translation id="2942581856830209953">આ પેજને કસ્ટમાઇઝ કરો</translation> @@ -2081,7 +2084,6 @@ <translation id="3088052000289932193">સાઇટ MIDIનો ઉપયોગ કરી રહી છે</translation> <translation id="3088128611727407543">ઍપ પ્રોફાઇલ તૈયાર કરી રહ્યાં છીએ...</translation> <translation id="3088325635286126843">&નામ બદલો...</translation> -<translation id="3089064280130434511">સાઇટને ખોલવાથી અને તમારી સ્ક્રીન પર વિન્ડો મૂકવાથી બ્લૉક કરો</translation> <translation id="3089137131053189723">શોધ સાફ કરી</translation> <translation id="3090589793601454425">ખસેડશો નહીં</translation> <translation id="3090819949319990166">બાહ્ય crx ફાઇલને <ph name="TEMP_CRX_FILE" /> પર કૉપિ કરી શકતાં નથી.</translation> @@ -2093,6 +2095,7 @@ <translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{નુકસાન પહોંચાડવાની સંભાવના હોય એવું 1 એક્સ્ટેંશન બંધ છે. તમે તેને કાઢી નાખી પણ શકો છો.}one{નુકસાન પહોંચાડવાની સંભાવના હોય એવું {NUM_EXTENSIONS} એક્સ્ટેંશન બંધ છે. તમે તેને કાઢી નાખી પણ શકો છો.}other{નુકસાન પહોંચાડવાની સંભાવના હોય એવા {NUM_EXTENSIONS} એક્સ્ટેંશન બંધ છે. તમે તેમને કાઢી નાખી પણ શકો છો.}}</translation> <translation id="3101126716313987672">ઝાંખી લાઇટ</translation> <translation id="3101709781009526431">તારીખ અને સમય</translation> +<translation id="3103451787721578293">કૃપા કરીને આ ડેટા અપલોડ કરવાનું કારણ દાખલ કરો:</translation> <translation id="3103941660000130485">Linux અપગ્રેડ કરવામાં ભૂલ આવી</translation> <translation id="3105796011181310544">બદલીને પાછા Google પર આવીએ?</translation> <translation id="310671807099593501">સાઇટ બ્લૂટૂથનો ઉપયોગ કરી રહી છે</translation> @@ -2619,6 +2622,7 @@ <translation id="3670113805793654926">કોઈ પણ વિક્રેતા પાસે ઉપલબ્ધ ડિવાઇસની શ્રેણી</translation> <translation id="3670229581627177274">Bluetooth ચાલુ કરો</translation> <translation id="3672681487849735243">એક ફેક્ટરી ભૂલ શોધવામાં આવી છે</translation> +<translation id="3673097791729989571"><ph name="SAML_DOMAIN" /> દ્વારા સાઇન ઇન કરવાની સુવિધા હોસ્ટ કરવામાં આવી છે</translation> <translation id="367645871420407123">જો તમે રૂટ પાસવર્ડને ડિફૉલ્ટ પરીક્ષણ છબી મૂલ્ય પર સેટ કરવા માંગતા હો તો ખાલી છોડો</translation> <translation id="3677106374019847299">કસ્ટમ પ્રદાતા દાખલ કરો</translation> <translation id="3677911431265050325">મોબાઇલ સાઇટની વિનંતી કરો</translation> @@ -3402,6 +3406,7 @@ <translation id="4481467543947557978">સર્વિસ વર્કર</translation> <translation id="4481530544597605423">જોડીથી અલગ કરેલા ઉપકરણો</translation> <translation id="4482990632723642375">તાજેતરમાં બંધ કરેલી ટૅબ</translation> +<translation id="4484922932728109422">વિન્ડો ખોલવા અને મૂકવા માટે, તમારી સ્ક્રીન વિશેની માહિતીનો ઉપયોગ કરવાની મંજૂરી આપશો નહીં</translation> <translation id="4487489714832036847">Chromebooksમાં પરંપરાગત સૉફ્ટવેરને બદલે ઍપનો ઉપયોગ કરવામાં આવે છે. ઉત્પાદકતા, મનોરંજન અને બીજા ઘણા માટે ઍપ મેળવો.</translation> <translation id="4488257340342212116">તમારા કૅમેરાનો ઉપયોગ કરવાની મંજૂરી છે</translation> <translation id="4488502501195719518">બધો ડેટા સાફ કરીએ?</translation> @@ -3484,6 +3489,7 @@ <translation id="4565917129334815774">સિસ્ટમ લૉગને સ્ટોર કરો</translation> <translation id="4566417217121906555">માઇક્રોફોન મ્યૂટ કરો</translation> <translation id="456717285308019641">અનુવાદ કરવા માટે પેજની ભાષા</translation> +<translation id="4567512141633030272">સાઇન-ઇન કરવાનો વિકલ્પ ખોટો છે?</translation> <translation id="4567533462991917415">સેટઅપ કર્યા પછી તમે ગમે ત્યારે વધુ લોકોને ઉમેરી શકો છો. દરેક વ્યક્તિ તેમનું એકાઉન્ટ મનગમતું બનાવી શકે છે અને ડેટા ખાનગી રાખી શકે છે.</translation> <translation id="4567772783389002344">શબ્દ ઉમેરો</translation> <translation id="4568025708905928793">સુરક્ષા કોડની વિનંતી કરવામાં આવી રહી છે</translation> @@ -3699,6 +3705,7 @@ <translation id="4813136279048157860">મારી છબીઓ</translation> <translation id="4813512666221746211">નેટવર્ક ભૂલ</translation> <translation id="4814378367953456825">આ ફિંગરપ્રિન્ટ માટેનું નામ દાખલ કરો</translation> +<translation id="481574578487123132">લિંક કરેલા ડિવાઇસ</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, વિગતો</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 બુકમાર્ક ડિલીટ કર્યું}one{{COUNT} બુકમાર્ક ડિલીટ કર્યું}other{{COUNT} બુકમાર્ક ડિલીટ કર્યા}}</translation> <translation id="4819607494758673676">Google Assistantનાં નોટિફિકેશન</translation> @@ -3713,7 +3720,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> વિક્રેતાના USB ડિવાઇસ</translation> <translation id="4829768588131278040">PIN સેટ કરો</translation> <translation id="4830026649400230050">યોગ્યતા ધરાવતા બધા ડાઉનલોડને તમારી સંસ્થાના <ph name="WEB_DRIVE" /> એકાઉન્ટ પર રીડાયરેક્ટ કરવામાં આવે છે.</translation> -<translation id="4830121310592638841">જ્યારે સાઇટને ખુલીને તમારી સ્ક્રીન પર વિંડો મુકવી હોય ત્યારે પૂછવામાં આવે</translation> <translation id="4830502475412647084">OS અપડેટ ઇન્સ્ટૉલ કરી રહ્યા છીએ</translation> <translation id="4830573902900904548"><ph name="NETWORK_NAME" /> નો ઉપયોગ કરીને ઇન્ટરનેટથી કનેક્ટ થવામાં તમારી <ph name="DEVICE_TYPE" /> અસમર્થ છે. કૃપા કરીને બીજું નેટવર્ક પસંદ કરો. <ph name="LEARN_MORE_LINK_START" />વધુ જાણો<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">પ્રિન્ટ સર્વરમાંથી 1 પ્રિન્ટર મળ્યું</translation> @@ -3729,6 +3735,7 @@ <translation id="4841741146571978176">આવશ્યક એવું વર્ચ્યુઅલ મશીન અસ્તિત્વમાં નથી. આગળ વધવા માટે, કૃપા કરીને <ph name="VM_TYPE" />નું સેટઅપ કરવાનો પ્રયાસ કરો</translation> <translation id="4842976633412754305">આ પેજ અનધિકૃત સૉર્સમાંથી સ્ક્રિપ્ટ લોડ કરવાનો પ્રયાસ કરી રહ્યું છે.</translation> <translation id="4844333629810439236">અન્ય કીબોર્ડ્સ</translation> +<translation id="4844633725025837809">વધારાની સલામતી માટે, તમારા પાસવર્ડ Google પાસવર્ડ મેનેજરમાં સાચવવામાં આવે એ પહેલાં તેમને તમારા ડિવાઇસમાં એન્ક્રિપ્ટ કરો</translation> <translation id="4846680374085650406">તમે આ સેટિંગ માટે વ્ય્વસ્થાપકની ભલામણને અનુસરી રહ્યાં છો.</translation> <translation id="4847902821209177679"><ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" />ની પસંદગી કરવામાં આવી, <ph name="TOPIC_SOURCE" /> આલ્બમ પસંદ કરવા માટે Enter કી દબાવો</translation> <translation id="4848191975108266266">Google Assistant "Ok Google"</translation> @@ -3870,6 +3877,7 @@ <translation id="499165176004408815">ઉચ્ચ કોન્ટ્રાસ્ટ મોડનો ઉપયોગ કરો</translation> <translation id="4992458225095111526">Powerwash ની પુષ્ટિ કરો</translation> <translation id="4992473555164495036">તમારા વ્યવસ્થાપકે ઉપલબ્ધ ઇનપુટ પદ્ધતિઓને મર્યાદિત કરેલ છે.</translation> +<translation id="4992984395680162305">QR કોડ સ્કૅન કરીને આ ડિવાઇસ લિંક કરવામાં આવ્યા હતા.</translation> <translation id="4994474651455208930">પ્રોટોકૉલ માટે ડિફૉલ્ટ હૅન્ડલર બનવા માટે સાઇટને પૂછવાની મંજૂરી આપો</translation> <translation id="4994754230098574403">સેટ કરી રહ્યા છીએ</translation> <translation id="4995131849631312693"><ph name="BEGIN_PARAGRAPH1" />નોંધણી કરતા પહેલાં તમારે TPM સાફ કરવું જરૂરી છે, જેથી <ph name="DEVICE_OS" /> ડિવાઇસ પર માલિકીનો અધિકાર પ્રાપ્ત કરી શકે.<ph name="END_PARAGRAPH1" /> @@ -3990,6 +3998,7 @@ <translation id="5123433949759960244">બાસ્કેટબૉલ</translation> <translation id="5125751979347152379">અમાન્ય URL.</translation> <translation id="5126611267288187364">ફેરફારો જુઓ</translation> +<translation id="5127242257756472928">વિન્ડો ખોલવા અને મૂકવા માટે, તમારી સ્ક્રીન વિશેની માહિતીનો ઉપયોગ કરવાની મંજૂરી આપી નથી</translation> <translation id="5127620150973591153">સુરક્ષિત કનેક્શન ID: <ph name="TOKEN" /></translation> <translation id="5127805178023152808">સમન્વયન બંધ છે</translation> <translation id="5127881134400491887">નેટવર્ક કનેક્શન્સનું સંચાલન કરો</translation> @@ -4102,6 +4111,7 @@ <translation id="5243522832766285132">કૃપા કરીને થોડીવારમાં ફરી પ્રયાસ કરો</translation> <translation id="5244474230056479698"><ph name="EMAIL" /> પર સમન્વયિત કરી રહ્યાં છે</translation> <translation id="5245610266855777041">સ્કૂલ એકાઉન્ટ વડે શરૂઆત કરો</translation> +<translation id="5246036036039717045">આ ડિવાઇસનો ઉપયોગ સિક્યુરિટી કી તરીકે થઈ શકે છે કારણ કે તમે તેના પર Chromeમાં સાઇન ઇન કર્યું છે.</translation> <translation id="5246282308050205996"><ph name="APP_NAME" /> ક્રેશ થયું છે. એપ્લિકેશનને ફરીથી પ્રારંભ કરવા માટે આ બલૂન ક્લિક કરો.</translation> <translation id="5247051749037287028">ડિસ્પ્લે નામ (વૈકલ્પિક)</translation> <translation id="5249624017678798539">ડાઉનલોડ પૂર્ણ થતા પહેલાં બ્રાઉઝર ક્રેશ થયું.</translation> @@ -4414,6 +4424,7 @@ <translation id="5563234215388768762">Google પર શોધો અથવા URL લખો</translation> <translation id="5565735124758917034">સક્રિય</translation> <translation id="5568069709869097550">સાઇન ઇન કરી શકાતું નથી</translation> +<translation id="5571066253365925590">Bluetooth સક્ષમ છે</translation> <translation id="5571092938913434726">વૈશ્વિક મીડિયા નિયંત્રણો</translation> <translation id="5571832155627049070">તમારી પ્રોફાઇલ કસ્ટમાઇઝ કરો</translation> <translation id="5572851009514199876">કૃપા કરીને Chrome ને પ્રારંભ કરો અને સાઇન ઇન કરો જેથી કરીને Chrome તપાસી શકે કે તમને આ સાઇટની ઍક્સેસની મંજૂરી છે કે કેમ.</translation> @@ -4590,6 +4601,7 @@ <translation id="5757375109985023827">પ્રીવ્યૂ કરવા માટે કોઈ ટૅબ પસંદ કરો</translation> <translation id="5758631781033351321">તમને તમારી વાંચન સૂચિ અહીં મળશે</translation> <translation id="5759728514498647443">તમે <ph name="APP_NAME" /> મારફતે છાપવા માટે મોકલેલા દસ્તાવેજો <ph name="APP_NAME" /> દ્વારા વાંચી શકાય છે.</translation> +<translation id="5762787084360227629">Google એકાઉન્ટની માહિતી દાખલ કરો</translation> <translation id="5763751966069581670">કોઈ USB ઉપકરણ મળ્યું નથી</translation> <translation id="5764483294734785780">ઑડિયો આ રૂપે સા&ચવો...</translation> <translation id="57646104491463491">ફેરફાર કર્યાની તારીખ</translation> @@ -4813,6 +4825,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશન કાઢી નાખવાનું કહો.}one{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશનો કાઢી નાખવાનું કહો.}other{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશનો કાઢી નાખવાનું કહો.}}</translation> <translation id="5997337190805127100">સાઇટ ઍક્સેસ વિશે વધુ જાણો</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' માટે <ph name="RESULT_COUNT" /> પરિણામ</translation> +<translation id="6002122790816966947">તમારા ડિવાઇસ</translation> <translation id="6002210667729577411">ગ્રૂપને નવી વિંડોમાં ખસેડો</translation> <translation id="6002452033851752583">તમારા Google એકાઉન્ટમાંથી પાસવર્ડ ડિલીટ કર્યો</translation> <translation id="6002458620803359783">મનપસંદ વૉઇસ</translation> @@ -5619,7 +5632,6 @@ <translation id="6833996806551876956">પ્રાઇવસી સૅન્ડબૉક્સની અજમાયશ</translation> <translation id="6834652994408928492">ઘેરો મોડ સૂર્યાસ્ત સમયે ઑટોમૅટિક રીતે ચાલુ થઈ જશે</translation> <translation id="6835762382653651563">કૃપા કરીને તમારા <ph name="DEVICE_TYPE" /> ને અપડેટ કરવા માટે ઇન્ટરનેટથી કનેક્ટ કરો.</translation> -<translation id="6838034009068684089">જ્યારે સાઇટને ખુલીને તમારી સ્ક્રીન પર વિંડો મુકવી હોય ત્યારે પૂછવામાં આવે (ભલામણ કરવામાં આવે છે)</translation> <translation id="6839225236531462745">પ્રમાણપત્ર કાઢી નાખવામાં ભૂલ</translation> <translation id="6839916869147598086">સાઇન-ઇન બદલાઈ ગયું છે</translation> <translation id="6840155290835956714">મોકલતાં પહેલાં પૂછો</translation> @@ -5736,6 +5748,7 @@ <translation id="6965382102122355670">બરાબર, સમજાઇ ગયું</translation> <translation id="6965648386495488594">પોર્ટ</translation> <translation id="6965978654500191972">ઉપકરણ</translation> +<translation id="6966370001499648704">તમે સિક્યુરિટી કી તરીકે કયા ફોનનો ઉપયોગ કરો છો તે નિયંત્રિત કરો</translation> <translation id="6967430741871315905">ડિવાઇસને મંજૂરી આપવામાં આવી છે કે નહીં, તે ચેક કરી શકાતું નથી</translation> <translation id="696780070563539690">સાઇટ વિવિધ સાઇટ પરની તમારી બ્રાઉઝિંગ પ્રવૃત્તિ જોવા માટે તમારી કુકીનો ઉપયોગ કરી શકશે નહીં. ઉદાહરણ તરીકે, મનગમતી જાહેરાતો બનાવવા માટે</translation> <translation id="6968288415730398122">સ્ક્રીન લૉક ગોઠવવા માટે તમારો પાસવર્ડ દાખલ કરો</translation> @@ -5910,6 +5923,7 @@ <translation id="7135729336746831607">બ્લૂટૂથ ચાલુ કરીએ?</translation> <translation id="7136694880210472378">ડિફૉલ્ટ બનાવો</translation> <translation id="7136993520339022828">તેમાં એક ભૂલ છે. કૃપા કરીને અન્ય છબી પસંદ કરીને ફરી પ્રયત્ન કરો.</translation> +<translation id="7137472406312798422">વિન્ડો ખોલવા અને મૂકવા માટે, સાઇટ તમારી સ્ક્રીન વિશેની માહિતીનો ઉપયોગ કરવાની પરવાનગી માગી શકે છે</translation> <translation id="7138515695467025690">બંધ છે / સૂર્યાસ્તના સમયે ઑટોમૅટિક રીતે ચાલુ થઈ જશે</translation> <translation id="7138678301420049075">અન્ય</translation> <translation id="7139627972753429585"><ph name="APP_NAME" /> તમારા માઇક્રોફોનનો ઉપયોગ કરી રહી છે</translation> @@ -6530,7 +6544,6 @@ <translation id="7775694664330414886">નામ વિનાના ગ્રૂપ - <ph name="GROUP_CONTENTS" />માં ટૅબને ખસેડવામાં આવી</translation> <translation id="7776156998370251340">આ સાઇટ માટે, જ્યાં સુધી તમે બધી ટૅબ બંધ નહીં કરો ત્યાં સુધી <ph name="ORIGIN" />, <ph name="FOLDERNAME" />માંની બધી ફાઇલો જોઈ શકશે</translation> <translation id="7776701556330691704">કોઈ વૉઇસ મળ્યાં નથી</translation> -<translation id="7777284276915203144">તમારા પાસવર્ડને Google પાસવર્ડ મેનેજર પર સાચવવામાં આવે તે પહેલાં તેમને તમારા ડિવાઇસ પર એન્ક્રિપ્ટ કરવામાં આવે છે</translation> <translation id="7781335840981796660">બધા વપરાશકર્તા એકાઉન્ટ્સ અને સ્થાનિક ડેટા દૂર કરવામાં આવશે.</translation> <translation id="7782102568078991263">Google દ્વારા કોઈ વધુ સૂચનો</translation> <translation id="7782717250816686129">નિરંતર ડેટાને લૉગ ઇન સ્ક્રીન પર સ્ટોર કરો અને સત્રમાં લૉગ ઇન વિગતો ભરો.</translation> @@ -6792,6 +6805,7 @@ <translation id="8028803902702117856"><ph name="SIZE" />, <ph name="FILE_NAME" /> ડાઉનલોડ કરી રહ્યાં છીએ</translation> <translation id="8028993641010258682">કદ</translation> <translation id="8029492516535178472"><ph name="WINDOW_TITLE" /> - પરવાનગીની વિનંતી કરવામાં આવી, જવાબ આપવા માટે ⌘ + Option + ઉપરનો ઍરો દબાવો</translation> +<translation id="8029539783236818164">વિન્ડો ખોલવા અને મૂકવા માટે, તમારી સ્ક્રીન વિશેની માહિતીનો ઉપયોગ કરવાની મંજૂરી આપી છે</translation> <translation id="8030169304546394654">ડિસ્કનેક્ટેડ</translation> <translation id="8030852056903932865">મંજૂર કરો</translation> <translation id="8032244173881942855">ટૅબને કાસ્ટ કરવામાં અસમર્થ.</translation> @@ -6804,6 +6818,7 @@ <translation id="8038399858950372766"><ph name="DEVICE_COUNT" />માંથી <ph name="DEVICE_INDEX" /> ડિવાઇસ, <ph name="DEVICE_NAME" /> નામનું કીબોર્ડ</translation> <translation id="8041089156583427627">પ્રતિસાદ મોકલો</translation> <translation id="8042142357103597104">ટેક્સ્ટની અસ્પષ્ટતા</translation> +<translation id="8042331986490021244">તમારા પાસવર્ડ Google પાસવર્ડ મેનેજર પર સાચવવામાં આવે તે પહેલાં તેમને તમારા ડિવાઇસ પર એન્ક્રિપ્ટ કરવામાં આવે છે</translation> <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> ચાલી રહી નથી.</translation> <translation id="8044899503464538266">ધીમું</translation> <translation id="8045253504249021590">સિંક, Google ડૅશબોર્ડ દ્વારા અટકાવવામાં આવ્યું છે.</translation> @@ -7177,7 +7192,6 @@ <translation id="8428634594422941299">સમજાઈ ગયું</translation> <translation id="84297032718407999">તમે <ph name="LOGOUT_TIME_LEFT" />માં સાઇન આઉટ થઈ જશો</translation> <translation id="8431190899827883166">ટૅપ બતાવો</translation> -<translation id="8431730749911729314">તમારા પાસવર્ડને Google પાસવર્ડ મેનેજર પર સાચવવામાં આવે તે પહેલાં તેમને તમારા ડિવાઇસ પર એન્ક્રિપ્ટ કરો</translation> <translation id="8434480141477525001">NaCl ડિબગ પોર્ટ</translation> <translation id="8435395510592618362"><ph name="APP_NAME" />ને તમારી ઓળખની ચકાસણી કરાવો</translation> <translation id="8437209419043462667">અમેરિકા</translation> @@ -7564,6 +7578,7 @@ <translation id="8838234842677265403"><ph name="WEB_DRIVE_MESSAGE" /> (<ph name="SUPPORT_INFO" />)</translation> <translation id="8838601485495657486">અપારદર્શક</translation> <translation id="8838770651474809439">હૅમ્બર્ગર</translation> +<translation id="8838778928843281408">ફોન મેનેજ કરો</translation> <translation id="883911313571074303">છબીમાં ટીકા કરો</translation> <translation id="8841843049738266382">વ્હાઇટલિસ્ટ કરેલા વપરાશકર્તાઓને વાંચો અને બદલો</translation> <translation id="8842594465773264717">આ ફિંગરપ્રિન્ટને ડિલીટ કરો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 506bd2f..b9b2206 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1275,6 +1275,7 @@ सहायता केंद्र<ph name="END_LINK" /> देखें.</translation> <translation id="22665427234727190">जब कोई साइट ब्लूटूथ डिवाइस ऐक्सेस करना चाहे, तो इसके लिए पूछें (सुझाया गया)</translation> <translation id="2266957463645820432">यूएसबी पर IPP (IPPUSB)</translation> +<translation id="2268130516524549846">ब्लूटूथ अक्षम किया गया</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> डोमेन के किसी भी डिवाइस से डेटा का लेन-देन करें</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />इंस्टॉल करने पर, <ph name="BEGIN_BOLD" />आपकी हार्ड ड्राइव का सारा डेटा हमेशा के लिए मिटा दिया जाएगा<ph name="END_BOLD" />. पक्का करें कि आपके डेटा का बैक अप ले लिया गया है.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />इंस्टॉल करना शुरू करने के बाद, रद्द नहीं किया जा सकता.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">साइट 'मिडी' की इस्तेमाल कर रही है</translation> <translation id="3088128611727407543">ऐप्लिकेशन की प्रोफ़ाइल तैयार हो रही है...</translation> <translation id="3088325635286126843">&नाम बदलें...</translation> -<translation id="3089064280130434511">साइटों को खुलने और विंडो को खोलकर आपकी स्क्रीन पर लगाने से रोकें</translation> <translation id="3089137131053189723">खोज हटाई गई</translation> <translation id="3090589793601454425">Google खाते में न ले जाएं</translation> <translation id="3090819949319990166">बाहरी crx फ़ाइल की <ph name="TEMP_CRX_FILE" /> में कॉपी नहीं बनाई जा सकती.</translation> @@ -3716,6 +3716,7 @@ <translation id="4813136279048157860">मेरी इमेज</translation> <translation id="4813512666221746211">नेटवर्क गड़बड़ी</translation> <translation id="4814378367953456825">इस फ़िंगरप्रिंट के लिए कोई नाम डालें</translation> +<translation id="481574578487123132">लिंक किए गए डिवाइस</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, जानकारी</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 बुकमार्क मिटाया गया}one{{COUNT} बुकमार्क मिटाया गया}other{{COUNT} बुकमार्क मिटाए गए}}</translation> <translation id="4819607494758673676">Google Assistant की सूचनाएं</translation> @@ -3730,7 +3731,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> वेंडर के यूएसबी डिवाइस</translation> <translation id="4829768588131278040">पिन सेट करें</translation> <translation id="4830026649400230050">शर्तों को पूरा करने वाले सभी डाउनलोड, आपके संगठन के <ph name="WEB_DRIVE" /> खाते में सेव कर दिए गए हैं.</translation> -<translation id="4830121310592638841">जब कोई साइट, विंडो को खोलकर आपकी स्क्रीन पर लगाना चाहे, तो इसके लिए पूछें</translation> <translation id="4830502475412647084">OS अपडेट इंस्टॉल किया जा रहा है</translation> <translation id="4830573902900904548">आपका <ph name="DEVICE_TYPE" /> <ph name="NETWORK_NAME" /> का उपयोग करके इंटरनेट से कनेक्ट करने में असमर्थ है. कृपया कोई अन्य नेटवर्क चुनें. <ph name="LEARN_MORE_LINK_START" />और जानें<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">प्रिंट सर्वर पर एक प्रिंटर मिला</translation> @@ -4431,6 +4431,7 @@ <translation id="5563234215388768762">Google पर खोज करें या कोई यूआरएल टाइप करें</translation> <translation id="5565735124758917034">सक्रिय</translation> <translation id="5568069709869097550">साइन इन नहीं किया जा सकता</translation> +<translation id="5571066253365925590">ब्लूटूथ सक्षम किया गया</translation> <translation id="5571092938913434726">ग्लोबल मीडिया कंट्रोल</translation> <translation id="5571832155627049070">अपनी प्रोफ़ाइल को पसंद के मुताबिक बनाएं</translation> <translation id="5572851009514199876">कृपया Chrome शुरू करके उसमें साइन इन करें ताकि Chrome देख सके कि क्या आपके पास यह साइट एक्सेस करने की अनुमति है.</translation> @@ -4828,6 +4829,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को यह ऐप्लिकेशन हटाने के लिए कहें.}one{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को ये ऐप्लिकेशन हटाने के लिए कहें.}other{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को ये ऐप्लिकेशन हटाने के लिए कहें.}}</translation> <translation id="5997337190805127100">साइट ऐक्सेस के बारे में ज़्यादा जानें</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' के लिए <ph name="RESULT_COUNT" /> नतीजे मिले हैं</translation> +<translation id="6002122790816966947">आपके डिवाइस</translation> <translation id="6002210667729577411">ग्रुप को नई विंडो पर ले जाएं</translation> <translation id="6002452033851752583">आपके Google खाते से पासवर्ड को मिटा दिया गया है</translation> <translation id="6002458620803359783">पसंदीदा आवाज़ें</translation> @@ -5634,7 +5636,6 @@ <translation id="6833996806551876956">निजता सैंडबॉक्स ट्रायल</translation> <translation id="6834652994408928492">सूर्यास्त होने पर, 'गहरे रंग वाला मोड' अपने-आप चालू हो जाएगा</translation> <translation id="6835762382653651563">अपने <ph name="DEVICE_TYPE" /> को अपडेट करने के लिए कृपया इंटरनेट से कनेक्ट करें.</translation> -<translation id="6838034009068684089">जब कोई साइट, विंडो को खोलकर आपकी स्क्रीन पर लगाना चाहे, तो इसके लिए पूछें (सुझाया गया)</translation> <translation id="6839225236531462745">प्रमाणपत्र हटाने की गड़बड़ी</translation> <translation id="6839916869147598086">साइन इन बदल गया है</translation> <translation id="6840155290835956714">भेजने से पहले पूछें</translation> @@ -6545,7 +6546,6 @@ <translation id="7775694664330414886">टैब को बिना नाम वाले ग्रुप में ले जाया गया - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">जब तक आप इस साइट के लिए सभी टैब बंद नहीं कर देते, <ph name="ORIGIN" /> तब तक फाइलों को <ph name="FOLDERNAME" /> में देख पाएगी</translation> <translation id="7776701556330691704">कोई आवाज़ नहीं मिली</translation> -<translation id="7777284276915203144">Google पासवर्ड मैनेजर में सेव होने से पहले, पासवर्ड आपके डिवाइस पर एन्क्रिप्ट (सुरक्षित) कर लिए जाते हैं</translation> <translation id="7781335840981796660">सभी 'उपयोगकर्ता खातों' और 'स्थानीय डेटा' को हटा दिया जाएगा.</translation> <translation id="7782102568078991263">Google की ओर से कोई और सुझाव नहीं</translation> <translation id="7782717250816686129">लॉगिन स्क्रीन पर लगातार दिख रहे डेटा को स्टोर करें और सेशन में क्रेडेंशियल डालें.</translation> @@ -7197,7 +7197,6 @@ <translation id="8428634594422941299">समझ लिया</translation> <translation id="84297032718407999">आपको <ph name="LOGOUT_TIME_LEFT" /> में साइन आउट कर दिया जाएगा</translation> <translation id="8431190899827883166">टैप दिखाएं</translation> -<translation id="8431730749911729314">Google पासवर्ड मैनेजर में सेव होने से पहले, पासवर्ड अपने डिवाइस पर एन्क्रिप्ट (सुरक्षित) करें</translation> <translation id="8434480141477525001">NaCl डीबग पोर्ट</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> के ज़रिए अपनी पहचान की पुष्टि करें</translation> <translation id="8437209419043462667">यूएस</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 88d9e88..553f938 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1262,6 +1262,7 @@ Pomoć za rješavanje problema s emitiranjem možete pronaći u <ph name="BEGIN_LINK" />centru za pomoć<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Prikaži upit kada web-lokacija želi pristupiti Bluetooth uređajima (preporučeno)</translation> <translation id="2266957463645820432">IPP putem USB-a (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth onemogućen</translation> <translation id="2270450558902169558">razmjenjivati podatke s bilo kojim uređajem na domeni <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Instalacijom se <ph name="BEGIN_BOLD" />briše cijeli tvrdi disk<ph name="END_BOLD" />. Ne zaboravite sigurnosno kopirati podatke.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Nakon što započne, instalacija se ne može otkazati.<ph name="END_PARAGRAPH2" /></translation> @@ -2086,7 +2087,6 @@ <translation id="3088052000289932193">Web-lokacija upotrebljava MIDI</translation> <translation id="3088128611727407543">Priprema profila aplikacije...</translation> <translation id="3088325635286126843">&Preimenuj...</translation> -<translation id="3089064280130434511">Onemogući web-lokacijama otvaranje i postavljanje prozora na zaslonu</translation> <translation id="3089137131053189723">Pretraživanje izbrisano</translation> <translation id="3090589793601454425">Ne premještaj</translation> <translation id="3090819949319990166">Nije moguće kopiranje crx datoteke u <ph name="TEMP_CRX_FILE" />.</translation> @@ -3704,6 +3704,7 @@ <translation id="4813136279048157860">Moje slike</translation> <translation id="4813512666221746211">Pogreška mreže</translation> <translation id="4814378367953456825">Unesite naziv za ovaj otisak prsta</translation> +<translation id="481574578487123132">Povezani uređaji</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, pojedinosti</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Izbrisana je jedna oznaka}one{Izbrisana je {COUNT} oznaka}few{Izbrisane su {COUNT} oznake}other{Izbrisano je {COUNT} oznaka}}</translation> <translation id="4819607494758673676">Obavijesti Google asistenta</translation> @@ -3718,7 +3719,6 @@ <translation id="482952334869563894">USB uređaji dobavljača <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Postavi PIN</translation> <translation id="4830026649400230050">Sva preuzimanja koja ispunjavaju uvjete usmjeravaju se na račun <ph name="WEB_DRIVE" /> vaše organizacije.</translation> -<translation id="4830121310592638841">Prikaži upit kad web-lokacija želi otvarati i postavljati prozore na zaslonima</translation> <translation id="4830502475412647084">Instaliranje ažuriranja OS-a</translation> <translation id="4830573902900904548">Vaš uređaj <ph name="DEVICE_TYPE" /> ne može se povezati s internetom putem mreže <ph name="NETWORK_NAME" />. Odaberite drugu mrežu. <ph name="LEARN_MORE_LINK_START" />Saznajte više<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Pronađen je jedan pisač s poslužitelja za ispis</translation> @@ -4419,6 +4419,7 @@ <translation id="5563234215388768762">Pretražite Google ili unesite URL</translation> <translation id="5565735124758917034">Aktivno</translation> <translation id="5568069709869097550">Ne mogu se prijaviti</translation> +<translation id="5571066253365925590">Bluetooth omogućen</translation> <translation id="5571092938913434726">Globalne medijske kontrole</translation> <translation id="5571832155627049070">Prilagodite svoj profil</translation> <translation id="5572851009514199876">Pokrenite Chrome i prijavite se na njega kako bi mogao provjeriti imate li dopuštenje za pristup toj web-lokaciji.</translation> @@ -4816,6 +4817,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Da biste mogli i dalje pregledavati web, zamolite administratora da ukloni tu aplikaciju.}one{Da biste mogli i dalje pregledavati web, zamolite administratora da ukloni te aplikacije.}few{Da biste mogli i dalje pregledavati web, zamolite administratora da ukloni te aplikacije.}other{Da biste mogli i dalje pregledavati web, zamolite administratora da ukloni te aplikacije.}}</translation> <translation id="5997337190805127100">Saznajte više o pristupu web-lokacijama</translation> <translation id="6000758707621254961">Rezultata za upit "<ph name="SEARCH_TEXT" />" ima <ph name="RESULT_COUNT" /></translation> +<translation id="6002122790816966947">Vaši uređaji</translation> <translation id="6002210667729577411">Premjesti grupu u novi prozor</translation> <translation id="6002452033851752583">Zaporka je izbrisana s vašeg Google računa</translation> <translation id="6002458620803359783">Preferirani glasovi</translation> @@ -5622,7 +5624,6 @@ <translation id="6833996806551876956">Proba za Privacy Sandbox</translation> <translation id="6834652994408928492">Tamni način rada uključit će se automatski kad sunce zađe</translation> <translation id="6835762382653651563">Povežite se s internetom da biste ažurirali svoj uređaj <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Prikaži upit kad web-lokacija želi otvarati i postavljati prozore na zaslonima (preporučeno)</translation> <translation id="6839225236531462745">Pogreška brisanja certifikata</translation> <translation id="6839916869147598086">Prijava je promijenjena</translation> <translation id="6840155290835956714">Pitaj prije slanja</translation> @@ -6533,7 +6534,6 @@ <translation id="7775694664330414886">Kartica je premještena u grupu bez naziva – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> moći će pregledavati datoteke u mapi <ph name="FOLDERNAME" /> dok ne zatvorite sve kartice za ovu web-lokaciju</translation> <translation id="7776701556330691704">Nije pronađen nijedan glas</translation> -<translation id="7777284276915203144">Vaše se zaporke šifriraju na uređaju prije spremanja na Google upravitelj zaporki</translation> <translation id="7781335840981796660">Uklonit će se svi korisnički računi i lokalni podaci.</translation> <translation id="7782102568078991263">Nema više prijedloga iz Googlea</translation> <translation id="7782717250816686129">Pohrani trajne podatke na zaslonu za prijavu, a vjerodajnice umetni u sesiju.</translation> @@ -7185,7 +7185,6 @@ <translation id="8428634594422941299">Shvaćam</translation> <translation id="84297032718407999">Odjavit ćete se za <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Prikaži dodire</translation> -<translation id="8431730749911729314">Šifrirajte zaporke na uređaju prije spremanja na Google upravitelj zaporki</translation> <translation id="8434480141477525001">Priključak za otklanjanje pogrešaka lokalnog klijenta</translation> <translation id="8435395510592618362">Potvrdite svoj identitet pomoću aplikacije <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">američka</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 0d3e6888..34ae54a 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1273,6 +1273,7 @@ súgót<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Kérdezzen rá, ha valamelyik webhely hozzá szeretne férni a Bluetooth-eszközökhöz (ajánlott)</translation> <translation id="2266957463645820432">IPP over USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth letiltva</translation> <translation id="2270450558902169558">Adatok cseréje bármilyen eszközzel a következő domainben: <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />A telepítéssel <ph name="BEGIN_BOLD" />a merevlemez teljes tartalma törlődik<ph name="END_BOLD" />. Gondoskodjon adatainak biztonsági mentéséről.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Miután kezdetét vette a telepítés, már nem lehet megszakítani.<ph name="END_PARAGRAPH2" /></translation> @@ -2096,7 +2097,6 @@ <translation id="3088052000289932193">A webhely MIDI-eszközt használ</translation> <translation id="3088128611727407543">Alkalmazásprofil előkészítése…</translation> <translation id="3088325635286126843">Át&nevezés...</translation> -<translation id="3089064280130434511">Ablakok megnyitásának és képernyőkön való elhelyezésének letiltása a webhelyek számára</translation> <translation id="3089137131053189723">Keresés törölve</translation> <translation id="3090589793601454425">Ne helyezze át</translation> <translation id="3090819949319990166">A külső crx-fájl nem másolható a következő helyre: <ph name="TEMP_CRX_FILE" />.</translation> @@ -3224,6 +3224,7 @@ <translation id="4275830172053184480">Indítsa újra az eszközt</translation> <translation id="4278390842282768270">Engedélyezve</translation> <translation id="4279129444466079448">Legfeljebb <ph name="PROFILE_LIMIT" /> eSIM-profilt telepíthet erre az eszközre. Új hozzáadásához előbb töröljön egy már meglévő profilt.</translation> +<translation id="4280325816108262082">Az eszköz automatikusan megszakítja a kapcsolatot, amikor kikapcsolásra kerül, vagy nincs használatban</translation> <translation id="4281844954008187215">Általános Szerződési Feltételek</translation> <translation id="4282196459431406533">A Smart Lock be van kapcsolva</translation> <translation id="4284755288573763878">Kikapcsolja a fokozott védelmet?</translation> @@ -3713,6 +3714,7 @@ <translation id="4813136279048157860">Saját képek</translation> <translation id="4813512666221746211">Hálózati hiba</translation> <translation id="4814378367953456825">Nevezze el ezt az ujjlenyomatot</translation> +<translation id="481574578487123132">Összekapcsolt eszközök</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, részletek</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 könyvjelző törölve}other{{COUNT} könyvjelző törölve}}</translation> <translation id="4819607494758673676">Google Segéd-értesítések</translation> @@ -3727,7 +3729,6 @@ <translation id="482952334869563894">USB-eszközök a következő gyártótól: <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">PIN-kód beállítása</translation> <translation id="4830026649400230050">Az összes vonatkozó letöltés szervezete <ph name="WEB_DRIVE" />-fiókjába kerül.</translation> -<translation id="4830121310592638841">Kérdezzen rá, ha valamelyik webhely ablakokat akar megnyitni és képernyőkön elhelyezni</translation> <translation id="4830502475412647084">Az operációs rendszer frissítésének telepítése folyamatban</translation> <translation id="4830573902900904548">A(z) <ph name="DEVICE_TYPE" /> nem tud csatlakozni az internethez a következő hálózaton: <ph name="NETWORK_NAME" />. Kérjük, válasszon másik hálózatot. <ph name="LEARN_MORE_LINK_START" />További információ<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">1 nyomtató található a nyomtatószerveren</translation> @@ -4345,6 +4346,7 @@ <translation id="5490721031479690399">Bluetooth-eszköz leválasztása</translation> <translation id="5490798133083738649">Mikrofon-hozzáférés engedélyezése a Linux számára</translation> <translation id="549211519852037402">Bézs-fehér</translation> +<translation id="5492637351392383067">Eszközalapú titkosítás</translation> <translation id="5493792505296048976">képernyő bekapcsolva</translation> <translation id="5494016731375030300">Legutóbb bezárt lapok</translation> <translation id="5494362494988149300">Megnyitás, amikor &kész</translation> @@ -4428,6 +4430,7 @@ <translation id="5563234215388768762">Keressen a Google-on, vagy írjon be egy URL-t</translation> <translation id="5565735124758917034">Aktív</translation> <translation id="5568069709869097550">Nem sikerült a bejelentkezés</translation> +<translation id="5571066253365925590">Bluetooth engedélyezve</translation> <translation id="5571092938913434726">Globális médiavezérlők</translation> <translation id="5571832155627049070">Profil személyre szabása</translation> <translation id="5572851009514199876">Indítsa el a Chrome böngészőt és jelentkezzen be, hogy a Chrome ellenőrizni tudja, engedélyezték-e a hozzáférést ehhez a webhelyhez.</translation> @@ -4826,6 +4829,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Annak érdekében, hogy biztosan tudjon böngészni az interneten, kérje meg rendszergazdáját az alkalmazás eltávolítására.}other{Annak érdekében, hogy biztosan tudjon böngészni az interneten, kérje meg rendszergazdáját az alkalmazások eltávolítására.}}</translation> <translation id="5997337190805127100">További információ a webhelyekhez való hozzáférésről</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> találat a következőre: <ph name="SEARCH_TEXT" /></translation> +<translation id="6002122790816966947">Saját eszközök</translation> <translation id="6002210667729577411">Csoport áthelyezése új ablakba</translation> <translation id="6002452033851752583">Jelszó törölve a Google-fiókjából</translation> <translation id="6002458620803359783">Előnyben részesített hangok</translation> @@ -5632,7 +5636,6 @@ <translation id="6833996806551876956">A Privacy Sandbox próbaidőszaka</translation> <translation id="6834652994408928492">A sötét mód automatikusan bekapcsol naplementekor</translation> <translation id="6835762382653651563">A(z) <ph name="DEVICE_TYPE" /> frissítése érdekében csatlakozzon az internethez.</translation> -<translation id="6838034009068684089">Kérdezzen rá, amikor a webhelyek ablakokat nyitnának meg és helyeznének el a képernyőn</translation> <translation id="6839225236531462745">Tanúsítványtörlési hiba</translation> <translation id="6839916869147598086">A bejelentkezési mód megváltozott</translation> <translation id="6840155290835956714">Kérdezzen rá küldés előtt</translation> @@ -7983,6 +7986,7 @@ <translation id="947667444780368238">A(z) <ph name="ORIGIN" /> nem nyithatja meg az ebben a mappában lévő fájlokat, mert rendszerfájlok találhatók benne.</translation> <translation id="950307215746360464">Beállítási útmutató</translation> <translation id="951991426597076286">Elutasítás</translation> +<translation id="952471655966876828">Az eszköz automatikusan csatlakozik, amikor bekapcsolásra kerül, vagy használatban van</translation> <translation id="953434574221655299">Tudhatják, hogy Ön mikor használja aktívan az eszközt</translation> <translation id="956500788634395331">Védelmet élvez a potenciálisan kártékony bővítményekkel szemben</translation> <translation id="957960681186851048">Ez a webhely megpróbált automatikusan letölteni több fájlt</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index bdea9ef..1e3ae3f 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -1261,6 +1261,7 @@ <translation id="2263679799334060788">Ձեր կարծիքը բարձր է գնահատվում և օգնում է մեզ բարելավել Google Cast-ը։ Հեռարձակման հետ կապված անսարքությունները վերացնելու համար անցեք <ph name="BEGIN_LINK" />օգնության կենտրոն<ph name="END_LINK" />։</translation> <translation id="22665427234727190">Հարցնել, երբ որևէ կայք ուզում է օգտագործել Bluetooth սարքեր (խորհուրդ է տրվում)</translation> <translation id="2266957463645820432">IPP` USB-ի միջոցով (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth-ն անջատված է</translation> <translation id="2270450558902169558">Տվյալներ փոխանակել ցանկացած սարքի հետ <ph name="DOMAIN" /> տիրույթում</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Տեղադրման արդյունքում<ph name="BEGIN_BOLD" /> կոշտ սկավառակում առկա բոլոր տվյալները կջնջվեն<ph name="END_BOLD" />։ Համոզվեք, որ ձեր տվյալները պահուստավորված են։<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Հենց որ տեղադրումը սկսվի, այն հնարավոր չի լինի չեղարկել։<ph name="END_PARAGRAPH2" /></translation> @@ -2084,7 +2085,6 @@ <translation id="3088052000289932193">Կայքը MIDI սարք է օգտագործում</translation> <translation id="3088128611727407543">Հավելվածի պրոֆիլը պատրաստվում է…</translation> <translation id="3088325635286126843">&Վերանվանել...</translation> -<translation id="3089064280130434511">Արգելել կայքերին բացել և տեղակայել պատուհաններ ձեր էկրաններին</translation> <translation id="3089137131053189723">Որոնման դաշտը մաքրվեց</translation> <translation id="3090589793601454425">Չտեղափոխել</translation> <translation id="3090819949319990166">Չհաջողվեց պատճենել արտաքին CRX ֆայլը <ph name="TEMP_CRX_FILE" />-ում:</translation> @@ -3213,6 +3213,7 @@ <translation id="4275830172053184480">Սարքի վերագործարկում:</translation> <translation id="4278390842282768270">Թույլատրված է</translation> <translation id="4279129444466079448">Դուք կարող եք մինչև <ph name="PROFILE_LIMIT" /> eSIM պրոֆիլ տեղադրել այս սարքում։ Եվս մեկն ավելացնելու համար նախ հեռացրեք առկա պրոֆիլը։</translation> +<translation id="4280325816108262082">Սարքի հետ կապն ավտոմատ կերպով կչեղարկվի, երբ այն անջատվի կամ չօգտագործվի</translation> <translation id="4281844954008187215">Օգտագործման պայմաններ</translation> <translation id="4282196459431406533">Smart Lock-ը միացված է</translation> <translation id="4284755288573763878">Անջատե՞լ բարելավված անվտանգությունը</translation> @@ -3701,6 +3702,7 @@ <translation id="4813136279048157860">Իմ պատկերները</translation> <translation id="4813512666221746211">Ցանցի սխալ</translation> <translation id="4814378367953456825">Անուն տվեք այս մատնահետքին</translation> +<translation id="481574578487123132">Կապված սարքեր</translation> <translation id="4816097470512964351"><ph name="DEVICE" />․ մանրամասներ</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 էջանիշ ջնջվեց}one{{COUNT} էջանիշ ջնջվեց}other{{COUNT} էջանիշ ջնջվեց}}</translation> <translation id="4819607494758673676">Google Օգնականի ծանուցումներ</translation> @@ -3715,7 +3717,6 @@ <translation id="482952334869563894">USB սարքեր <ph name="VENDOR_ID" /> մատակարարից</translation> <translation id="4829768588131278040">Ստեղծել PIN կոդ</translation> <translation id="4830026649400230050">Բոլոր ներբեռնումները տեղափոխվում են ձեր կազմակերպության <ph name="WEB_DRIVE" /> հաշիվ։</translation> -<translation id="4830121310592638841">Հարցնել, երբ կայքն ուզում է բացել և տեղակայել պատուհաններ ձեր էկրաններին</translation> <translation id="4830502475412647084">Օպերացիոն համակարգի թարմացման տեղադրում</translation> <translation id="4830573902900904548">Ձեր <ph name="DEVICE_TYPE" /> սարքը չի կարողանում կապակցվել համացանցին <ph name="NETWORK_NAME" />-ի միջոցով: Ընտրեք այլ ցանց: <ph name="LEARN_MORE_LINK_START" />Մանրամասն<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Տպման սերվերում գտնվել է 1 տպիչ։</translation> @@ -4335,6 +4336,7 @@ <translation id="5490721031479690399">Անջատել Bluetooth սարքը</translation> <translation id="5490798133083738649">Թույլատրեք Լինուքսին օգտագործել ձեր խոսափողը</translation> <translation id="549211519852037402">Բեժ և սպիտակ</translation> +<translation id="5492637351392383067">Գաղտնագրում սարքում</translation> <translation id="5493792505296048976">էկրանը միացված է</translation> <translation id="5494016731375030300">Վերջերս փակված ներդիրներ</translation> <translation id="5494362494988149300">Բացել &ավարտվելուն պես</translation> @@ -4418,6 +4420,7 @@ <translation id="5563234215388768762">Որոնեք Google-ում կամ մուտքագրեք URL</translation> <translation id="5565735124758917034">Ակտիվ է</translation> <translation id="5568069709869097550">Չհաջողվեց մուտք գործել</translation> +<translation id="5571066253365925590">Bluetooth-ը միացված է</translation> <translation id="5571092938913434726">Մեդիաֆայլերի կառավարման ընդհանուր տարրեր</translation> <translation id="5571832155627049070">Անհատականացրեք ձեր պրոֆիլը</translation> <translation id="5572851009514199876">Մուտք գործեք Chrome, որպեսզի վերջինս կարողանա ստուգել՝ արդյոք դուք այս կայքը բացելու թույլտվություն ունեք։</translation> @@ -4815,6 +4818,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Որպեսզի շարունակեք կայքեր այցելել, խնդրեք ադմինիստրատորին հեռացնել այս հավելվածը։}one{Որպեսզի շարունակեք կայքեր այցելել, խնդրեք ադմինիստրատորին հեռացնել այս հավելվածը։}other{Որպեսզի շարունակեք կայքեր այցելել, խնդրեք ադմինիստրատորին հեռացնել այս հավելվածները։}}</translation> <translation id="5997337190805127100">Մանրամասն կայքերի հասանելիության մասին</translation> <translation id="6000758707621254961">«<ph name="SEARCH_TEXT" />»-ի որոնման <ph name="RESULT_COUNT" /> արդյունք</translation> +<translation id="6002122790816966947">Ձեր սարքերը</translation> <translation id="6002210667729577411">Խումբը տեղափոխել նոր պատուհան</translation> <translation id="6002452033851752583">Գաղտնաբառը ջնջվեց ձեր Google հաշվից</translation> <translation id="6002458620803359783">Նախընտրելի ձայներ</translation> @@ -5621,7 +5625,6 @@ <translation id="6833996806551876956">Privacy Sandbox-ի փորձաշրջան</translation> <translation id="6834652994408928492">Մութն ընկնելուն պես մուգ ռեժիմը ավտոմատ կմիանա</translation> <translation id="6835762382653651563">Ձեր <ph name="DEVICE_TYPE" /> սարքը թարմացնելու համար կապակցվեք համացանցին:</translation> -<translation id="6838034009068684089">Հարցնել, երբ կայքն ուզում է բացել և տեղակայել պատուհաններ ձեր էկրաններին (խորհուրդ է տրվում)</translation> <translation id="6839225236531462745">Վկայագիրը ջնջելիս սխալ առաջացավ</translation> <translation id="6839916869147598086">Մուտքի էջը փոխվել է</translation> <translation id="6840155290835956714">Հարցնել՝ մինչ ուղարկելը</translation> @@ -7971,6 +7974,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> կայքը չի կարող բացել այս պանակը, քանի որ այն պարունակում է համակարգի ֆայլեր</translation> <translation id="950307215746360464">Կարգավորման ուղեցույց</translation> <translation id="951991426597076286">Մերժել</translation> +<translation id="952471655966876828">Սարքի հետ կապն ավտոմատ կերպով կվերականգնվի, երբ միացնեք կամ օգտագործեք այն</translation> <translation id="953434574221655299">Կայքեր, որոնց թույլատրված է տեղեկանալ, երբ դուք ակտիվորեն օգտագործում եք ձեր սարքը</translation> <translation id="956500788634395331">Դուք պաշտպանված եք վտանգավոր ընդլայնումներից</translation> <translation id="957960681186851048">Այս կայքը փորձում էր ավտոմատ մի քանի ֆայլ ներբեռնել</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index eb347de4..10968bb 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -1274,6 +1274,7 @@ pusat bantuan<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Tanyakan saat situs ingin mengakses perangkat Bluetooth (direkomendasikan)</translation> <translation id="2266957463645820432">IPP melalui USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth dinonaktifkan</translation> <translation id="2270450558902169558">Menukar data dengan perangkat apa pun dalam domain <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Penginstalan <ph name="BEGIN_BOLD" />akan menghapus seluruh data di hard drive<ph name="END_BOLD" />. Pastikan data Anda sudah dicadangkan.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Penginstalan tidak dapat dibatalkan setelah dimulai.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">Situs menggunakan MIDI</translation> <translation id="3088128611727407543">Menyiapkan profil aplikasi ...</translation> <translation id="3088325635286126843">&Ubah nama...</translation> -<translation id="3089064280130434511">Blokir situs agar tidak membuka dan menempatkan jendela di layar Anda</translation> <translation id="3089137131053189723">Penelusuran dihapus</translation> <translation id="3090589793601454425">Jangan pindahkan</translation> <translation id="3090819949319990166">Tidak dapat menyalin file crx eksternal ke <ph name="TEMP_CRX_FILE" />.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">Gambar Saya</translation> <translation id="4813512666221746211">Kesalahan jaringan</translation> <translation id="4814378367953456825">Masukkan nama untuk sidik jari ini</translation> +<translation id="481574578487123132">Perangkat tertaut</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Detail</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 bookmark dihapus}other{{COUNT} bookmark dihapus}}</translation> <translation id="4819607494758673676">Notifikasi Asisten Google</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">Perangkat USB dari vendor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Siapkan PIN</translation> <translation id="4830026649400230050">Semua download yang valid dirutekan ke akun <ph name="WEB_DRIVE" /> organisasi.</translation> -<translation id="4830121310592638841">Tanyakan saat situs ingin membuka dan menempatkan jendela di layar Anda</translation> <translation id="4830502475412647084">Menginstal update OS</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> Anda tidak dapat menyambung ke internet menggunakan <ph name="NETWORK_NAME" />. Pilih jaringan lainnya. <ph name="LEARN_MORE_LINK_START" />Pelajari lebih lanjut<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Menemukan 1 printer dari server cetak</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Telusuri Google atau ketik URL</translation> <translation id="5565735124758917034">Aktif</translation> <translation id="5568069709869097550">Tidak dapat sign in</translation> +<translation id="5571066253365925590">Bluetooth diaktifkan</translation> <translation id="5571092938913434726">Global Media Controls</translation> <translation id="5571832155627049070">Sesuaikan profil Anda</translation> <translation id="5572851009514199876">Mulai dan login ke Chrome agar Chrome dapat memeriksa apakah Anda diizinkan untuk mengakses situs ini atau tidak.</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Untuk memastikan bahwa Anda tetap dapat mengakses web, minta administrator untuk menghapus aplikasi ini.}other{Untuk memastikan bahwa Anda tetap dapat mengakses web, minta administrator untuk menghapus aplikasi berikut.}}</translation> <translation id="5997337190805127100">Pelajari Akses Situs Lebih Lanjut</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> hasil untuk '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">Perangkat Anda</translation> <translation id="6002210667729577411">Pindahkan grup ke jendela baru</translation> <translation id="6002452033851752583">Sandi dihapus dari Akun Google Anda</translation> <translation id="6002458620803359783">Suara Pilihan</translation> @@ -5635,7 +5637,6 @@ <translation id="6833996806551876956">Uji coba Privacy Sandbox</translation> <translation id="6834652994408928492">Mode gelap akan otomatis diaktifkan saat matahari terbenam</translation> <translation id="6835762382653651563">Sambungkan ke internet untuk memperbarui <ph name="DEVICE_TYPE" /> Anda.</translation> -<translation id="6838034009068684089">Tanyakan saat situs ingin membuka dan menempatkan jendela di layar Anda (direkomendasikan)</translation> <translation id="6839225236531462745">Kesalahan Penghapusan Sertifikat</translation> <translation id="6839916869147598086">Login telah berubah</translation> <translation id="6840155290835956714">Tanyakan sebelum mengirim</translation> @@ -6546,7 +6547,6 @@ <translation id="7775694664330414886">Tab dipindahkan ke grup tanpa nama - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> akan dapat melihat file di <ph name="FOLDERNAME" /> hingga Anda menutup semua tab untuk situs ini</translation> <translation id="7776701556330691704">Suara tidak ditemukan</translation> -<translation id="7777284276915203144">Sandi Anda dienkripsi di perangkat sebelum disimpan ke Pengelola Sandi Google</translation> <translation id="7781335840981796660">Semua akun dan data lokal pengguna akan dihapus.</translation> <translation id="7782102568078991263">Tidak ada lagi saran dari Google</translation> <translation id="7782717250816686129">Simpan data persisten di layar login dan masukkan kredensial ke sesi.</translation> @@ -7199,7 +7199,6 @@ <translation id="8428634594422941299">Mengerti</translation> <translation id="84297032718407999">Anda akan logout dalam <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Show taps</translation> -<translation id="8431730749911729314">Enkripsi sandi di perangkat Anda sebelum disimpan ke Pengelola Sandi Google</translation> <translation id="8434480141477525001">Port Debug NaCl</translation> <translation id="8435395510592618362">Verifikasi identitas Anda dengan <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">AS</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index 357f71e..5240ca8 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -1275,6 +1275,7 @@ hjálparmiðstöðina<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Spyrja þegar vefsvæði vill fá aðgang að Bluetooth-tækjum (ráðlagt)</translation> <translation id="2266957463645820432">IPP yfir USB (IPPUSB)</translation> +<translation id="2268130516524549846">Slökkt á Bluetooth</translation> <translation id="2270450558902169558">Skiptast á gögnum við hvaða tæki sem er á léninu <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Við uppsetninguna <ph name="BEGIN_BOLD" />verður öllu eytt af harða diskinum<ph name="END_BOLD" />. Gakktu úr skugga um að taka afrit af gögnunum.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Ekki er hægt að hætta við uppsetninguna eftir að hún hefst.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">Vefsvæði notar MIDI-tæki</translation> <translation id="3088128611727407543">Undirbýr forritaprófíl...</translation> <translation id="3088325635286126843">Endu&rnefna...</translation> -<translation id="3089064280130434511">Loka á að vefsvæði geti opnað og birt glugga á skjánum</translation> <translation id="3089137131053189723">Leit hreinsuð</translation> <translation id="3090589793601454425">Ekki flytja</translation> <translation id="3090819949319990166">Ekki er hægt að afrita ytri crx-skrá í <ph name="TEMP_CRX_FILE" />.</translation> @@ -3227,6 +3227,7 @@ <translation id="4275830172053184480">Endurræstu tækið</translation> <translation id="4278390842282768270">Leyft</translation> <translation id="4279129444466079448">Þú getur sett upp allt að <ph name="PROFILE_LIMIT" /> eSIM-prófíla í þessu tæki. Þú þarft að fjarlægja fyrirliggjandi prófíl til að geta bætt nýjum við.</translation> +<translation id="4280325816108262082">Tækið aftengist sjálfkrafa þegar slökkt er á því eða það er ekki í notkun</translation> <translation id="4281844954008187215">Þjónustuskilmálar</translation> <translation id="4282196459431406533">Kveikt er á Smart Lock</translation> <translation id="4284755288573763878">Slökkva á auknu öryggi?</translation> @@ -3716,6 +3717,7 @@ <translation id="4813136279048157860">Myndirnar mínar</translation> <translation id="4813512666221746211">Netvilla</translation> <translation id="4814378367953456825">Veldu fingrafarinu heiti</translation> +<translation id="481574578487123132">Tengd tæki</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, upplýsingar</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 bókamerki eytt}one{{COUNT} bókamerki eytt}other{{COUNT} bókamerkjum eytt}}</translation> <translation id="4819607494758673676">Tilkynningar Google hjálpara</translation> @@ -3730,7 +3732,6 @@ <translation id="482952334869563894">USB-tæki frá seljandanum <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Setja upp PIN-númer</translation> <translation id="4830026649400230050">Allt gjaldgengt niðurhal er áframsent á <ph name="WEB_DRIVE" /> reikning fyrirtækisins þíns.</translation> -<translation id="4830121310592638841">Spyrja þegar vefsvæði vill opna og birta glugga á skjánum</translation> <translation id="4830502475412647084">Setur upp stýrikerfisuppfærslu</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> getur ekki tengst netinu gegnum <ph name="NETWORK_NAME" />. Notaðu annað net. <ph name="LEARN_MORE_LINK_START" />Frekari upplýsingar<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Einn prentari fannst á prentþjóninum</translation> @@ -4347,6 +4348,7 @@ <translation id="5490721031479690399">Aftengja Bluetooth-tæki</translation> <translation id="5490798133083738649">Veittu Linux aðgang að hljóðnemanum</translation> <translation id="549211519852037402">Drapplitaður og hvítur</translation> +<translation id="5492637351392383067">Dulkóðun í tækinu</translation> <translation id="5493792505296048976">kveikt á skjá</translation> <translation id="5494016731375030300">Flipar sem nýlega var lokað</translation> <translation id="5494362494988149300">Opna að þessu loknu</translation> @@ -4430,6 +4432,7 @@ <translation id="5563234215388768762">Leitaðu á Google eða sláðu inn vefslóð</translation> <translation id="5565735124758917034">Virkt</translation> <translation id="5568069709869097550">Innskráning mistókst</translation> +<translation id="5571066253365925590">Kveikt á Bluetooth</translation> <translation id="5571092938913434726">Altækar efnisstýringar</translation> <translation id="5571832155627049070">Útbúðu prófílinn þinn</translation> <translation id="5572851009514199876">Byrjaðu á að skrá þig inn á Chrome svo Chrome geti athugað hvort þú hafir leyfi til að skoða þetta vefsvæði.</translation> @@ -4827,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Til að tryggja að þú getir haldið áfram að nota vefinn skaltu biðja stjórnanda um að fjarlægja þetta forrit.}one{Til að tryggja að þú getir haldið áfram að nota vefinn skaltu biðja stjórnanda um að fjarlægja þessi forrit.}other{Til að tryggja að þú getir haldið áfram að nota vefinn skaltu biðja stjórnanda um að fjarlægja þessi forrit.}}</translation> <translation id="5997337190805127100">Frekari upplýsingar um aðgang að vefsvæðum</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> niðurstöður fyrir „<ph name="SEARCH_TEXT" />“</translation> +<translation id="6002122790816966947">Tækin þín</translation> <translation id="6002210667729577411">Færa hóp í nýjan glugga</translation> <translation id="6002452033851752583">Aðgangsorði eytt af Google reikningnum þínum</translation> <translation id="6002458620803359783">Valdar raddir</translation> @@ -5633,7 +5637,6 @@ <translation id="6833996806551876956">Prufuútgáfa persónuverndarafmörkunar</translation> <translation id="6834652994408928492">Sjálfkrafa kviknar á dökkri stillingu við sólsetur</translation> <translation id="6835762382653651563">Tengstu internetinu til að uppfæra <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Spyrja þegar vefsvæði vill opna og birta glugga á skjánum (ráðlagt)</translation> <translation id="6839225236531462745">Villa við að eyða vottorði</translation> <translation id="6839916869147598086">Innskráning hefur breyst</translation> <translation id="6840155290835956714">Spyrja fyrir sendingu</translation> @@ -7985,6 +7988,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> getur ekki opnað skrár í þessari möppu vegna þess að hún inniheldur kerfisskrár</translation> <translation id="950307215746360464">Uppsetningarleiðbeiningar</translation> <translation id="951991426597076286">Hafna</translation> +<translation id="952471655966876828">Tækið tengist sjálfkrafa þegar kveikt er á því og verið er að nota það</translation> <translation id="953434574221655299">Mega vita hvenær þú notar tækið þitt</translation> <translation id="956500788634395331">Tækið er varið gegn viðbótum sem gætu verið hættulegar</translation> <translation id="957960681186851048">Þetta vefsvæði reyndi að sækja margar skrár sjálfkrafa</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index f825958f..a390656d 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -1260,6 +1260,7 @@ <translation id="2263679799334060788">Il tuo feedback è molto importante perché ci consente di migliorare Google Cast. Se serve aiuto per la risoluzione di problemi relativi a Google Cast, visita il <ph name="BEGIN_LINK" />Centro assistenza<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Chiedi conferma quando un sito vuole accedere ai dispositivi Bluetooth (opzione consigliata)</translation> <translation id="2266957463645820432">IPP over USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth disattivato</translation> <translation id="2270450558902169558">Scambiare dati con qualsiasi dispositivo nel dominio <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />L'installazione <ph name="BEGIN_BOLD" />comporterà il reset di tutto il disco rigido<ph name="END_BOLD" />. Assicurati di aver eseguito il backup dei tuoi dati.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Non è possibile annullare l'installazione dopo averla avviata.<ph name="END_PARAGRAPH2" /></translation> @@ -2084,7 +2085,6 @@ <translation id="3088052000289932193">Il sito usa un dispositivo MIDI</translation> <translation id="3088128611727407543">Preparazione del profilo dell'app…</translation> <translation id="3088325635286126843">&Rinomina...</translation> -<translation id="3089064280130434511">Impedisci ai siti di aprire e posizionare finestre sugli schermi</translation> <translation id="3089137131053189723">Ricerca cancellata</translation> <translation id="3090589793601454425">Non spostare</translation> <translation id="3090819949319990166">Impossibile copiare il file crx esterno su <ph name="TEMP_CRX_FILE" />.</translation> @@ -3702,6 +3702,7 @@ <translation id="4813136279048157860">Le mie immagini</translation> <translation id="4813512666221746211">Errore di rete</translation> <translation id="4814378367953456825">Inserisci un nome per questa impronta</translation> +<translation id="481574578487123132">Dispositivi collegati</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, dettagli</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 preferito eliminato}one{{COUNT} preferiti eliminati}other{{COUNT} preferiti eliminati}}</translation> <translation id="4819607494758673676">Notifiche dell'Assistente Google</translation> @@ -3716,7 +3717,6 @@ <translation id="482952334869563894">Dispositivi USB del fornitore <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Imposta il codice PIN</translation> <translation id="4830026649400230050">Tutti i download idonei vengono indirizzati all'account <ph name="WEB_DRIVE" /> della tua organizzazione.</translation> -<translation id="4830121310592638841">Chiedi conferma quando un sito vuole aprire e posizionare finestre sugli schermi</translation> <translation id="4830502475412647084">Installazione dell'aggiornamento del sistema operativo in corso</translation> <translation id="4830573902900904548">Il <ph name="DEVICE_TYPE" /> non è in grado di connettersi a Internet utilizzando <ph name="NETWORK_NAME" />. Scegli un'altra rete. <ph name="LEARN_MORE_LINK_START" />Ulteriori informazioni<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">1 stampante trovata sul server di stampa</translation> @@ -4417,6 +4417,7 @@ <translation id="5563234215388768762">Cerca con Google o digita un URL</translation> <translation id="5565735124758917034">Attivo</translation> <translation id="5568069709869097550">Non riesco a effettuare l'accesso</translation> +<translation id="5571066253365925590">Bluetooth attivo</translation> <translation id="5571092938913434726">Global Media Controls</translation> <translation id="5571832155627049070">Personalizza il tuo profilo</translation> <translation id="5572851009514199876">Accedi a Chrome per consentire al browser di verificare che tu sia autorizzato ad accedere a questo sito.</translation> @@ -4814,6 +4815,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Per assicurarti di poter continuare a navigare sul Web, chiedi al tuo amministratore di rimuovere questa applicazione.}one{To ensure that you can keep browsing the web, ask your administrator to remove these applications.}other{Per assicurarti di poter continuare a navigare sul Web, chiedi al tuo amministratore di rimuovere queste applicazioni.}}</translation> <translation id="5997337190805127100">Ulteriori informazioni sull'accesso ai siti</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> risultati per "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">I tuoi dispositivi</translation> <translation id="6002210667729577411">Sposta gruppo in una nuova finestra</translation> <translation id="6002452033851752583">Password eliminata dal tuo Account Google</translation> <translation id="6002458620803359783">Voci preferite</translation> @@ -5620,7 +5622,6 @@ <translation id="6833996806551876956">Prova di Privacy Sandbox</translation> <translation id="6834652994408928492">La modalità Buio verrà attivata automaticamente al tramonto</translation> <translation id="6835762382653651563">Connettiti a Internet per aggiornare il tuo <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Chiedi conferma quando un sito vuole aprire e posizionare finestre sugli schermi (opzione consigliata)</translation> <translation id="6839225236531462745">Errore di eliminazione del certificato</translation> <translation id="6839916869147598086">L'accesso è stato modificato</translation> <translation id="6840155290835956714">Chiedi prima di inviare</translation> @@ -6531,7 +6532,6 @@ <translation id="7775694664330414886">Scheda spostata in un gruppo senza nome - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> potrà visualizzare i file nella cartella <ph name="FOLDERNAME" /> fino alla chiusura di tutte le schede di questo sito</translation> <translation id="7776701556330691704">Nessuna voce trovata</translation> -<translation id="7777284276915203144">Le tue password vengono criptate sul dispositivo prima di essere salvate in Gestore delle password di Google</translation> <translation id="7781335840981796660">Tutti gli account utente e i dati locali verranno rimossi.</translation> <translation id="7782102568078991263">Nessun altro suggerimento da Google</translation> <translation id="7782717250816686129">Archivia i dati persistenti nella schermata di accesso e inserisci le credenziali nella sessione.</translation> @@ -7184,7 +7184,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Verrai disconnesso tra <ph name="LOGOUT_TIME_LEFT" />.</translation> <translation id="8431190899827883166">Mostra tocchi</translation> -<translation id="8431730749911729314">Cripta le password sul dispositivo prima che vengano salvate in Gestore delle password di Google</translation> <translation id="8434480141477525001">Porta di debug NaCl</translation> <translation id="8435395510592618362">Verifica la tua identità con <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">USA</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 5147cd9..6642e63c 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1273,6 +1273,7 @@ במרכז העזרה<ph name="END_LINK" />.</translation> <translation id="22665427234727190">צריך לבקש ממני אישור כשאתר רוצה לגשת למכשירי Bluetooth (מומלץ)</translation> <translation id="2266957463645820432">IPP בחיבור USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth מושבת</translation> <translation id="2270450558902169558">החלפת נתונים עם כל מכשיר בדומיין <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ההתקנה <ph name="BEGIN_BOLD" />תוביל למחיקה של כל הכונן הקשיח<ph name="END_BOLD" />. חשוב להקפיד על גיבוי הנתונים שלך.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />אין אפשרות לבטל את ההתקנה לאחר שהחלה.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">האתר משתמש ב-MIDI</translation> <translation id="3088128611727407543">פרופיל האפליקציה בהכנה...</translation> <translation id="3088325635286126843">&שינוי שם...</translation> -<translation id="3089064280130434511">חסימת היכולת של אתרים לפתוח ולהציב חלונות במסכים שלך</translation> <translation id="3089137131053189723">החיפוש נוקה</translation> <translation id="3090589793601454425">אין להעביר</translation> <translation id="3090819949319990166">לא ניתן להעתיק קובץ crx חיצוני ל-<ph name="TEMP_CRX_FILE" />.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">התמונות שלי</translation> <translation id="4813512666221746211">שגיאת רשת</translation> <translation id="4814378367953456825">יש לתת שם לטביעת האצבע הזו</translation> +<translation id="481574578487123132">מכשירים מקושרים</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, פרטים</translation> <translation id="4816336393325437908">{COUNT,plural, =1{סימנייה אחת נמחקה}two{{COUNT} סימניות נמחקו}many{{COUNT} סימניות נמחקו}other{{COUNT} סימניות נמחקו}}</translation> <translation id="4819607494758673676">התראות של Google Assistant</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">התקני USB של הספק <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">הגדרת קוד אימות</translation> <translation id="4830026649400230050">כל ההורדות המתאימות ינותבו אל חשבון <ph name="WEB_DRIVE" /> של הארגון.</translation> -<translation id="4830121310592638841">תוצג שאלה כשאתר ירצה לפתוח ולהציב חלונות במסכים שלך</translation> <translation id="4830502475412647084">מתקין עדכון OS</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> לא מצליח להתחבר אל האינטרנט באמצעות <ph name="NETWORK_NAME" />. יש לבחור רשת אחרת. <ph name="LEARN_MORE_LINK_START" />למידע נוסף<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">נמצאה מדפסת אחת המשויכת לשרת ההדפסה</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">אפשר לחפש ב-Google או להקליד כתובת אתר</translation> <translation id="5565735124758917034">פעילה</translation> <translation id="5568069709869097550">אי אפשר להיכנס</translation> +<translation id="5571066253365925590">Bluetooth מופעל</translation> <translation id="5571092938913434726">פקדי מדיה גלובליים</translation> <translation id="5571832155627049070">התאמה אישית של הפרופיל</translation> <translation id="5572851009514199876">תחילה עליך להיכנס לחשבונך ב-Chrome כדי לאפשר ל-Chrome לבדוק אם יש לך הרשאה לגשת לאתר הזה.</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציה הזו.}two{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}many{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}other{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}}</translation> <translation id="5997337190805127100">מידע נוסף על גישה לאתרים</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> תוצאות בשביל '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">המכשירים שלך</translation> <translation id="6002210667729577411">העברת הקבוצה לחלון חדש</translation> <translation id="6002452033851752583">הסיסמה נמחקה מחשבון Google שלך</translation> <translation id="6002458620803359783">קולות מועדפים</translation> @@ -5635,7 +5637,6 @@ <translation id="6833996806551876956">תקופת ניסיון של ארגז חול של הגדרות פרטיות</translation> <translation id="6834652994408928492">מצב כהה יופעל באופן אוטומטי בשעת השקיעה</translation> <translation id="6835762382653651563">יש להתחבר לאינטרנט כדי לעדכן את ה-<ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">תוצג שאלה כשאתר ירצה לפתוח ולהציב חלונות במסכים שלך (מומלץ)</translation> <translation id="6839225236531462745">שגיאה של מחיקת אישור</translation> <translation id="6839916869147598086">תהליך הכניסה השתנה</translation> <translation id="6840155290835956714">יש לשאול לפני שליחה</translation> @@ -6546,7 +6547,6 @@ <translation id="7775694664330414886">הכרטיסייה הועברה לקבוצה ללא שם – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">לאתר <ph name="ORIGIN" /> תהיה הרשאה לראות את הקבצים בתיקייה <ph name="FOLDERNAME" /> עד שכל הכרטיסיות של האתר הזה ייסגרו</translation> <translation id="7776701556330691704">לא נמצאו קולות</translation> -<translation id="7777284276915203144">הסיסמאות שלך מוצפנות במכשיר לפני שהן נשמרות במנהל הסיסמאות של Google</translation> <translation id="7781335840981796660">תתבצע הסרה של כל חשבונות המשתמש והנתונים השמורים במכשיר.</translation> <translation id="7782102568078991263">אין יותר הצעות מ-Google</translation> <translation id="7782717250816686129">אחסון נתונים קבועים במסך ההתחברות והזנה אוטומטית של פרטי הכניסה בסשן.</translation> @@ -7200,7 +7200,6 @@ <translation id="8428634594422941299">הבנתי</translation> <translation id="84297032718407999">בעוד <ph name="LOGOUT_TIME_LEFT" /> תבוצע יציאה מהחשבון</translation> <translation id="8431190899827883166">הצגת הקשות</translation> -<translation id="8431730749911729314">הצפנת סיסמאות במכשיר לפני שהן נשמרות במנהל הסיסמאות של Google</translation> <translation id="8434480141477525001">יציאת ניפוי באגים של לקוח מקומי</translation> <translation id="8435395510592618362">אימות הזהות שלך באמצעות <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">ארה"ב</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 130e3e3..a5acfadb 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -1258,6 +1258,7 @@ <translation id="2263679799334060788">お送りいただいたフィードバックは、Google Cast の改善に役立てさせていただきます。Google Cast に関する問題のトラブルシューティングについては、<ph name="BEGIN_LINK" />ヘルプセンター<ph name="END_LINK" />をご覧ください。</translation> <translation id="22665427234727190">サイトから Bluetooth デバイスへのアクセスを求められたときに確認する(推奨)</translation> <translation id="2266957463645820432">IPP over USB(IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth オフ</translation> <translation id="2270450558902169558">ドメイン <ph name="DOMAIN" /> 内のデバイスとのデータ交換</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />インストールすると、<ph name="BEGIN_BOLD" />ハードドライブのデータはすべて消去されます<ph name="END_BOLD" />。データをバックアップしていることを確認してください。<ph name="END_PARAGRAPH1" /><ph name="BEGIN_PARAGRAPH2" />インストールを開始した後にキャンセルすることはできません。<ph name="END_PARAGRAPH2" /></translation> <translation id="2270627217422354837">ドメイン <ph name="DOMAINS" /> のデバイスとのデータ交換</translation> @@ -2080,7 +2081,6 @@ <translation id="3088052000289932193">サイトで MIDI が使用されています</translation> <translation id="3088128611727407543">アプリのプロファイルを準備しています...</translation> <translation id="3088325635286126843">名前を変更(&R)...</translation> -<translation id="3089064280130434511">サイトが画面上にウィンドウを開いて配置しないようブロックする</translation> <translation id="3089137131053189723">検索をクリアしました</translation> <translation id="3090589793601454425">移動しない</translation> <translation id="3090819949319990166">外部の crx ファイルは <ph name="TEMP_CRX_FILE" /> にコピーできません。</translation> @@ -3693,6 +3693,7 @@ <translation id="4813136279048157860">自分の画像</translation> <translation id="4813512666221746211">ネットワーク エラー</translation> <translation id="4814378367953456825">このフィンガープリントの名前を入力してください</translation> +<translation id="481574578487123132">リンクしたデバイス</translation> <translation id="4816097470512964351"><ph name="DEVICE" />、詳細</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 個のブックマークが削除されました}other{{COUNT} 個のブックマークが削除されました}}</translation> <translation id="4819607494758673676">Google アシスタントの通知</translation> @@ -3707,7 +3708,6 @@ <translation id="482952334869563894">ベンダー <ph name="VENDOR_ID" /> の USB デバイス</translation> <translation id="4829768588131278040">PIN を設定</translation> <translation id="4830026649400230050">対象となるすべてのダウンロードは、組織の <ph name="WEB_DRIVE" /> アカウントに送られます。</translation> -<translation id="4830121310592638841">サイトから画面上にウィンドウを開いて配置することを求められたときに確認する</translation> <translation id="4830502475412647084">OS アップデートのインストール中</translation> <translation id="4830573902900904548">お使いの <ph name="DEVICE_TYPE" /> から <ph name="NETWORK_NAME" /> を使用してインターネットに接続できません。別のネットワークを選択してください。<ph name="LEARN_MORE_LINK_START" />詳細<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">プリント サーバーで 1 個のプリンタが見つかりました</translation> @@ -4404,6 +4404,7 @@ <translation id="5563234215388768762">Google で検索または URL を入力</translation> <translation id="5565735124758917034">有効</translation> <translation id="5568069709869097550">ログインできない</translation> +<translation id="5571066253365925590">Bluetooth オン</translation> <translation id="5571092938913434726">グローバル メディア コントロール</translation> <translation id="5571832155627049070">プロファイルのカスタマイズ</translation> <translation id="5572851009514199876">このサイトへのアクセス権があるかどうかを Chrome で確認できるように、Chrome を起動してログインしてください。</translation> @@ -4798,6 +4799,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{今後もウェブ ブラウジングを続けられるように、管理者にこのアプリケーションの削除を依頼してください。}other{今後もウェブ ブラウジングを続けられるように、管理者にこれらのアプリケーションの削除を依頼してください。}}</translation> <translation id="5997337190805127100">サイトアクセスの詳細</translation> <translation id="6000758707621254961">「<ph name="SEARCH_TEXT" />」に対する <ph name="RESULT_COUNT" /> 件の検索結果</translation> +<translation id="6002122790816966947">他のデバイス</translation> <translation id="6002210667729577411">グループを新しいウィンドウに移動</translation> <translation id="6002452033851752583">Google アカウントからパスワードを削除しました</translation> <translation id="6002458620803359783">使用する音声</translation> @@ -5599,7 +5601,6 @@ <translation id="6833996806551876956">プライバシー サンドボックス(試用版)</translation> <translation id="6834652994408928492">ダークモードは日の入り時刻に自動的にオンになります</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" /> を更新するにはインターネットに接続してください。</translation> -<translation id="6838034009068684089">サイトから画面上にウィンドウを開いて配置することを求められたときに確認する(推奨)</translation> <translation id="6839225236531462745">証明書削除エラー</translation> <translation id="6839916869147598086">ログインが変わりました</translation> <translation id="6840155290835956714">送信する前に確認する</translation> @@ -6509,7 +6510,6 @@ <translation id="7775694664330414886">タブを名前のないグループに移動しました - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">このサイトのタブをすべて閉じるまでの間、<ph name="ORIGIN" /> は「<ph name="FOLDERNAME" />」内のファイルを読み取れるようになります</translation> <translation id="7776701556330691704">音声が見つかりません</translation> -<translation id="7777284276915203144">Google パスワード マネージャーに保存する前にデバイス上でパスワードを暗号化します</translation> <translation id="7781335840981796660">すべてのユーザー アカウントとローカル データは削除されます。</translation> <translation id="7782102568078991263">候補は以上です</translation> <translation id="7782717250816686129">ログイン画面での永続データの保存とセッションへの認証情報の入力。</translation> @@ -7161,7 +7161,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">あと <ph name="LOGOUT_TIME_LEFT" />でログアウトします</translation> <translation id="8431190899827883166">タップを表示</translation> -<translation id="8431730749911729314">Google パスワード マネージャーに保存する前にデバイス上でパスワードを暗号化</translation> <translation id="8434480141477525001">NaCl デバッグ ポート</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> で本人確認を行う</translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index 671a8b3..2e46ff7 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -1259,6 +1259,7 @@ <translation id="2263679799334060788">თქვენი გამოხმაურება ჩვენთვის მნიშვნელოვანია და Google Cast-ის გაუმჯობესებაში გვეხმარება. ტრანსლირებასთან დაკავშირებული პრობლემების აღმოსაფხვრელად ეწვიეთ ჩვენს <ph name="BEGIN_LINK" />დახმარების ცენტრს<ph name="END_LINK" />.</translation> <translation id="22665427234727190">საიტების მიერ Bluetooth მოწყობილობებზე წვდომის მოთხოვნა (რეკომენდებულია)</translation> <translation id="2266957463645820432">IPP USB-ის მეშვეობით (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth გათიშულია</translation> <translation id="2270450558902169558">დომენში: <ph name="DOMAIN" /> არსებულ ნებისმიერ მოწყობილობასთან მონაცემთა მიმოცვლა</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ინსტალაცია <ph name="BEGIN_BOLD" />მთლიანად ამოშლის თქვენს მყარ დისკს<ph name="END_BOLD" />. დარწმუნდით, რომ შექმნილი გაქვთ თქვენი მონაცემების სარეზერვო ასლი.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ინსტალაციის დაწყების შემდეგ მას ვეღარ გააუქმებთ.<ph name="END_PARAGRAPH2" /></translation> @@ -2083,7 +2084,6 @@ <translation id="3088052000289932193">საიტი იყენებს MIDI-ს</translation> <translation id="3088128611727407543">მიმდინარეობს აპის პროფილის მომზადება...</translation> <translation id="3088325635286126843">&და სახელის შეცვლა...</translation> -<translation id="3089064280130434511">საიტებისთვის თქვენს ეკრანებზე ფანჯრების გახსნისა და განლაგების დაბლოკვა</translation> <translation id="3089137131053189723">ძიება გასუფთავდა</translation> <translation id="3090589793601454425">არ გსურს გადატანა</translation> <translation id="3090819949319990166">გარე crx ფაილის <ph name="TEMP_CRX_FILE" />-ში კოპირება შეუძლებელია.</translation> @@ -3701,6 +3701,7 @@ <translation id="4813136279048157860">ჩემი სურათები</translation> <translation id="4813512666221746211">ქსელის შეცდომა</translation> <translation id="4814378367953456825">შეიყვანეთ თითის ამ ანაბეჭდის სახელი</translation> +<translation id="481574578487123132">მიბმული მოწყობილობები</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, დეტალები</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 სანიშნე წაიშალა}other{{COUNT} სანიშნე წაიშალა}}</translation> <translation id="4819607494758673676">Google ასისტენტის შეტყობინებები</translation> @@ -3715,7 +3716,6 @@ <translation id="482952334869563894">USB მოწყობილობები, რომელთა მომწოდებელია <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">PIN-კოდის დაყენება</translation> <translation id="4830026649400230050">კრიტერიუმების შესაბამისი ყველა ჩამოტვირთვა მისამართდება თქვენი ორგანიზაციის <ph name="WEB_DRIVE" /> ანგარიშში.</translation> -<translation id="4830121310592638841">შეკითხვა საიტის მიერ თქვენს ეკრანებზე ფანჯრების გახსნისა და განლაგების მოთხოვნისას</translation> <translation id="4830502475412647084">მიმდინარეობს ოპერაციული სისტემის განახლების ინსტალაცია</translation> <translation id="4830573902900904548">თქვენი <ph name="DEVICE_TYPE" /> ვერ უკავშირდება ინტერნეტს <ph name="NETWORK_NAME" />-ის მეშვეობით. გთხოვთ, აირჩიოთ სხვა ქსელი. <ph name="LEARN_MORE_LINK_START" />შეიტყვეთ მეტი<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">ბეჭდვის სერვერზე მოიძებნა 1 პრინტერი</translation> @@ -4416,6 +4416,7 @@ <translation id="5563234215388768762">მოიძიეთ Google-ით, ან აკრიფეთ URL</translation> <translation id="5565735124758917034">აქტიური</translation> <translation id="5568069709869097550">სისტემაში შესვლა ვერ მოხერხდა</translation> +<translation id="5571066253365925590">Bluetooth ჩართულია</translation> <translation id="5571092938913434726">მედიის მართვის გლობალური საშუალებები</translation> <translation id="5571832155627049070">მოირგეთ პროფილი</translation> <translation id="5572851009514199876">გთხოვთ, გაუშვათ Chrome და შეხვიდეთ მასში, რათა Chrome-მა შეამოწმოს, გაქვთ თუ არა ამ საიტზე წვდომის უფლება.</translation> @@ -4813,6 +4814,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{იმისთვის, რომ კვლავ შეძლოთ ვების დათვალიერება, სთხოვეთ თქვენს ადმინისტრატორს, ამოშალოს ეს აპლიკაცია.}other{იმისთვის, რომ კვლავ შეძლოთ ვების დათვალიერება, სთხოვეთ თქვენს ადმინისტრატორს, ამოშალოს ეს აპლიკაციები.}}</translation> <translation id="5997337190805127100">შეიტყვეთ მეტი საიტების წვდომის შესახებ</translation> <translation id="6000758707621254961">მოთხოვნაზე „<ph name="SEARCH_TEXT" />“ მოიძებნა <ph name="RESULT_COUNT" /> შედეგი</translation> +<translation id="6002122790816966947">თქვენი მოწყობილობები</translation> <translation id="6002210667729577411">ჯგუფის გადატანა ახალ ფანჯარაში</translation> <translation id="6002452033851752583">პაროლი წაიშალა თქვენი Google ანგარიშიდან</translation> <translation id="6002458620803359783">სასურველი ხმები</translation> @@ -5619,7 +5621,6 @@ <translation id="6833996806551876956">კონფიდენციალურობის დაცული გარემოს საცდელი ვერსია</translation> <translation id="6834652994408928492">მუქი რეჟიმი ავტომატურად ჩაირთვება მზის ჩასვლისას</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" />-ის განსაახლებლად, გთხოვთ, დაუკავშირდეთ ინტერნეტს.</translation> -<translation id="6838034009068684089">შეკითხვა საიტის მიერ თქვენს ეკრანებზე ფანჯრების გახსნისა და განლაგების მოთხოვნისას (რეკომენდებული)</translation> <translation id="6839225236531462745">სერტიფიკატის წაშლის შეცდომა</translation> <translation id="6839916869147598086">სისტემაში შესვლა შეიცვალა</translation> <translation id="6840155290835956714">ნებართვის მოთხოვნა გაგზავნამდე</translation> @@ -6530,7 +6531,6 @@ <translation id="7775694664330414886">ჩანართი გადატანილია უსახელო ჯგუფში — <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> შეძლებს „<ph name="FOLDERNAME" />“-ში არსებული ფაილების ნახვას ამ საიტის ყველა ჩანართის დახურვამდე</translation> <translation id="7776701556330691704">ხმები ვერ მოიძებნა</translation> -<translation id="7777284276915203144">თქვენი პაროლები თქვენს მოწყობილობაზე დაიშიფრება, სანამ ისინი Google-ის პაროლების მმართველში შეინახება</translation> <translation id="7781335840981796660">მომხმარებლის ყველა ანგარიში და ლოკალური მონაცემები წაიშლება.</translation> <translation id="7782102568078991263">Google-ის სხვა შემოთავაზება აღარ არის</translation> <translation id="7782717250816686129">შესვლის ეკრანზე მონაცემების ხანგრძლივად შენახვა და ავტორიზაციის მონაცემების შეტანა სესიაში.</translation> @@ -7181,7 +7181,6 @@ <translation id="8428634594422941299">გასაგებია</translation> <translation id="84297032718407999">სისტემიდან თქვენს გამოსვლამდე დარჩა <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">შეხებების ჩვენება</translation> -<translation id="8431730749911729314">დაშიფრეთ პაროლები თქვენს მოწყობილობაზე, სანამ ისინი Google-ის პაროლების მმართველში შეინახება</translation> <translation id="8434480141477525001">NaCl გამართვის პორტი</translation> <translation id="8435395510592618362">დაადასტურეთ თქვენი ვინაობა <ph name="APP_NAME" />-ის მეშვეობით</translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 4d1329f..b4e2ce8 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1256,6 +1256,7 @@ <translation id="2263679799334060788">Пікіріңіз Google Cast мүмкіндігін жақсартуға көмектеседі әрі біз үшін өте маңызды. Google Cast ақауларын жою үшін <ph name="BEGIN_LINK" />Анықтамалық орталыққа<ph name="END_LINK" /> жүгініңіз.</translation> <translation id="22665427234727190">Сайт Bluetooth құрылғыларын пайдаланғысы келгенде, сізден рұқсат сұраy (ұсынылады)</translation> <translation id="2266957463645820432">USB арқылы IPP (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth өшірілген</translation> <translation id="2270450558902169558">Деректерді <ph name="DOMAIN" /> доменіндегі кез келген құрылғымен айырбастау</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Орнату процесі <ph name="BEGIN_BOLD" />қатты дискіні толық тазартады<ph name="END_BOLD" />. Деректеріңіздің сақтық көшірмесі жасалғанына көз жеткізіңіз.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Орнату басталcа, одан бас тарту мүмкін болмайды.<ph name="END_PARAGRAPH2" /></translation> @@ -2079,7 +2080,6 @@ <translation id="3088052000289932193">Сайт MIDI құрылғысын пайдаланып жатыр.</translation> <translation id="3088128611727407543">Қолданба профилі дайындалуда...</translation> <translation id="3088325635286126843">&Атын өзгерту…</translation> -<translation id="3089064280130434511">Сайттардың терезелерді ашып, экрандарға орналастыруына тыйым салу</translation> <translation id="3089137131053189723">Іздеу сұрауы өшірілді.</translation> <translation id="3090589793601454425">Көшірмеу</translation> <translation id="3090819949319990166">Сыртқы CRX файлын <ph name="TEMP_CRX_FILE" /> файлына көшіру мүмкін емес.</translation> @@ -3697,6 +3697,7 @@ <translation id="4813136279048157860">Суреттерім</translation> <translation id="4813512666221746211">Желі қатесі</translation> <translation id="4814378367953456825">Осы саусақ ізінің атауын енгізіңіз.</translation> +<translation id="481574578487123132">Байланыстырылған құрылғылар</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, мәліметтер</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 бетбелгі жойылды.}other{{COUNT} бетбелгі жойылды.}}</translation> <translation id="4819607494758673676">Google Assistant хабарландырулары</translation> @@ -3711,7 +3712,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> ұсынған USB құрылғылары</translation> <translation id="4829768588131278040">PIN кодын орнату</translation> <translation id="4830026649400230050">Барлық жүктеп алынған файл ұйымның <ph name="WEB_DRIVE" /> аккаунтына бағытталады.</translation> -<translation id="4830121310592638841">Сайт терезелерді ашып, экрандарға орналастырғысы келгенде сұрау</translation> <translation id="4830502475412647084">ОЖ жаңартылған нұсқасы орнатылуда</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> <ph name="NETWORK_NAME" /> көмегімен интернетке қосыла алмайды. Басқа желіні іздеңіз. <ph name="LEARN_MORE_LINK_START" />Толығырақ<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Басып шығару серверінен 1 принтер табылды.</translation> @@ -4412,6 +4412,7 @@ <translation id="5563234215388768762">Google-дан іздеңіз не URL мекенжайын теріңіз</translation> <translation id="5565735124758917034">Белсенді</translation> <translation id="5568069709869097550">Кіру мүмкін емес</translation> +<translation id="5571066253365925590">Bluetooth қосылды</translation> <translation id="5571092938913434726">Мультимедианы басқарудың жалпы элементтері</translation> <translation id="5571832155627049070">Профильді реттеу</translation> <translation id="5572851009514199876">Chrome браузері сіздің сайтқа кіруге рұқсатыңыз барын тексере алуы үшін Chrome жүйесін іске қосып, оған кіріңіз.</translation> @@ -4809,6 +4810,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Браузерді әрі қарай пайдалана беру үшін әкімшіден осы қолданбаны өшіріп тастауын сұраңыз.}other{Браузерді пайдалана беру үшін әкімшіден осы қолданбаларды өшіріп тастауын сұраңыз.}}</translation> <translation id="5997337190805127100">Сайтқа кіру рұқсаты туралы толығырақ мәлімет</translation> <translation id="6000758707621254961">"<ph name="SEARCH_TEXT" />" сұрауы бойынша <ph name="RESULT_COUNT" /> нәтиже шықты</translation> +<translation id="6002122790816966947">Құрылғыларыңыз</translation> <translation id="6002210667729577411">Топты жаңа терезеге жылжыту</translation> <translation id="6002452033851752583">Google аккаунтыңыздан жойылған құпия сөз</translation> <translation id="6002458620803359783">Ұнайтын дауыстар</translation> @@ -5615,7 +5617,6 @@ <translation id="6833996806551876956">Privacy Sandbox сынақ мерзімі</translation> <translation id="6834652994408928492">Күн батқанда, қараңғы режим автоматты түрде қосылады.</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" /> жаңарту үшін, интернетке қосылыңыз.</translation> -<translation id="6838034009068684089">Сайт терезелерді ашып, экрандарға орналастырғысы келгенде сұрау (ұсынылады)</translation> <translation id="6839225236531462745">Сертификат жою қатесі</translation> <translation id="6839916869147598086">Аккаунтқа кіру жолы өзгерді</translation> <translation id="6840155290835956714">Жіберу алдында рұқсат сұрау</translation> @@ -6526,7 +6527,6 @@ <translation id="7775694664330414886">Қойынды атаусыз топқа (<ph name="GROUP_CONTENTS" />) жылжытылды.</translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> сайтының барлық қойындысы жабылғанға дейін, ол <ph name="FOLDERNAME" /> қалтасындағы файлдарды көре алады.</translation> <translation id="7776701556330691704">Ешқандай дауыс табылмады</translation> -<translation id="7777284276915203144">Құрылғыдағы құпия сөздер Google Құпия сөздер реттегішіне сақтамас бұрын шифрланады.</translation> <translation id="7781335840981796660">Барлық пайдаланушы аккаунттары мен жергілікті деректер жойылады.</translation> <translation id="7782102568078991263">Басқа Google ұсыныстары жоқ</translation> <translation id="7782717250816686129">Тұрақты деректерді кіру экранында сақтаңыз және тіркелу деректерін сеансқа енгізіңіз.</translation> @@ -7177,7 +7177,6 @@ <translation id="8428634594422941299">Түсінікті</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> өткеннен кейін аккаунттан шығасыз</translation> <translation id="8431190899827883166">Түрту қимылын көрсету</translation> -<translation id="8431730749911729314">Құрылғыдағы құпия сөздерді Google Құпия сөздер реттегішіне сақтамас бұрын шифрлаңыз.</translation> <translation id="8434480141477525001">NaCl түзету ұяшығы</translation> <translation id="8435395510592618362">Жеке басыңызды <ph name="APP_NAME" /> арқылы растаңыз</translation> <translation id="8437209419043462667">АҚШ</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index 3237a2e9..704aafc2 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -242,6 +242,7 @@ <translation id="1235458158152011030">បណ្តាញដែលស្គាល់</translation> <translation id="123578888592755962">ឌីសពេញ</translation> <translation id="1235924639474699896">{COUNT,plural, =1{អត្ថបទ}other{អត្ថបទ #}}</translation> +<translation id="1236009322878349843">កែព័ត៌មានលម្អិតអំពីទូរសព្ទ</translation> <translation id="1239594683407221485">រុករកខ្លឹមសាររបស់ឧបករណ៍នៅក្នុងកម្មវិធី Files ។</translation> <translation id="1241066500170667906">ជ្រើសរើសស្ថានភាពពិសោធន៍សម្រាប់ <ph name="EXPERIMENT_NAME" /></translation> <translation id="124116460088058876">ភាសាច្រើនទៀត</translation> @@ -1274,6 +1275,7 @@ មជ្ឈមណ្ឌលជំនួយ<ph name="END_LINK" />។</translation> <translation id="22665427234727190">សួរនៅពេលគេហទំព័រចង់ចូលប្រើឧបករណ៍ប៊្លូធូស (បានណែនាំ)</translation> <translation id="2266957463645820432">IPP ពីលើ USB (IPPUSB)</translation> +<translation id="2268130516524549846">ប៊្លូធូសត្រូវបានបិទ</translation> <translation id="2270450558902169558">ផ្តោះប្តូរទិន្នន័យជាមួយឧបករណ៍ណាមួយនៅក្នុងដែន <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ការដំឡើង<ph name="BEGIN_BOLD" />នឹងលុបថាសរឹងរបស់អ្នកទាំងស្រុង<ph name="END_BOLD" />។ សូមប្រាកដថា ទិន្នន័យរបស់អ្នកត្រូវបានបម្រុងទុក។<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />នៅពេលការដំឡើងចាប់ផ្ដើម អ្នកមិនអាចបោះបង់បានទេ។<ph name="END_PARAGRAPH2" /></translation> @@ -1957,6 +1959,7 @@ <translation id="2939908794993783865">គេហទំព័រអសកម្មបន្ថែម</translation> <translation id="2939938020978911855">បង្ហាញឧបករណ៍ប៊្លូធូសដែលមាន</translation> <translation id="2941112035454246133">ទាប</translation> +<translation id="2941696810925320401">ជាធម្មតា គេហទំព័របើក និងដាក់វិនដូ ដើម្បីបង្ហាញខ្លឹមសារពេញអេក្រង់ ឬឯកសារបន្ថែមនៅលើអេក្រង់របស់អ្នក</translation> <translation id="2942279350258725020">Android messages</translation> <translation id="2942560570858569904">កំពុងរង់ចាំ...</translation> <translation id="2942581856830209953">ប្ដូរទំព័រនេះតាមបំណង</translation> @@ -2098,7 +2101,6 @@ <translation id="3088052000289932193">គេហទំព័រកំពុងប្រើប្រាស់ MIDI</translation> <translation id="3088128611727407543">កំពុងរៀបចំកម្រងព័ត៌មានកម្មវិធី...</translation> <translation id="3088325635286126843">ប្តូរឈ្មោះ...</translation> -<translation id="3089064280130434511">ទប់ស្កាត់គេហទំព័រមិនឱ្យបើក និងដាក់វិនដូនៅលើអេក្រង់របស់អ្នក</translation> <translation id="3089137131053189723">បានសម្អាតការស្វែងរក</translation> <translation id="3090589793601454425">កុំផ្លាស់ទី</translation> <translation id="3090819949319990166">មិនអាចចម្លងឯកសារ crx ខាងក្រៅទៅ <ph name="TEMP_CRX_FILE" /> ទេ។</translation> @@ -2110,6 +2112,7 @@ <translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{កម្មវិធីបន្ថែមដែលអាចបង្កគ្រោះថ្នាក់ 1 ត្រូវបានបិទ។ អ្នកក៏អាចលុបកម្មវិធីបន្ថែមនេះបានផងដែរ។}other{កម្មវិធីបន្ថែមដែលអាចបង្កគ្រោះថ្នាក់ {NUM_EXTENSIONS} ត្រូវបានបិទ។ អ្នកក៏អាចលុបកម្មវិធីបន្ថែមទាំងនេះបានផងដែរ។}}</translation> <translation id="3101126716313987672">ពន្លឺតិច</translation> <translation id="3101709781009526431">កាលបរិច្ឆេទ និងពេលវេលា</translation> +<translation id="3103451787721578293">សូមបញ្ចូលមូលហេតុដែលបង្ហោះទិន្នន័យនេះ៖</translation> <translation id="3103941660000130485">មានបញ្ហាក្នុងការដំឡើងកំណែ Linux</translation> <translation id="3105796011181310544">ប្ដូរទៅ Google វិញឬ?</translation> <translation id="310671807099593501">ទំព័រកំពុងប្រើប៊្លូធូស</translation> @@ -2636,6 +2639,7 @@ <translation id="3670113805793654926">ឧបករណ៍ពីអ្នកលក់</translation> <translation id="3670229581627177274">បើកប៊្លូធូស</translation> <translation id="3672681487849735243">កំហុសឆ្គងចេញពីប្រភពដើមត្រូវបានរកឃើញ</translation> +<translation id="3673097791729989571">ការចូលគណនីដែលបង្ហោះដោយ <ph name="SAML_DOMAIN" /></translation> <translation id="367645871420407123">ទុកវាចោល ប្រសិនបើអ្នកចង់កំណត់ពាក្យសម្ងាត់រូតទៅតម្លៃរូបភាពសាកល្បងលំនាំដើម</translation> <translation id="3677106374019847299">បញ្ចូលក្រុមហ៊ុនផ្ដល់សេវាផ្ទាល់ខ្លួន</translation> <translation id="3677911431265050325">ស្នើគេហទំព័រសម្រាប់ឧបករណ៍ចល័ត</translation> @@ -3419,6 +3423,7 @@ <translation id="4481467543947557978">បុគ្គលិកបម្រើសេវាកម្ម</translation> <translation id="4481530544597605423">ឧបករណ៍ដែលឈប់ផ្គូផ្គង</translation> <translation id="4482990632723642375">ផ្ទាំងដែលបានបិទថ្មីៗ</translation> +<translation id="4484922932728109422">កុំអនុញ្ញាតឱ្យគេហទំព័រប្រើព័ត៌មានអំពីអេក្រង់របស់អ្នកដើម្បីបើក និងដាក់វិនដូ</translation> <translation id="4487489714832036847">Chromebook ប្រើកម្មវិធីជំនួសឱ្យកម្មវិធីប្រភេទចាស់។ ទាញយកកម្មវិធីសម្រាប់ផលិតភាព ការកម្សាន្ត និងអ្វីៗជាច្រើនទៀត។</translation> <translation id="4488257340342212116">អនុញ្ញាតឱ្យប្រើកាមេរ៉ារបស់អ្នក</translation> <translation id="4488502501195719518">សម្អាតទិន្នន័យទាំងអស់ឬ?</translation> @@ -3502,6 +3507,7 @@ <translation id="4565917129334815774">រក្សាទុកកំណត់ហេតុប្រព័ន្ធ</translation> <translation id="4566417217121906555">បិទសំឡេងមីក្រូហ្វូន</translation> <translation id="456717285308019641">ភាសាទំព័រដែលត្រូវបកប្រែ</translation> +<translation id="4567512141633030272">ជម្រើសចូលគណនីមិនត្រឹមត្រូវឬ?</translation> <translation id="4567533462991917415">អ្នកអាចបញ្ចូលមនុស្សបន្ថែមបានជានិច្ច បន្ទាប់ពីរៀបចំរួច។ មនុស្សម្នាក់ៗអាចកំណត់គណនីរបស់គេជាលក្ខណៈផ្ទាល់ខ្លួន និងរក្សាទិន្នន័យជាលក្ខណៈឯកជន។</translation> <translation id="4567772783389002344">បន្ថែមពាក្យ</translation> <translation id="4568025708905928793">សោសុវត្ថិភាពកំពុងត្រូវបានស្នើសុំ</translation> @@ -3717,6 +3723,7 @@ <translation id="4813136279048157860">រូបភាពរបស់ខ្ញុំ</translation> <translation id="4813512666221746211">កំហុសឆ្គងបណ្តាញ</translation> <translation id="4814378367953456825">បញ្ចូលឈ្មោះសម្រាប់ស្នាមម្រាមដៃនេះ</translation> +<translation id="481574578487123132">ឧបករណ៍ដែលបានភ្ជាប់</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, ព័ត៌មានលម្អិត</translation> <translation id="4816336393325437908">{COUNT,plural, =1{បានលុបចំណាំ 1}other{បានលុបចំណាំ {COUNT}}}</translation> <translation id="4819607494758673676">ការជូនដំណឹងរបស់ Google ជំនួយការ</translation> @@ -3731,7 +3738,6 @@ <translation id="482952334869563894">ឧបករណ៍ USB ពីអ្នកលក់ <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">កំណត់កូដ PIN</translation> <translation id="4830026649400230050">ការទាញយកទាំងអស់ដែលអាចរក្សាទុកបានត្រូវបានបញ្ជូនទៅគណនី <ph name="WEB_DRIVE" /> របស់ស្ថាប័នអ្នក។</translation> -<translation id="4830121310592638841">សួរនៅពេលគេហទំព័រចង់បើក និងដាក់វិនដូនៅលើអេក្រង់របស់អ្នក</translation> <translation id="4830502475412647084">កំពុងដំឡើងកំណែថ្មីប្រព័ន្ធ OS</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> របស់អ្នកមិនអាចភ្ជាប់អ៊ីនធឺណិតដោយប្រើ <ph name="NETWORK_NAME" /> បានទេ។ សូមជ្រើសរើសបណ្តាញផ្សេងទៀត។ <ph name="LEARN_MORE_LINK_START" />ស្វែងយល់បន្ថែម<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">បានរកឃើញម៉ាស៊ីនបោះពុម្ព 1 ពីម៉ាស៊ីនមេបោះពុម្ព</translation> @@ -3747,6 +3753,7 @@ <translation id="4841741146571978176">មិនមានម៉ាស៊ីននិម្មិតដែលតម្រូវឱ្យមានទេ។ សូមសាកល្បងរៀបចំ <ph name="VM_TYPE" /> ដើម្បីបន្ត</translation> <translation id="4842976633412754305">ទំព័រនេះកំពុងព្យាយាមដំណើរការស្គ្រីបពីប្រភពដែលមិនបានសម្គាល់អត្តសញ្ញាណ។</translation> <translation id="4844333629810439236">ក្តារចុចផ្សេងទៀត</translation> +<translation id="4844633725025837809">សម្រាប់សុវត្ថិភាពបន្ថែម សូមអ៊ីនគ្រីបពាក្យសម្ងាត់នៅលើឧបករណ៍របស់អ្នក មុនពេលរក្សាទុកពាក្យសម្ងាត់ទាំងនោះទៅកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google</translation> <translation id="4846680374085650406">អ្នកកំពុងធ្វើតាមការណែនាំរបស់អ្នកគ្រប់គ្រងសម្រាប់ការកំណត់នេះ។</translation> <translation id="4847902821209177679">បានជ្រើសរើស <ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" /> សូមចុច "Enter" ដើម្បីជ្រើសរើសអាល់ប៊ុម <ph name="TOPIC_SOURCE" /></translation> <translation id="4848191975108266266">Google ជំនួយការ "Ok Google"</translation> @@ -3888,6 +3895,7 @@ <translation id="499165176004408815">ប្រើរបៀបភាពដិតកម្រិតខ្ពស់</translation> <translation id="4992458225095111526">អះអាង Powerwash</translation> <translation id="4992473555164495036">អ្នកគ្រប់គ្រងរបស់អ្នកបានកម្រិតវិធីបញ្ចូលដែលអាចប្រើបាន។</translation> +<translation id="4992984395680162305">ឧបករណ៍ទាំងនេះត្រូវបានភ្ជាប់ដោយស្កេនកូដ QR។</translation> <translation id="4994474651455208930">អនុញ្ញាតឲ្យគេហទំព័រសួរដើម្បីឲ្យក្លាយទៅជាឧបករណ៍ដោះស្រាយប្រូតូកូលលំនាំដើម</translation> <translation id="4994754230098574403">កំពុងរៀបចំ</translation> <translation id="4995131849631312693"><ph name="BEGIN_PARAGRAPH1" />មុនពេលចុះឈ្មោះ អ្នកត្រូវសម្អាត TPM ជាមុនសិន ដើម្បីអាចឱ្យ <ph name="DEVICE_OS" /> មានកម្មសិទ្ធិលើឧបករណ៍។<ph name="END_PARAGRAPH1" /> @@ -4008,6 +4016,7 @@ <translation id="5123433949759960244">បាល់បោះ</translation> <translation id="5125751979347152379">URL គ្មានសុពលភាព។</translation> <translation id="5126611267288187364">មើលការផ្លាស់ប្ដូរ</translation> +<translation id="5127242257756472928">មិនអនុញ្ញាតឱ្យប្រើព័ត៌មានអំពីអេក្រង់របស់អ្នកដើម្បីបើក និងដាក់វិនដូទេ</translation> <translation id="5127620150973591153">លេខសម្គាល់ការតភ្ជាប់ដែលមានសុវត្ថិភាព៖ <ph name="TOKEN" /></translation> <translation id="5127805178023152808">សមកម្មបានបិទ</translation> <translation id="5127881134400491887">គ្រប់គ្រងការភ្ជាប់បណ្តាញ</translation> @@ -4120,6 +4129,7 @@ <translation id="5243522832766285132">សូមព្យាយាមម្ដងទៀតនៅពេលបន្តិចទៀត</translation> <translation id="5244474230056479698">កំពុងធ្វើសមកាលកម្មទៅ <ph name="EMAIL" /></translation> <translation id="5245610266855777041">ចាប់ផ្តើមដោយប្រើគណនីសាលារៀន</translation> +<translation id="5246036036039717045">ឧបករណ៍ទាំងនេះអាចត្រូវបានប្រើជាសោសុវត្ថិភាព ដោយសារអ្នកបានចូល Chrome នៅលើឧបករណ៍ទាំងនេះ។</translation> <translation id="5246282308050205996"><ph name="APP_NAME" /> បានគាំង។ ចុចប៉េងប៉ោងនេះដើម្បីចាប់ផ្តើមកម្មវិធីនេះឡើងវិញ។</translation> <translation id="5247051749037287028">ឈ្មោះបង្ហាញ (ជាជម្រើស)</translation> <translation id="5249624017678798539">កម្មវិធីរុករកបានគាំង មុនពេលការទាញយកបានបញ្ចប់។</translation> @@ -4432,6 +4442,7 @@ <translation id="5563234215388768762">ស្វែងរកនៅលើ Google ឬវាយបញ្ចូល URL ណាមួយ</translation> <translation id="5565735124758917034">សកម្ម</translation> <translation id="5568069709869097550">មិនអាចចូលបានទេ</translation> +<translation id="5571066253365925590">ប៊្លូធូសបានបើកដំណើរការ</translation> <translation id="5571092938913434726">Global Media Controls</translation> <translation id="5571832155627049070">ប្ដូរកម្រងព័ត៌មានរបស់អ្នកតាមបំណង</translation> <translation id="5572851009514199876">សូមចាប់ផ្តើម ហើយបញ្ចូលគណនីទៅក្នុង Chrome នោះ Chrome នឹងអាចពិនិត្យថាតើអ្នកអាចចូលប្រើទំព័រនេះបានដែរឬទេ។</translation> @@ -4608,6 +4619,7 @@ <translation id="5757375109985023827">ជ្រើសរើសផ្ទាំង ដើម្បីមើលសាកល្បង</translation> <translation id="5758631781033351321">អ្នកនឹងឃើញបញ្ជីអានរបស់អ្នកនៅទីនេះ</translation> <translation id="5759728514498647443">ឯកសារដែលអ្នកផ្ញើដើម្បីបោះពុម្ពតាមរយៈ <ph name="APP_NAME" /> អាចត្រូវបានអានដោយ <ph name="APP_NAME" />។</translation> +<translation id="5762787084360227629">បញ្ចូលព័ត៌មានអំពីគណនី Google</translation> <translation id="5763751966069581670">រកមិនឃើញឧបករណ៍ USB ទេ</translation> <translation id="5764483294734785780">រក្សាសម្លេងជា...</translation> <translation id="57646104491463491">កាលបរិច្ឆេទបានកែសម្រួល</translation> @@ -4830,6 +4842,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ដើម្បីធានាថា អ្នកអាចបន្តរុករកតាមអ៊ីនធឺណិត សូមស្នើឱ្យអ្នកគ្រប់គ្រងរបស់អ្នកលុបកម្មវិធីនេះចេញ។}other{ដើម្បីធានាថា អ្នកអាចបន្តរុករកតាមអ៊ីនធឺណិត សូមស្នើឱ្យអ្នកគ្រប់គ្រងរបស់អ្នកលុបកម្មវិធីទាំងនេះចេញ។}}</translation> <translation id="5997337190805127100">ស្វែងយល់បន្ថែមអំពីការចូលប្រើគេហទំព័រ</translation> <translation id="6000758707621254961">លទ្ធផល <ph name="RESULT_COUNT" /> សម្រាប់ '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">ឧបករណ៍របស់អ្នក</translation> <translation id="6002210667729577411">ផ្លាស់ទីក្រុមទៅវិនដូថ្មី</translation> <translation id="6002452033851752583">បានលុបពាក្យសម្ងាត់ចេញពីគណនី Google របស់អ្នកហើយ</translation> <translation id="6002458620803359783">សូរអានតាមចំណូលចិត្ត</translation> @@ -5636,7 +5649,6 @@ <translation id="6833996806551876956">ការសាកល្បងប្រើ Privacy Sandbox</translation> <translation id="6834652994408928492">មុខងារងងឹតនឹងបើកដោយស្វ័យប្រវត្តិនៅពេលថ្ងៃលិច</translation> <translation id="6835762382653651563">សូមភា្ជប់អ៊ីនធឺណិតដើម្បីធ្វើបច្ចុប្បន្នភាព <ph name="DEVICE_TYPE" /> របស់អ្នក។</translation> -<translation id="6838034009068684089">សួរនៅពេលគេហទំព័រចង់បើក និងដាក់វិនដូនៅលើអេក្រង់របស់អ្នក (បានណែនាំ)</translation> <translation id="6839225236531462745">កំហុសឆ្គងការលុបវិញ្ញាបនប័ត្រ</translation> <translation id="6839916869147598086">ការចូលគណនីបានផ្លាស់ប្ដូរហើយ</translation> <translation id="6840155290835956714">សួរមុនពេលផ្ញើ</translation> @@ -5753,6 +5765,7 @@ <translation id="6965382102122355670">យល់ព្រម</translation> <translation id="6965648386495488594">រន្ធ</translation> <translation id="6965978654500191972">ឧបករណ៍</translation> +<translation id="6966370001499648704">គ្រប់គ្រងទូរសព្ទដែលអ្នកប្រើជាសោសុវត្ថិភាព</translation> <translation id="6967430741871315905">មិនអាចពិនិត្យថាតើឧបករណ៍ត្រូវបានអនុញ្ញាតឬអត់ទេ</translation> <translation id="696780070563539690">គេហទំព័រមិនអាចប្រើខូគី ដើម្បីមើលសកម្មភាពរុករកតាមអ៊ីនធឺណិតរបស់អ្នកនៅលើគេហទំព័រផ្សេងៗ ឧទាហរណ៍ ដើម្បីកំណត់ការផ្សាយពាណិជ្ជកម្មឱ្យស្របនឹងអ្នកបានទេ</translation> <translation id="6968288415730398122">បញ្ចូលពាក្យសម្ងាត់របស់អ្នក ដើម្បីកំណត់រចនាសម្ព័ន្ធការចាក់សោអេក្រង់</translation> @@ -5927,6 +5940,7 @@ <translation id="7135729336746831607">បើកប៊្លូធូស?</translation> <translation id="7136694880210472378">ដាក់ជាលំនាំដើម</translation> <translation id="7136993520339022828">មានបញ្ហា។ សូមព្យាយាមម្ដងទៀត ដោយជ្រើសរើសរូបភាពផ្សេង។</translation> +<translation id="7137472406312798422">គេហទំព័រអាចស្នើសុំប្រើព័ត៌មានអំពីអេក្រង់របស់អ្នកដើម្បីបើក និងដាក់វិនដូ</translation> <translation id="7138515695467025690">បិទ / នឹងបើកដោយស្វ័យប្រវត្តិនៅពេលថ្ងៃលិច</translation> <translation id="7138678301420049075">ផ្សេងទៀត</translation> <translation id="7139627972753429585"><ph name="APP_NAME" /> កំពុងប្រើមីក្រូហ្វូនរបស់អ្នក</translation> @@ -6547,7 +6561,6 @@ <translation id="7775694664330414886">បានផ្លាស់ទីផ្ទាំងទៅក្នុងក្រុមដែលគ្មានឈ្មោះ - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> នឹងអាចមើលឯកសារនៅក្នុង <ph name="FOLDERNAME" /> បាន រហូតទាល់តែអ្នកបិទផ្ទាំងទាំងអស់សម្រាប់គេហទំព័រនេះ</translation> <translation id="7776701556330691704">រកមិនឃើញសំឡេងទេ</translation> -<translation id="7777284276915203144">ពាក្យសម្ងាត់របស់អ្នកត្រូវបានអ៊ីនគ្រីបនៅលើឧបករណ៍របស់អ្នក មុនពេលរក្សាទុកពាក្យសម្ងាត់ទាំងនោះទៅកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google</translation> <translation id="7781335840981796660">គណនីអ្នកប្រើ និងទិន្នន័យមូលដ្ឋានទាំងអស់នឹងត្រូវបានដកចេញ។</translation> <translation id="7782102568078991263">គ្មានការផ្តល់យោបល់ផ្សេងទៀតពី Google ទេ</translation> <translation id="7782717250816686129">រក្សាទុកទិន្នន័យអចិន្ត្រៃយ៍នៅលើអេក្រង់ចូល រួចបញ្ចូលព័ត៌មានផ្ទៀងផ្ទាត់នៅពេលចូលប្រើ។</translation> @@ -6814,6 +6827,7 @@ <translation id="8028803902702117856">កំពុងទាញយក <ph name="SIZE" />, <ph name="FILE_NAME" /></translation> <translation id="8028993641010258682">ទំហំ</translation> <translation id="8029492516535178472"><ph name="WINDOW_TITLE" /> - បានស្នើសុំការអនុញ្ញាត, ចុច ⌘ + ជម្រើស + ព្រួញឡើងលើ ដើម្បីឆ្លើយតប</translation> +<translation id="8029539783236818164">អនុញ្ញាតឱ្យប្រើព័ត៌មានអំពីអេក្រង់របស់អ្នកដើម្បីបើក និងដាក់វិនដូ</translation> <translation id="8030169304546394654">បានផ្ដាច់</translation> <translation id="8030852056903932865">យល់ព្រម</translation> <translation id="8032244173881942855">មិនអាចខាសផ្ទាំងបានទេ</translation> @@ -6826,6 +6840,7 @@ <translation id="8038399858950372766">ឧបករណ៍ <ph name="DEVICE_INDEX" /> នៃ <ph name="DEVICE_COUNT" />, ក្ដារចុចដែលមានឈ្មោះថា <ph name="DEVICE_NAME" /></translation> <translation id="8041089156583427627">ផ្ញើមតិ</translation> <translation id="8042142357103597104">ភាពស្រអាប់អក្សរ</translation> +<translation id="8042331986490021244">ពាក្យសម្ងាត់របស់អ្នកត្រូវបានអ៊ីនគ្រីបនៅលើឧបករណ៍របស់អ្នក មុនពេលរក្សាទុកពាក្យសម្ងាត់ទាំងនោះទៅកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google</translation> <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> មិនដំណើរការទេ។</translation> <translation id="8044899503464538266">យឺត</translation> <translation id="8045253504249021590">សមកាលកម្មត្រូវបានបិទតាមរយៈ Google ផ្ទាំងគ្រប់គ្រង។</translation> @@ -7199,7 +7214,6 @@ <translation id="8428634594422941299">យល់ហើយ</translation> <translation id="84297032718407999">អ្នកនឹងត្រូវបានបង្ខំឱ្យចាកចេញក្នុងរយៈពេល <ph name="LOGOUT_TIME_LEFT" /> ទៀត</translation> <translation id="8431190899827883166">បង្ហាញការចុច</translation> -<translation id="8431730749911729314">អ៊ីនគ្រីបពាក្យសម្ងាត់នៅលើឧបករណ៍របស់អ្នក មុនពេលរក្សាទុកពាក្យសម្ងាត់ទាំងនោះទៅកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google</translation> <translation id="8434480141477525001">រន្ធកម្ចាត់កំហុស NaCl</translation> <translation id="8435395510592618362">ផ្ទៀងផ្ទាត់អត្តសញ្ញាណរបស់អ្នកជាមួយ <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">អាមេរិក</translation> @@ -7585,6 +7599,7 @@ <translation id="8838234842677265403"><ph name="WEB_DRIVE_MESSAGE" /> (<ph name="SUPPORT_INFO" />)</translation> <translation id="8838601485495657486">ស្រអាប់</translation> <translation id="8838770651474809439">ហេមប៊ឺហ្គើរ</translation> +<translation id="8838778928843281408">គ្រប់គ្រងទូរសព្ទ</translation> <translation id="883911313571074303">ដាក់ចំណារលើរូបភាព</translation> <translation id="8841843049738266382">អាន និងប្ដូរអ្នកប្រើប្រាស់នៅក្នុងបញ្ជីអនុញ្ញាត</translation> <translation id="8842594465773264717">លុបស្នាមម្រាមដៃនេះ</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index eabd6d00..99b48c8 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1267,6 +1267,7 @@ ಸಹಾಯ ಕೇಂದ್ರವನ್ನು<ph name="END_LINK" /> ಉಲ್ಲೇಖಿಸಿ.</translation> <translation id="22665427234727190">ಸೈಟ್, ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಬಯಸಿದಾಗ ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿರುವುದು)</translation> <translation id="2266957463645820432">USB ನಲ್ಲಿ IPP (IPPUSB)</translation> +<translation id="2268130516524549846">ಬ್ಲೂಟೂತ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> ಡೊಮೇನ್ನಲ್ಲಿನ ಯಾವುದೇ ಸಾಧನದೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ಇನ್ಸ್ಟಾಲೇಶನ್ <ph name="BEGIN_BOLD" />ನಿಮ್ಮ ಸಂಪೂರ್ಣ ಹಾರ್ಡ್ ಡ್ರೈವ್ ಅನ್ನು ಅಳಿಸುತ್ತದೆ<ph name="END_BOLD" />. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲಾಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ಇನ್ಸ್ಟಾಲೇಶನ್ ಪ್ರಾರಂಭವಾದ ನಂತರ ಅದನ್ನು ರದ್ದು ಮಾಡಲಾಗುವುದಿಲ್ಲ.<ph name="END_PARAGRAPH2" /></translation> @@ -2090,7 +2091,6 @@ <translation id="3088052000289932193">ಸೈಟ್, MIDI ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation> <translation id="3088128611727407543">ಆ್ಯಪ್ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಸಿದ್ದಪಡಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="3088325635286126843">&ಮರುಹೆಸರಿಸು...</translation> -<translation id="3089064280130434511">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ಗಳಲ್ಲಿ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯುವುದನ್ನು ಮತ್ತು ಇರಿಸುವುದನ್ನು ಸೈಟ್ಗಳಿಂದ ನಿರ್ಬಂಧಿಸಿ</translation> <translation id="3089137131053189723">ಹುಡುಕಾಟ ತೆರವುಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="3090589793601454425">ಸರಿಸಬೇಡಿ</translation> <translation id="3090819949319990166">ಬಾಹ್ಯ crx ಫೈಲ್ ಅನ್ನು <ph name="TEMP_CRX_FILE" /> ಗೆ ನಕಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation> @@ -3709,6 +3709,7 @@ <translation id="4813136279048157860">ನನ್ನ ಚಿತ್ರಗಳು</translation> <translation id="4813512666221746211">ನೆಟ್ವರ್ಕ್ ದೋಷ</translation> <translation id="4814378367953456825">ಈ ಫಿಂಗರ್ಪ್ರಿಂಟ್ಗಾಗಿ ಹೆಸರೊಂದನ್ನು ನಮೂದಿಸಿ</translation> +<translation id="481574578487123132">ಲಿಂಕ್ ಮಾಡಿದ ಸಾಧನಗಳು</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, ವಿವರಗಳು</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 ಬುಕ್ಮಾರ್ಕ್ ಅಳಿಸಲಾಗಿದೆ}one{{COUNT} ಬುಕ್ಮಾರ್ಕ್ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ}other{{COUNT} ಬುಕ್ಮಾರ್ಕ್ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ}}</translation> <translation id="4819607494758673676">Google Assistant ಅಧಿಸೂಚನೆಗಳು</translation> @@ -3724,7 +3725,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> ಮಾರಾಟಗಾರರ USB ಸಾಧನಗಳು</translation> <translation id="4829768588131278040">ಪಿನ್ ಹೊಂದಿಸು</translation> <translation id="4830026649400230050">ಎಲ್ಲಾ ಅರ್ಹ ಡೌನ್ಲೋಡ್ಗಳನ್ನು ನಿಮ್ಮ ಸಂಸ್ಥೆಯ <ph name="WEB_DRIVE" /> ಖಾತೆಗೆ ರವಾನಿಸಲಾಗುತ್ತದೆ.</translation> -<translation id="4830121310592638841">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ಗಳಲ್ಲಿ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಇರಿಸಲು ಸೈಟ್ ಬಯಸಿದಾಗ ಕೇಳಿ</translation> <translation id="4830502475412647084">OS ಅಪ್ಡೇಟ್ ಅನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation> <translation id="4830573902900904548"><ph name="NETWORK_NAME" /> ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಇಂಟರ್ನೆಟ್ಗೆ ಸಂಪರ್ಕ ಹೊಂದಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಬೇರೊಂದು ನೆಟ್ವರ್ಕ್ ಆಯ್ಕೆಮಾಡಿ. <ph name="LEARN_MORE_LINK_START" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">ಪ್ರಿಂಟ್ ಸರ್ವರ್ನ 1 ಪ್ರಿಂಟರ್ ಕಂಡುಬಂದಿದೆ</translation> @@ -4425,6 +4425,7 @@ <translation id="5563234215388768762">Google ಹುಡುಕಾಟ ಮಾಡಿ ಅಥವಾ URL ಟೈಪ್ ಮಾಡಿ</translation> <translation id="5565735124758917034">ಸಕ್ರಿಯ</translation> <translation id="5568069709869097550">ಸೈನ್ ಇನ್ ಆಗಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation> +<translation id="5571066253365925590">ಬ್ಲೂಟೂತ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="5571092938913434726">ಜಾಗತಿಕ ಮಾಧ್ಯಮ ನಿಯಂತ್ರಣಗಳು</translation> <translation id="5571832155627049070">ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ</translation> <translation id="5572851009514199876">ದಯವಿಟ್ಟು Chrome ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಸೈನ್ ಇನ್ ಮಾಡಿ ಈ ಮೂಲಕ ಈ ಸೈಟ್ಗೆ ಪ್ರವೇಶಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು Chrome ಪರಿಶೀಲಿಸಬಹುದು.</translation> @@ -4823,6 +4824,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}one{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ತಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}other{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ತಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}}</translation> <translation id="5997337190805127100">ಸೈಟ್ ಪ್ರವೇಶದ ಕುರಿತು ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' ಗಾಗಿ <ph name="RESULT_COUNT" /> ಫಲಿತಾಂಶಗಳು</translation> +<translation id="6002122790816966947">ನಿಮ್ಮ ಸಾಧನಗಳು</translation> <translation id="6002210667729577411">ಹೊಸ ವಿಂಡೋಗೆ ಗುಂಪನ್ನು ಸರಿಸಿ</translation> <translation id="6002452033851752583">ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ.</translation> <translation id="6002458620803359783">ಆದ್ಯತೆಯ ಧ್ವನಿಗಳು</translation> @@ -5629,7 +5631,6 @@ <translation id="6833996806551876956">ಗೌಪ್ಯತೆ ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ ಪ್ರಯೋಗ</translation> <translation id="6834652994408928492">ಸೂರ್ಯಾಸ್ತದ ನಂತರ ಡಾರ್ಕ್ ಮೋಡ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆನ್ ಆಗುತ್ತದೆ</translation> <translation id="6835762382653651563">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅಪ್ಡೇಟ್ ಮಾಡಲು ದಯವಿಟ್ಟು ಇಂಟರ್ನೆಟ್ಗೆ ಸಂಪರ್ಕಗೊಳಿಸಿ.</translation> -<translation id="6838034009068684089">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ಗಳಲ್ಲಿ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಇರಿಸಲು ಸೈಟ್ ಬಯಸಿದಾಗ ಸೂಚನೆ ನೀಡಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿರುವುದು)</translation> <translation id="6839225236531462745">ಪ್ರಮಾಣಪತ್ರ ಅಳಿಸುವಿಕೆಯ ದೋಷ</translation> <translation id="6839916869147598086">ಸೈನ್ ಇನ್ ಬದಲಾಗಿದೆ</translation> <translation id="6840155290835956714">ಕಳುಹಿಸುವ ಮೊದಲು ಕೇಳಿ</translation> @@ -6541,7 +6542,6 @@ <translation id="7775694664330414886">ಟ್ಯಾಬ್ ಅನ್ನು <ph name="GROUP_CONTENTS" /> ಎಂಬ ಹೆಸರಿಸದ ಗುಂಪಿಗೆ ಸರಿಸಲಾಗಿದೆ</translation> <translation id="7776156998370251340">ಈ ಸೈಟ್ಗೆ ಸಂಬಂಧಿಸಿದ ಎಲ್ಲಾ ಟ್ಯಾಬ್ಗಳನ್ನು ನೀವು ಮುಚ್ಚುವವರೆಗೆ, <ph name="FOLDERNAME" /> ಫೋಲ್ಡರ್ನಲ್ಲಿರುವ ಫೈಲ್ಗಳನ್ನು ವೀಕ್ಷಿಸಲು <ph name="ORIGIN" /> ಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ</translation> <translation id="7776701556330691704">ಯಾವುದೇ ಧ್ವನಿಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation> -<translation id="7777284276915203144">ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು Google ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕದಲ್ಲಿ ಉಳಿಸುವ ಮೊದಲು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗುತ್ತದೆ</translation> <translation id="7781335840981796660">ಎಲ್ಲ ಬಳಕೆದಾರ ಖಾತೆಗಳು ಮತ್ತು ಸ್ಥಳೀಯ ಡೇಟಾವನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.</translation> <translation id="7782102568078991263">Google ನಿಂದ ಇನ್ಯಾವುದೇ ಸಲಹೆಗಳಿಲ್ಲ</translation> <translation id="7782717250816686129">ಲಾಗಿನ್ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ನಿರಂತರ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ ಮತ್ತು ರುಜುವಾತುಗಳನ್ನು ಸೆಶನ್ಗೆ ಸೇರಿಸುತ್ತದೆ.</translation> @@ -7190,7 +7190,6 @@ <translation id="8428634594422941299">ಅರ್ಥವಾಯಿತು</translation> <translation id="84297032718407999">ಇಷ್ಟು ಸಮಯ ಆದ ಮೇಲೆ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡಲಾಗುತ್ತದೆ: <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">ಟ್ಯಾಪ್ ಪಾಯಿಂಟ್ಗಳನ್ನು ತೋರಿಸಿ</translation> -<translation id="8431730749911729314">ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು Google ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕದಲ್ಲಿ ಉಳಿಸುವ ಮೊದಲು ಅವುಗಳನ್ನು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿ</translation> <translation id="8434480141477525001">NaCl ಡೀಬಗ್ ಪೋರ್ಟ್</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> ಮೂಲಕ ನಿಮ್ಮ ಗುರುತನ್ನು ಪರಿಶೀಲಿಸಿ</translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 11852c2..abba7164 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -1274,6 +1274,7 @@ 고객센터<ph name="END_LINK" />를 확인하세요.</translation> <translation id="22665427234727190">사이트에서 블루투스 기기에 액세스하려고 할 때 확인(권장)</translation> <translation id="2266957463645820432">USB를 통한 IPP(IPPUSB)</translation> +<translation id="2268130516524549846">블루투스를 사용 안 함</translation> <translation id="2270450558902169558">도메인 <ph name="DOMAIN" />에 있는 모든 기기와 데이터 교환</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />설치를 진행하면 <ph name="BEGIN_BOLD" />하드 드라이브 전체가 삭제됩니다<ph name="END_BOLD" />. 데이터가 백업되었는지 확인하세요.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />설치가 시작되면 취소할 수 없습니다.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">사이트에서 MIDI를 사용합니다.</translation> <translation id="3088128611727407543">앱 프로필 준비 중...</translation> <translation id="3088325635286126843">이름 바꾸기(&R)...</translation> -<translation id="3089064280130434511">사이트가 열릴 때 화면에 창을 배치하지 않도록 차단</translation> <translation id="3089137131053189723">검색 기록이 삭제되었습니다</translation> <translation id="3090589793601454425">이동 안함</translation> <translation id="3090819949319990166">외부 crx 파일을 <ph name="TEMP_CRX_FILE" />에 복사할 수 없습니다.</translation> @@ -3714,6 +3714,7 @@ <translation id="4813136279048157860">내 이미지</translation> <translation id="4813512666221746211">네트워크 오류</translation> <translation id="4814378367953456825">지문 이름 입력</translation> +<translation id="481574578487123132">연결된 기기</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, 세부정보</translation> <translation id="4816336393325437908">{COUNT,plural, =1{북마크 1개 삭제됨}other{북마크 {COUNT}개 삭제됨}}</translation> <translation id="4819607494758673676">Google 어시스턴트 알림</translation> @@ -3728,7 +3729,6 @@ <translation id="482952334869563894">USB 기기(업체 ID: <ph name="VENDOR_ID" />)</translation> <translation id="4829768588131278040">PIN 설정</translation> <translation id="4830026649400230050">조건을 충족하는 다운로드 항목이 모두 조직의 <ph name="WEB_DRIVE" /> 계정으로 라우트됩니다.</translation> -<translation id="4830121310592638841">열리는 사이트에서 화면에 창을 배치하려고 할 때 확인</translation> <translation id="4830502475412647084">OS 업데이트 설치 중</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" />에서 <ph name="NETWORK_NAME" /> 네트워크를 사용하여 인터넷에 연결할 수 없습니다. 다른 네트워크를 선택하세요. <ph name="LEARN_MORE_LINK_START" />자세히 알아보기<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">인쇄 서버에 프린터 1대가 있습니다.</translation> @@ -4429,6 +4429,7 @@ <translation id="5563234215388768762">Google 검색 또는 URL 입력</translation> <translation id="5565735124758917034">활성</translation> <translation id="5568069709869097550">로그인할 수 없음</translation> +<translation id="5571066253365925590">블루투스를 사용함</translation> <translation id="5571092938913434726">전체 미디어 컨트롤</translation> <translation id="5571832155627049070">프로필 맞춤설정</translation> <translation id="5572851009514199876">이 사이트에 액세스할 수 있는지 확인할 수 있도록 Chrome을 시작하고 로그인하세요.</translation> @@ -4826,6 +4827,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{계속 웹을 탐색하려면 관리자에게 이 애플리케이션을 삭제해 달라고 요청하세요.}other{계속 웹을 탐색하려면 관리자에게 이 애플리케이션을 삭제해 달라고 요청하세요.}}</translation> <translation id="5997337190805127100">사이트 액세스 권한 자세히 알아보기</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' 검색결과 <ph name="RESULT_COUNT" />개</translation> +<translation id="6002122790816966947">내 기기</translation> <translation id="6002210667729577411">그룹을 새 창으로 이동</translation> <translation id="6002452033851752583">Google 계정에서 비밀번호가 삭제되었습니다.</translation> <translation id="6002458620803359783">선호하는 음성</translation> @@ -5632,7 +5634,6 @@ <translation id="6833996806551876956">개인정보 보호 샌드박스 무료 체험</translation> <translation id="6834652994408928492">일몰 시 어두운 모드가 자동으로 켜짐</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" />을(를) 업데이트하려면 인터넷에 연결하세요.</translation> -<translation id="6838034009068684089">사이트에서 창을 열 때 확인하고 화면에 창 배치(권장)</translation> <translation id="6839225236531462745">인증서 삭제 오류</translation> <translation id="6839916869147598086">로그인 변경됨</translation> <translation id="6840155290835956714">보내기 전에 확인</translation> @@ -6543,7 +6544,6 @@ <translation id="7775694664330414886">이름이 지정되지 않은 그룹으로 탭을 이동함 - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">이 사이트의 탭을 모두 닫을 때까지 <ph name="ORIGIN" />에서 <ph name="FOLDERNAME" />의 파일을 볼 수 있게 됩니다.</translation> <translation id="7776701556330691704">음성을 찾을 수 없음</translation> -<translation id="7777284276915203144">비밀번호가 Google 비밀번호 관리자에 저장되기 전에 기기에서 암호화됩니다</translation> <translation id="7781335840981796660">모든 사용자 계정과 로컬 데이터가 삭제됩니다.</translation> <translation id="7782102568078991263">Google의 추천 단어 없음</translation> <translation id="7782717250816686129">로그인 화면의 지속 데이터를 저장하고 세션에 사용자 인증 정보를 삽입합니다.</translation> @@ -7196,7 +7196,6 @@ <translation id="8428634594422941299">확인</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> 후 로그아웃됩니다</translation> <translation id="8431190899827883166">탭한 항목 표시</translation> -<translation id="8431730749911729314">Google 비밀번호 관리자에 저장하기 전에 기기의 비밀번호를 암호화합니다</translation> <translation id="8434480141477525001">NaCl 디버그 포트</translation> <translation id="8435395510592618362"><ph name="APP_NAME" />(으)로 신원 확인</translation> <translation id="8437209419043462667">영어(미국)</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 9c396d4..1a6846d 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1274,6 +1274,7 @@ жардам борборуна<ph name="END_LINK" /> өтүңүз.</translation> <translation id="22665427234727190">Сайт Bluetooth түзмөктөрүн колдонгону жатканда уруксат суралсын (сунушталат)</translation> <translation id="2266957463645820432">USB аркылуу IPP (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth өчүрүлдү</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> домениндеги каалаган түзмөк менен дайындарды алмашуу</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Тутумду орнотсоңуз, <ph name="BEGIN_BOLD" />катуу дискиңиз толугу менен тазаланат<ph name="END_BOLD" />. Дайын-даректериңиздин камдык көчүрмөсү сакталганын текшериңиз.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Орнотулуп баштагандан кийин аны жокко чыгарууга болбойт.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">Сайт MIDI'ни колдонууда</translation> <translation id="3088128611727407543">Колдонмонун профили даярдалууда...</translation> <translation id="3088325635286126843">&Аталышын өзгөртүү…</translation> -<translation id="3089064280130434511">Сайттарга терезелерди ачып, экрандарыңызга жайгаштырууга тыюу салуу</translation> <translation id="3089137131053189723">Издөө таржымалы тазаланды</translation> <translation id="3090589793601454425">Өткөрүлбөсүн</translation> <translation id="3090819949319990166">Тышкы crx файлы <ph name="TEMP_CRX_FILE" /> ичине көчүрүлбөй жатат.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">Менин сүрөттөрүм</translation> <translation id="4813512666221746211">Тармактык ката</translation> <translation id="4814378367953456825">Бул манжа изине ат коюңуз</translation> +<translation id="481574578487123132">Байланышкан түзмөктөр</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, чоо-жайы</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 кыстарма өчүрүлдү}other{{COUNT} кыстарма өчүрүлдү}}</translation> <translation id="4819607494758673676">Google Жардамчынын билдирмелери</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> камсыздаган USB түзмөктөр</translation> <translation id="4829768588131278040">PIN кодуңузду жөндөңүз</translation> <translation id="4830026649400230050">Жүктөлүп алынган жарамдуу нерселердин баары уюмуңуздун <ph name="WEB_DRIVE" /> аккаунтуна сакталат.</translation> -<translation id="4830121310592638841">Сайт терезени ачып, экрандарыңызга жайгаштырганы жатканда уруксат суралсын</translation> <translation id="4830502475412647084"> OS жаңырууда</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> түзмөгүңүз <ph name="NETWORK_NAME" /> аркылуу Интернетке туташа албайт. Башка тармакты тандаңыз. <ph name="LEARN_MORE_LINK_START" />Көбүрөөк билүү<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Басып чыгаруу серверинен 1 принтер табылды</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Издеп жаткан сөзүңүздү териңиз же URL даректи киргизиңиз</translation> <translation id="5565735124758917034">Жигердүү</translation> <translation id="5568069709869097550">Аккаунтка кирбей жатат</translation> +<translation id="5571066253365925590">Bluetooth иштетилди</translation> <translation id="5571092938913434726">Жалпы медианы башкаруу элементтери</translation> <translation id="5571832155627049070">Профилиңизди ыңгайлаштырыңыз</translation> <translation id="5572851009514199876">Chrome'ду иштетип, аккаунтка кириңиз. Chrome бул сайтка кирүүгө уруксатыңыз бар-жогун текшериши керек.</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Интернетти серептөөнү улантуу үчүн администраторуңуздан бул колдонмону алып салуусун сураныңыз.}other{Интернетти серептөөнү улантуу үчүн администраторуңуздан бул колдонмолорду алып салуусун сураныңыз.}}</translation> <translation id="5997337190805127100">Сайтка кирүү мүмкүнчүлүгү жөнүндө толугураак маалымат</translation> <translation id="6000758707621254961">"<ph name="SEARCH_TEXT" />" сурамы боюнча <ph name="RESULT_COUNT" /> жыйынтык табылды</translation> +<translation id="6002122790816966947">Түзмөктөрүңүз</translation> <translation id="6002210667729577411">Топту жаңы терезеге жылдыруу</translation> <translation id="6002452033851752583">Сырсөз Google аккаунтуңуздан өчүрүлдү</translation> <translation id="6002458620803359783">Тандалган үндөр</translation> @@ -5635,7 +5637,6 @@ <translation id="6833996806551876956">Купуя сыноо чөйрөсү</translation> <translation id="6834652994408928492">Караңгы тема күн батканда автоматтык түрдө күйөт</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" /> түзмөгүңүздү жаңыртуу үчүн сырсөзүңүздү кайра киргизиңиз.</translation> -<translation id="6838034009068684089">Сайт терезени ачып, экрандарыңызга жайгаштырганы жатканда уруксат суралсын (сунушталат)</translation> <translation id="6839225236531462745">Тастыктаманы жок кылуу катасы</translation> <translation id="6839916869147598086">Аккаунтка кирүү өзгөрдү</translation> <translation id="6840155290835956714">Жөнөтүүдөн мурун суроо</translation> @@ -6546,7 +6547,6 @@ <translation id="7775694664330414886">Өтмөк аталышы жок топко жылды - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Бул сайттын бардык өтмөктөрү жабылмайынча <ph name="ORIGIN" /> сайты <ph name="FOLDERNAME" /> папкасындагы файлдарды көрө алат</translation> <translation id="7776701556330691704">Үндөр табылган жок</translation> -<translation id="7777284276915203144">Google Сырсөздөрдү башкаргычка сакталганга чейин сырсөздөрүңүз түзмөгүңүздө шифрленет</translation> <translation id="7781335840981796660">Колдонуучунун бардык каттоо эсептери жана жергиликтүү маалыматтар өчүрүлөт.</translation> <translation id="7782102568078991263">Google'дан башка сунуш жок</translation> <translation id="7782717250816686129">Туруктуу дайындар кирүү экранында сакталып, сеанс башталганда эсептик дайындар киргизилсин.</translation> @@ -7198,7 +7198,6 @@ <translation id="8428634594422941299">Түшүнүктүү</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> кийин тутумдан автоматтык түрдө чыгарыласыз</translation> <translation id="8431190899827883166">Басылган жерлерди көрсөтүү</translation> -<translation id="8431730749911729314">Google Сырсөздөрдү башкаргычка сакталганга чейин сырсөздөрдү түзмөгүңүздө шифрлеңиз</translation> <translation id="8434480141477525001">NaCl мүчүлүштүктөрдү оңдоо порту</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> сайтында аутентификациядан өтүңүз</translation> <translation id="8437209419043462667">АКШ</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 1e901bb..0e082ca6 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -1271,6 +1271,7 @@ ສູນຊ່ວຍເຫຼືອ<ph name="END_LINK" />.</translation> <translation id="22665427234727190">ຖາມເມື່ອເວັບໄຊໃດໜຶ່ງຕ້ອງການເຂົ້າເຖິງອຸປະກອນ Bluetooth (ແນະນຳ)</translation> <translation id="2266957463645820432">IPP ຜ່ານ USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth ປິດໃຊ້ງານແລ້ວ</translation> <translation id="2270450558902169558">ແລກປ່ຽນຂໍ້ມູນກັບອຸປະກອນໃດຫນຶ່ງຢູ່ໃນໂດເມນ <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ການຕິດຕັ້ງ <ph name="BEGIN_BOLD" />ຈະລຶບຂໍ້ມູນທັງໝົດໃນຮາດໄດຣຟ໌ຂອງທ່ານອອກ<ph name="END_BOLD" />. ກະລຸນາກວດສອບວ່າທ່ານສຳຮອງຂໍ້ມູນຂອງທ່ານໄວ້ແລ້ວ.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ເມື່ອເລີ່ມການຕິດຕັ້ງໄປແລ້ວມັນຈະບໍ່ສາມາດຍົກເລີກໄດ້.<ph name="END_PARAGRAPH2" /></translation> @@ -2095,7 +2096,6 @@ <translation id="3088052000289932193">ເວັບໄຊກຳລັງໃຊ້ MIDI</translation> <translation id="3088128611727407543">ກຳລັງກະກຽມໂປຣໄຟລ໌ແອັບ...</translation> <translation id="3088325635286126843">ປ່ຽນຊື່ໃໝ່...</translation> -<translation id="3089064280130434511">ບລັອກເວັບໄຊບໍ່ໃຫ້ເປີດ ແລະ ວາງໜ້າຈໍໃສ່ໃນໜ້າຈໍຂອງທ່ານ</translation> <translation id="3089137131053189723">ລຶບລ້າງການຊອກຫາແລ້ວ</translation> <translation id="3090589793601454425">ຢ່າຍ້າຍ</translation> <translation id="3090819949319990166">ບໍ່ສາມາດກັອບປີ້ໄຟລ໌ crx ທາງນອກໃສ່ <ph name="TEMP_CRX_FILE" /> ໄດ້.</translation> @@ -3714,6 +3714,7 @@ <translation id="4813136279048157860">ຮູບພາບຂອງຂ້ອຍ</translation> <translation id="4813512666221746211">ເຄືອຂ່າຍຜິດພາດ</translation> <translation id="4814378367953456825">ປ້ອນຊື່ສຳລັບລາຍນິ້ວມືນີ້</translation> +<translation id="481574578487123132">ອຸປະກອນທີ່ລິ້ງແລ້ວ</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, ລາຍລະອຽດ</translation> <translation id="4816336393325437908">{COUNT,plural, =1{ລຶບບຸກມາກ 1 ລາຍການແລ້ວ}other{ລຶບບຸກມາກ {COUNT} ລາຍການແລ້ວ}}</translation> <translation id="4819607494758673676">ການແຈ້ງເຕືອນຜູ້ຊ່ວຍ Google</translation> @@ -3728,7 +3729,6 @@ <translation id="482952334869563894">ອຸປະກອນ USB ຈາກຜູ້ຂາຍ <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">ຕັ້ງຄ່າ PIN</translation> <translation id="4830026649400230050">ການດາວໂຫຼດທີ່ມີສິດທັງໝົດຈະຖືກຕັ້ງເສັ້ນທາງໄປຫາບັນຊີ <ph name="WEB_DRIVE" /> ຂອງອົງການທ່ານ.</translation> -<translation id="4830121310592638841">ຖາມເມື່ອເວັບໄຊຕ້ອງການເປີດ ແລະ ວາງໜ້າຈໍໃສ່ໃນໜ້າຈໍຂອງທ່ານ</translation> <translation id="4830502475412647084">ກຳລັງຕິດຕັ້ງການອັບເດດລະບົບປະຕິບັດການ</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບອິນເຕີເນັດດ້ວຍການໃຊ້ <ph name="NETWORK_NAME" /> ໄດ້. ກະລຸນາເລືອກເຄືອຂ່າຍອື່ນ. <ph name="LEARN_MORE_LINK_START" />ຮຽນຮູ້ເພີ່ມເຕີມ<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">ພົບເຄື່ອງພິມ 1 ລາຍການຈາກເຊີບເວີການພິມ</translation> @@ -4428,6 +4428,7 @@ <translation id="5563234215388768762">ຊອກຫາໃນ Google ຫຼື ພິມ URL</translation> <translation id="5565735124758917034">ເປີດຢູ່</translation> <translation id="5568069709869097550">ບໍ່ສາມາດເຂົ້າສູ່ລະບົບໄດ້</translation> +<translation id="5571066253365925590">Bluetooth ເປີດໃຊ້ງານແລ້ວ</translation> <translation id="5571092938913434726">ການຄວບຄຸມສື່ສ່ວນກາງ</translation> <translation id="5571832155627049070">ປັບແຕ່ງໂປຣໄຟລ໌ຂອງທ່ານ</translation> <translation id="5572851009514199876">ກະລຸນາເລີ່ມຕົ້ນ ແລະ ເຂົ້າສູ່ລະບົບ Chrome ເພື່ອໃຫ້ Chrome ສາມາດກວດເບິ່ງວ່າທ່ານໄດ້ຮັບອະນຸຍາດໃຫ້ເຂົ້າຫາເວັບໄຊນີ້ຫຼືບໍ່.</translation> @@ -4825,6 +4826,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ເພື່ອໃຫ້ແນ່ໃຈວ່າທ່ານສາມາດສືບຕໍ່ທ່ອງເວັບໄດ້, ກະລຸນາຮ້ອງຂໍໃຫ້ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານລຶບແອັບພລິເຄຊັນນີ້ອອກ.}other{ເພື່ອໃຫ້ແນ່ໃຈວ່າທ່ານສາມາດສືບຕໍ່ທ່ອງເວັບໄດ້, ກະລຸນາຮ້ອງຂໍໃຫ້ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານລຶບແອັບພລິເຄຊັນເຫຼົ່ານີ້ອອກ.}}</translation> <translation id="5997337190805127100">ສຶກສາເພີ່ມເຕີມກ່ຽວກັບການເຂົ້າເຖິງເວັບໄຊ</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> ຜົນການຊອກຫາສຳລັບ '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">ອຸປະກອນຂອງທ່ານ</translation> <translation id="6002210667729577411">ຍ້າຍກຸ່ມໄປໃສ່ໜ້າຈໍໃໝ່</translation> <translation id="6002452033851752583">ລຶບລະຫັດຜ່ານອອກຈາກບັນຊີ Google ຂອງທ່ານແລ້ວ</translation> <translation id="6002458620803359783">ສຽງທີ່ມັກ</translation> @@ -5631,7 +5633,6 @@ <translation id="6833996806551876956">ການທົດລອງໃຊ້ກ່ອງຊາຍຄວາມເປັນສ່ວນຕົວ</translation> <translation id="6834652994408928492">ໂໝດມືດຈະເປີດອັດຕະໂນມັດເມື່ອຕາເວັນຕົກ</translation> <translation id="6835762382653651563">ກະລຸນາເຊື່ອມຕໍ່ກັບອິນເຕີເນັດເພື່ອອັບເດດ <ph name="DEVICE_TYPE" /> ຂອງທ່ານ.</translation> -<translation id="6838034009068684089">ຖາມເມື່ອເວັບໄຊຕ້ອງການເປີດ ແລະ ວາງໜ້າຈໍໃສ່ໃນໜ້າຈໍຂອງທ່ານ (ແນະນຳ)</translation> <translation id="6839225236531462745">ການລຶບໃບຢັ້ງຢືນຜິດພາດ</translation> <translation id="6839916869147598086">ການເຂົ້າສູ່ລະບົບໄດ້ປ່ຽນໄປແລ້ວ</translation> <translation id="6840155290835956714">ຖາມກ່ອນສົ່ງ</translation> @@ -6542,7 +6543,6 @@ <translation id="7775694664330414886">ຍ້າຍແຖບໄປຍັງກຸ່ມທີ່ບໍ່ມີຊື່ແລ້ວ - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> ຈະສາມາດເບິ່ງໄຟລ໌ໃນ <ph name="FOLDERNAME" /> ຈົນກວ່າທ່ານປິດແຖບທັງໝົດສຳລັບເວັບໄຊນີ້</translation> <translation id="7776701556330691704">ບໍ່ພົບເຫັນສຽງໃດ</translation> -<translation id="7777284276915203144">ລະຫັດຜ່ານຂອງທ່ານແມ່ນຖືກເຂົ້າລະຫັດໄວ້ຢູ່ອຸປະກອນຂອງທ່ານກ່ອນທີ່ພວກມັນຈະຖືກບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google</translation> <translation id="7781335840981796660">ບັນຊີຜູ້ໃຊ້ ແລະຂໍ້ມູນກັບທີ່ທັງໝົດຈະຖືກເອົາອອກໄປ.</translation> <translation id="7782102568078991263">ບໍ່ມີການແນະນໍາເພີ່ມເຕີມຈາກ Google</translation> <translation id="7782717250816686129">ບັນທຶກຂໍ້ມູນທີ່ໃຊ້ຕະຫຼອດໃນໜ້າຈໍເຂົ້າສູ່ລະບົບ ແລະ ແຊກຂໍ້ມູນເຂົ້າສູ່ລະບົບເຂົ້າໃນເຊດຊັນ.</translation> @@ -7193,7 +7193,6 @@ <translation id="8428634594422941299">ເຂົ້າໃຈແລ້ວ</translation> <translation id="84297032718407999">ທ່ານຈະຖືກນຳອອກຈາກລະບົບໃນ <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">ສະແດງການແຕະ</translation> -<translation id="8431730749911729314">ເຂົ້າລະຫັດລະຫັດຜ່ານຢູ່ອຸປະກອນຂອງທ່ານກ່ອນທີ່ພວກມັນຈະຖືກບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google</translation> <translation id="8434480141477525001">ຜອດແກ້ໄຂບັນຫາ NaCl</translation> <translation id="8435395510592618362">ຢັ້ງຢືນຕົວຕົນຂອງທ່ານດ້ວຍ <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">ສະຫະລັດ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 6cfe87bb6..a4d0a2a 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -1277,6 +1277,7 @@ pagalbos centre<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Klausti, kai svetainė nori pasiekti „Bluetooth“ įrenginius (rekomenduojama)</translation> <translation id="2266957463645820432">IPP per USB (IPPUSB)</translation> +<translation id="2268130516524549846">„Bluetooth“ neleidžiama</translation> <translation id="2270450558902169558">Keistis duomenimis su bet kuriuo įrenginiu iš domeno <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Diegiant <ph name="BEGIN_BOLD" />bus ištrinti visi standžiojo disko duomenys<ph name="END_BOLD" />. Įsitikinkite, kad kuriamos atsarginės duomenų kopijos.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Pradėto diegimo proceso atšaukti negalima.<ph name="END_PARAGRAPH2" /></translation> @@ -2101,7 +2102,6 @@ <translation id="3088052000289932193">Svetainėje naudojamas MIDI įrenginys</translation> <translation id="3088128611727407543">Ruošiamas programos profilis...</translation> <translation id="3088325635286126843">&Pervardyti...</translation> -<translation id="3089064280130434511">Blokuoti svetaines, kad neatidarytų ir neįdėtų langų jūsų ekranuose</translation> <translation id="3089137131053189723">Paieška išvalyta</translation> <translation id="3090589793601454425">Neperkelti</translation> <translation id="3090819949319990166">Nepavyko nukopijuoti išorinio CRX failo į „<ph name="TEMP_CRX_FILE" />“.</translation> @@ -3720,6 +3720,7 @@ <translation id="4813136279048157860">Mano vaizdai</translation> <translation id="4813512666221746211">Tinklo klaida</translation> <translation id="4814378367953456825">Įveskite šio kontrolinio kodo pavadinimą</translation> +<translation id="481574578487123132">Susieti įrenginiai</translation> <translation id="4816097470512964351">„<ph name="DEVICE" />“, išsami informacija</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Ištrinta 1 žymė}one{Ištrinta {COUNT} žymė}few{Ištrintos {COUNT} žymės}many{Ištrinta {COUNT} žymės}other{Ištrinta {COUNT} žymių}}</translation> <translation id="4819607494758673676">„Google“ padėjėjo pranešimai</translation> @@ -3734,7 +3735,6 @@ <translation id="482952334869563894">USB įrenginiai (teikėjas: „<ph name="VENDOR_ID" />“)</translation> <translation id="4829768588131278040">Nustatyti PIN kodą</translation> <translation id="4830026649400230050">Visi tinkami atsisiuntimai nukreipiami į organizacijos „<ph name="WEB_DRIVE" />“ paskyrą.</translation> -<translation id="4830121310592638841">Klausti, kai svetainė nori atidaryti ir įdėti langų jūsų ekranuose</translation> <translation id="4830502475412647084">Įdiegiamas OS naujinys</translation> <translation id="4830573902900904548">„<ph name="DEVICE_TYPE" />“ įrenginiui nepavyksta prisijungti prie interneto naudojant „<ph name="NETWORK_NAME" />“. Pasirinkite kitą tinklą. <ph name="LEARN_MORE_LINK_START" />Sužinokite daugiau<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Rastas vienas spausdintuvas iš spausdinimo serverio</translation> @@ -4435,6 +4435,7 @@ <translation id="5563234215388768762">Ieškoti sistemoje „Google“ arba įvesti URL</translation> <translation id="5565735124758917034">Aktyvus</translation> <translation id="5568069709869097550">Nepavyksta prisijungti</translation> +<translation id="5571066253365925590">„Bluetooth“ įgalinta</translation> <translation id="5571092938913434726">Bendrieji medijos valdikliai</translation> <translation id="5571832155627049070">Tinkinkite savo profilį</translation> <translation id="5572851009514199876">Pirmiausia prisijunkite prie „Chrome“, kad „Chrome“ galėtų patikrinti, ar jums leidžiama pasiekti šią svetainę.</translation> @@ -4833,6 +4834,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šią programą.}one{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šias programas.}few{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šias programas.}many{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šias programas.}other{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šias programas.}}</translation> <translation id="5997337190805127100">Sužinokite daugiau apie prieigą prie svetainės</translation> <translation id="6000758707621254961">Rezultatų pagal užklausą „<ph name="SEARCH_TEXT" />“: <ph name="RESULT_COUNT" /></translation> +<translation id="6002122790816966947">Jūsų įrenginiai</translation> <translation id="6002210667729577411">Grupės perkėlimas į naują langą</translation> <translation id="6002452033851752583">Slaptažodis ištrintas iš „Google“ paskyros</translation> <translation id="6002458620803359783">Pageidaujami balsai</translation> @@ -5639,7 +5641,6 @@ <translation id="6833996806551876956">„Privacy Sandbox“ bandomasis laikotarpis</translation> <translation id="6834652994408928492">Tamsus režimas automatiškai įsijungs saulei leidžiantis</translation> <translation id="6835762382653651563">Prisijunkite prie interneto, kad galėtumėte atnaujinti „<ph name="DEVICE_TYPE" />“.</translation> -<translation id="6838034009068684089">Klausti, kai svetainė nori atidaryti ir įdėti langų jūsų ekranuose (rekomenduojama)</translation> <translation id="6839225236531462745">Sertifikato ištrynimo klaida</translation> <translation id="6839916869147598086">Prisijungimas pakeistas</translation> <translation id="6840155290835956714">Klausti prieš siunčiant</translation> @@ -6550,7 +6551,6 @@ <translation id="7775694664330414886">Skirtukas perkeltas į grupę be pavadinimo – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> galės peržiūrėti failus aplanke „<ph name="FOLDERNAME" />“, kol uždarysite visus šios svetainės skirtukus</translation> <translation id="7776701556330691704">Balsų nerasta</translation> -<translation id="7777284276915203144">Jūsų slaptažodžiai šifruojami įrenginyje prieš išsaugant juos „Google“ slaptažodžių tvarkytuvėje</translation> <translation id="7781335840981796660">Bus pašalintos visos naudotojo paskyros ir vietiniai duomenys.</translation> <translation id="7782102568078991263">Daugiau „Google“ pasiūlymų nėra</translation> <translation id="7782717250816686129">Išsaugoti nuolatinius duomenis prisijungimo ekrane ir įvesti prisijungimo pradedant seansą.</translation> @@ -7203,7 +7203,6 @@ <translation id="8428634594422941299">Supratau</translation> <translation id="84297032718407999">Būsite atjungti po <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Rodyti palietimus</translation> -<translation id="8431730749911729314">Šifruokite slaptažodžius įrenginyje prieš išsaugodami juos „Google“ slaptažodžių tvarkytuvėje</translation> <translation id="8434480141477525001">„Native Client“ derinimo prievadas</translation> <translation id="8435395510592618362">Patvirtinkite savo tapatybę naudodami „<ph name="APP_NAME" />“</translation> <translation id="8437209419043462667">JAV</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 9306293..c72338c 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -1261,6 +1261,7 @@ <translation id="2263679799334060788">Mēs novērtējam jūsu atsauksmes — tās palīdz mums uzlabot pakalpojumu Google Cast. Lai saņemtu palīdzību apraides problēmu novēršanā, apmeklējiet <ph name="BEGIN_LINK" />palīdzības centru<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Vaicāt, ja vietne vēlas piekļūt Bluetooth ierīcēm (ieteicams)</translation> <translation id="2266957463645820432">IPP, izmantojot USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth atspējots</translation> <translation id="2270450558902169558">apmainīties datiem ar jebkuru ierīci domēnā <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Instalēšanas laikā <ph name="BEGIN_BOLD" />no cietā diska tiks izdzēsti visi jūsu dati<ph name="END_BOLD" />. Noteikti dublējiet savus datus.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Kad instalēšana būs sākta, to nevarēs atcelt.<ph name="END_PARAGRAPH2" /></translation> @@ -2085,7 +2086,6 @@ <translation id="3088052000289932193">Vietnē tiek izmantota MIDI ierīce</translation> <translation id="3088128611727407543">Notiek lietotnes profila sagatavošana...</translation> <translation id="3088325635286126843">&Pārdēvēt...</translation> -<translation id="3089064280130434511">Neļaut vietnēm atvērt un izvietot logus jūsu ekrānos</translation> <translation id="3089137131053189723">Meklēšana notīrīta</translation> <translation id="3090589793601454425">Nepārvietot</translation> <translation id="3090819949319990166">Ārējo .crx failu nevar kopēt uz failu <ph name="TEMP_CRX_FILE" />.</translation> @@ -3214,6 +3214,7 @@ <translation id="4275830172053184480">Ierīces restartēšana</translation> <translation id="4278390842282768270">Atļauts</translation> <translation id="4279129444466079448">Šajā ierīcē varat izmantot līdz pat <ph name="PROFILE_LIMIT" /> eSIM profiliem. Lai pievienotu vēl kādu profilu, vispirms noņemiet kādu no esošajiem profiliem.</translation> +<translation id="4280325816108262082">Ierīcē tiks automātiski pārtraukts savienojums, kad tā būs izslēgta vai netiks izmantota.</translation> <translation id="4281844954008187215">Google pakalpojumu noteikumi</translation> <translation id="4282196459431406533">Smart Lock ir ieslēgta</translation> <translation id="4284755288573763878">Vai izslēgt uzlaboto aizsardzību?</translation> @@ -3702,6 +3703,7 @@ <translation id="4813136279048157860">Mani attēli</translation> <translation id="4813512666221746211">Tīkla kļūda</translation> <translation id="4814378367953456825">Ievadiet šī pirksta nospieduma nosaukumu.</translation> +<translation id="481574578487123132">Saistītās ierīces</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, informācija</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Izdzēsta viena grāmatzīme}zero{Izdzēstas {COUNT} grāmatzīmes}one{Izdzēsta {COUNT} grāmatzīme}other{Izdzēstas {COUNT} grāmatzīmes}}</translation> <translation id="4819607494758673676">Google asistenta paziņojumi</translation> @@ -3716,7 +3718,6 @@ <translation id="482952334869563894">USB ierīces, ko piedāvā pakalpojumu sniedzējs <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Iestatīt PIN</translation> <translation id="4830026649400230050">Visas piemērotās lejupielādes tiek novirzītas uz jūsu organizācijas <ph name="WEB_DRIVE" /> kontu.</translation> -<translation id="4830121310592638841">Vaicāt, ja vietne pieprasa atvērt un izvietot logus jūsu ekrānos</translation> <translation id="4830502475412647084">OS atjauninājuma instalēšana</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> ierīcē nevar izveidot savienojumu ar internetu, izmantojot tīklu <ph name="NETWORK_NAME" />. Lūdzu, izvēlieties citu tīklu. <ph name="LEARN_MORE_LINK_START" />Uzziniet vairāk<ph name="LEARN_MORE_LINK_END" />.</translation> <translation id="4833683849865011483">Atrasts 1 printeris no drukas servera.</translation> @@ -4333,6 +4334,7 @@ <translation id="5490721031479690399">Atvienot Bluetooth ierīci</translation> <translation id="5490798133083738649">Atļauja sistēmai Linux piekļūt mikrofonam</translation> <translation id="549211519852037402">Bēša un balta</translation> +<translation id="5492637351392383067">Šifrēšana ierīcē</translation> <translation id="5493792505296048976">ekrāns ieslēgts</translation> <translation id="5494016731375030300">Nesen aizvērtās cilnes</translation> <translation id="5494362494988149300">Atvērt, ka&d lejupielāde pabeigta</translation> @@ -4416,6 +4418,7 @@ <translation id="5563234215388768762">Meklēt Google tīklā vai ievadīt URL</translation> <translation id="5565735124758917034">Aktīvs</translation> <translation id="5568069709869097550">Nevarat pieteikties</translation> +<translation id="5571066253365925590">Bluetooth iespējots</translation> <translation id="5571092938913434726">Globālās multivides vadīklas</translation> <translation id="5571832155627049070">Profila pielāgošana</translation> <translation id="5572851009514199876">Lūdzu, palaidiet pārlūku Chrome un pierakstieties tajā, lai pārlūkā Chrome varētu pārbaudīt, vai jums ir atļauja piekļūt šai vietnei.</translation> @@ -4813,6 +4816,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Lai nodrošinātu iespēju turpmāk pārlūkot tīmekli, palūdziet administratoram noņemt šo lietojumprogrammu.}zero{Lai nodrošinātu iespēju turpmāk pārlūkot tīmekli, palūdziet administratoram noņemt šīs lietojumprogrammas.}one{Lai nodrošinātu iespēju turpmāk pārlūkot tīmekli, palūdziet administratoram noņemt šīs lietojumprogrammas.}other{Lai nodrošinātu iespēju turpmāk pārlūkot tīmekli, palūdziet administratoram noņemt šīs lietojumprogrammas.}}</translation> <translation id="5997337190805127100">Plašāka informācija par vietnes piekļuvi</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> rezultāti vaicājumam “<ph name="SEARCH_TEXT" />”</translation> +<translation id="6002122790816966947">Jūsu ierīces</translation> <translation id="6002210667729577411">Pārvietot kopu uz jaunu logu</translation> <translation id="6002452033851752583">Parole tika izdzēsta no Google konta</translation> <translation id="6002458620803359783">Vēlamās balsis</translation> @@ -5619,7 +5623,6 @@ <translation id="6833996806551876956">Privacy Sandbox izmēģinājuma periods</translation> <translation id="6834652994408928492">Tumšais režīms tiks automātiski ieslēgts saulrietā</translation> <translation id="6835762382653651563">Lai atjauninātu savu <ph name="DEVICE_TYPE" /> ierīci, lūdzu, izveidojiet savienojumu ar internetu.</translation> -<translation id="6838034009068684089">Vaicāt, ja vietne pieprasa atvērt un izvietot logus jūsu ekrānos (ieteicams)</translation> <translation id="6839225236531462745">Sertifikāta dzēšanas kļūda</translation> <translation id="6839916869147598086">Pierakstīšanās ir mainīta</translation> <translation id="6840155290835956714">Jautāt pirms sūtīšanas</translation> @@ -7972,6 +7975,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> nevar atvērt šajā mapē esošos failus, jo tajā ir arī sistēmas faili</translation> <translation id="950307215746360464">Iestatīšanas ceļvedis</translation> <translation id="951991426597076286">Noraidīt</translation> +<translation id="952471655966876828">Ierīcē tiks automātiski izveidots savienojums, kad tā būs ieslēgta vai tiks izmantota.</translation> <translation id="953434574221655299">Atļauts rādīt, kad jūs aktīvi lietojat savu ierīci</translation> <translation id="956500788634395331">Jūs esat aizsargāts pret potenciāli kaitīgiem paplašinājumiem.</translation> <translation id="957960681186851048">Šī vietne mēģināja automātiski lejupielādēt vairākus failus</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index f4872e6..10de158 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -1275,6 +1275,7 @@ Центарот за помош<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Прашувај кога некој сајт сака да пристапи до Bluetooth-уредите (препорачано)</translation> <translation id="2266957463645820432">IPP преку USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth е оневозможен</translation> <translation id="2270450558902169558">Разменете податоци со кој било уред во доменот <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Инсталацијата <ph name="BEGIN_BOLD" />ќе го избрише целиот хард диск<ph name="END_BOLD" />. Уверете се дека имате направено бекап на вашите податоци.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Откако ќе започне, инсталирањето нема да може да се откаже.<ph name="END_PARAGRAPH2" /></translation> @@ -2099,7 +2100,6 @@ <translation id="3088052000289932193">Сајтот користи MIDI</translation> <translation id="3088128611727407543">Се подготвува профилот на апликацијата…</translation> <translation id="3088325635286126843">&Преименувај...</translation> -<translation id="3089064280130434511">Не дозволувајте сајтовите да отвораат и поставуваат прозорци на екраните</translation> <translation id="3089137131053189723">Пребарувањето е избришано</translation> <translation id="3090589793601454425">Не преместувај</translation> <translation id="3090819949319990166">Не може да ја копира надворешната crx датотека на <ph name="TEMP_CRX_FILE" />.</translation> @@ -3718,6 +3718,7 @@ <translation id="4813136279048157860">Мои слики</translation> <translation id="4813512666221746211">Грешка на мрежа</translation> <translation id="4814378367953456825">Внесете име за отпечатоков</translation> +<translation id="481574578487123132">Поврзани уреди</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, детали</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 обележувач е избришан}one{{COUNT} обележувач е избришан}other{{COUNT} обележувачи се избришани}}</translation> <translation id="4819607494758673676">Известувања на „Помошникот на Google“</translation> @@ -3732,7 +3733,6 @@ <translation id="482952334869563894">USB-уреди од продавачот <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Постави PIN</translation> <translation id="4830026649400230050">Сите подобни преземања се насочуваат кон сметката <ph name="WEB_DRIVE" /> на вашата организација.</translation> -<translation id="4830121310592638841">Прашувај кога некој сајт сака да отвора и поставува прозорци на екраните</translation> <translation id="4830502475412647084">Се инсталира ажурирање на ОС</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> не може да се поврзе на интернет преку <ph name="NETWORK_NAME" />. Изберете друга мрежа. <ph name="LEARN_MORE_LINK_START" />Дознајте повеќе<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Најден е 1 печатач од серверот за печатење</translation> @@ -4433,6 +4433,7 @@ <translation id="5563234215388768762">Пребарајте на Google или напишете URL</translation> <translation id="5565735124758917034">Активно</translation> <translation id="5568069709869097550">Не може да се најавите</translation> +<translation id="5571066253365925590">Bluetooth е овозможен</translation> <translation id="5571092938913434726">Глобални контроли за аудиовизуелни содржини</translation> <translation id="5571832155627049070">Приспособете го вашиот профил</translation> <translation id="5572851009514199876">Започнете и најавете се на Chrome за да може Chrome да провери дали ви е дозволено да пристапите на сајтов.</translation> @@ -4830,6 +4831,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{За да може и понатаму да прелистувате на интернет, побарајте од администраторот да ја отстрани апликацијава.}one{За да може и понатаму да прелистувате на интернет, побарајте од администраторот да ги отстрани апликацииве.}other{За да може и понатаму да прелистувате на интернет, побарајте од администраторот да ги отстрани апликацииве.}}</translation> <translation id="5997337190805127100">Дознајте повеќе за пристап до сајтови</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> резултати за „<ph name="SEARCH_TEXT" />“</translation> +<translation id="6002122790816966947">Ваши уреди</translation> <translation id="6002210667729577411">Преместете ја групата во нов прозорец</translation> <translation id="6002452033851752583">Лозинката е избришана од сметката на Google</translation> <translation id="6002458620803359783">Претпочитани гласови</translation> @@ -5636,7 +5638,6 @@ <translation id="6833996806551876956">Пробен период за Sandbox за приватност</translation> <translation id="6834652994408928492">Темниот режим ќе се вклучи автоматски на зајдисонце</translation> <translation id="6835762382653651563">Поврзете се на интернет за да го ажурирате <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Прашувај кога некој сајт сака да отвора и поставува прозорци на екраните (препорачано)</translation> <translation id="6839225236531462745">Грешка при бришење сертификат</translation> <translation id="6839916869147598086">Најавувањето се промени</translation> <translation id="6840155290835956714">Прашај пред да испратиш</translation> @@ -6547,7 +6548,6 @@ <translation id="7775694664330414886">Картичката е преместена во неименувана група - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> ќе може да прегледува датотеки во <ph name="FOLDERNAME" /> сѐ додека не ги затворите сите картички за сајтов</translation> <translation id="7776701556330691704">Не се најдени гласови</translation> -<translation id="7777284276915203144">Лозинките се шифрираат на уредот пред да се зачуваат во „Управникот со лозинки на Google“</translation> <translation id="7781335840981796660">Сите кориснички сметки и локални податоци ќе бидат отстранети.</translation> <translation id="7782102568078991263">Нема повеќе предлози од Google</translation> <translation id="7782717250816686129">Складирајте постојани податоци на екранот за најавување и вметнувајте акредитиви во сесијата.</translation> @@ -7202,7 +7202,6 @@ <translation id="8428634594422941299">Сфатив</translation> <translation id="84297032718407999">Ќе ве одјавиме за <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Прикажувај допири</translation> -<translation id="8431730749911729314">Шифрирајте ги лозинките на уредот пред да се зачуваат во „Управникот со лозинки на Google“</translation> <translation id="8434480141477525001">Порта за откривање грешки на NaCl</translation> <translation id="8435395510592618362">Потврдете го вашиот идентитет со <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 7ce02a0..a7645bb 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -242,6 +242,7 @@ <translation id="1235458158152011030">അറിയാവുന്ന നെറ്റ്വർക്കുകൾ</translation> <translation id="123578888592755962">ഡിസ്ക് നിറഞ്ഞു</translation> <translation id="1235924639474699896">{COUNT,plural, =1{ടെക്സ്റ്റ്}other{# ടെക്സ്റ്റുകൾ}}</translation> +<translation id="1236009322878349843">ഫോൺ എഡിറ്റ് ചെയ്യുക</translation> <translation id="1239594683407221485">Files ആപ്പിൽ ഉപകരണത്തിന്റെ ഉള്ളടക്കം അടുത്തറിയൂ.</translation> <translation id="1241066500170667906"><ph name="EXPERIMENT_NAME" /> എന്നതിനുള്ള പരീക്ഷണ നില തിരഞ്ഞെടുക്കുക</translation> <translation id="124116460088058876">കൂടുതൽ ഭാഷകൾ</translation> @@ -1258,6 +1259,7 @@ <translation id="2263679799334060788">Google Cast മെച്ചപ്പെടുത്താൻ നിങ്ങളുടെ ഫീഡ്ബാക്ക്, ഞങ്ങളെ സഹായിക്കുന്നു. ഇത് അഭിനന്ദനാർഹമാണ്. കാസ്റ്റിലെ പ്രശ്ന പരിഹാരത്തിന്, <ph name="BEGIN_LINK" /> സഹായകേന്ദ്രം<ph name="END_LINK" /> സന്ദർശിക്കുക.</translation> <translation id="22665427234727190">Bluetooth ഉപകരണങ്ങൾ ആക്സസ് ചെയ്യാൻ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നു)</translation> <translation id="2266957463645820432">USB (IPPUSB) വഴി IPP</translation> +<translation id="2268130516524549846">Bluetooth അപ്രാപ്തമാക്കി</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> എന്ന ഡൊമെയ്നിലുള്ള ഏത് ഉപകരണം ഉപയോഗിച്ചും ഡാറ്റ എക്സ്ചേഞ്ച് ചെയ്യുക</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ഇൻസ്റ്റാൾ ചെയ്യുന്നത് <ph name="BEGIN_BOLD" />നിങ്ങളുടെ ഹാർഡ് ഡ്രൈവ് മുഴുവനായും മായ്ക്കും<ph name="END_BOLD" />. നിങ്ങളുടെ ഡാറ്റ ബാക്കപ്പെടുത്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ഇൻസ്റ്റാൾ ചെയ്യാൻ ആരംഭിച്ചാൽ അത് റദ്ദാക്കാനാകില്ല.<ph name="END_PARAGRAPH2" /></translation> @@ -1941,6 +1943,7 @@ <translation id="2939908794993783865">നിഷ്ക്രിയമായ കൂടുതൽ സൈറ്റുകൾ</translation> <translation id="2939938020978911855">ലഭ്യമായ Bluetooth ഉപകരണങ്ങൾ കാണിക്കുക</translation> <translation id="2941112035454246133">താഴ്ന്ന</translation> +<translation id="2941696810925320401">നിങ്ങളുടെ സ്ക്രീനിൽ അധിക ഡോക്യുമെന്റുകളോ പൂർണ്ണ സ്ക്രീനിലുള്ള ഉള്ളടക്കമോ കാണിക്കാൻ സൈറ്റുകൾ പൊതുവെ വിൻഡോകൾ തുറന്ന് വയ്ക്കാറുണ്ട്</translation> <translation id="2942279350258725020">Android Messages</translation> <translation id="2942560570858569904">കാത്തിരിക്കുന്നു...</translation> <translation id="2942581856830209953">ഈ പേജ് ഇഷ്ടാനുസൃതമാക്കുക</translation> @@ -2082,7 +2085,6 @@ <translation id="3088052000289932193">സൈറ്റ് MIDI ഉപയോഗിക്കുന്നു</translation> <translation id="3088128611727407543">ആപ്പ് പ്രൊഫൈൽ തയ്യാറാക്കുന്നു...</translation> <translation id="3088325635286126843">&പേരുമാറ്റുക...</translation> -<translation id="3089064280130434511">നിങ്ങളുടെ സ്ക്രീനുകളിൽ വിൻഡോ തുറന്ന് വയ്ക്കുന്നതിൽ നിന്ന് സൈറ്റുകളെ ബ്ലോക്ക് ചെയ്യുക</translation> <translation id="3089137131053189723">തിരയൽ മായ്ച്ചു</translation> <translation id="3090589793601454425">നീക്കരുത്</translation> <translation id="3090819949319990166"><ph name="TEMP_CRX_FILE" /> എന്നതിലേക്ക് ബാഹ്യ crx ഫയൽ പകർത്താനാവില്ല.</translation> @@ -2094,6 +2096,7 @@ <translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{ദോഷകരമാകാൻ സാധ്യതയുള്ള ഒരു വിപുലീകരണം ഓഫാണ്. നിങ്ങൾക്ക് ഇത് നീക്കം ചെയ്യാനും കഴിയും.}other{ദോഷകരമാകാൻ സാധ്യതയുള്ള {NUM_EXTENSIONS} വിപുലീകരണങ്ങൾ ഓഫാണ്. നിങ്ങൾക്ക് ഇവ നീക്കം ചെയ്യാനും കഴിയും.}}</translation> <translation id="3101126716313987672">മങ്ങിയ വെളിച്ചം</translation> <translation id="3101709781009526431">തീയതിയും സമയവും</translation> +<translation id="3103451787721578293">ഈ ഡാറ്റ അപ്ലോഡ് ചെയ്യുന്നതിന് കാരണം നൽകുക:</translation> <translation id="3103941660000130485">Linux അപ്ഗ്രേഡ് ചെയ്യുന്നതിൽ പിശക്</translation> <translation id="3105796011181310544">തിരികെ Google-ലേക്ക് മാറ്റണോ?</translation> <translation id="310671807099593501">സൈറ്റ്, bluetooth ഉപയോഗിക്കുന്നു</translation> @@ -2620,6 +2623,7 @@ <translation id="3670113805793654926">ഏത് വെൻഡറിൽ നിന്നുമുള്ള ഉപകരണങ്ങൾ</translation> <translation id="3670229581627177274">Bluetooth ഓണാക്കുക</translation> <translation id="3672681487849735243">ഒരു ഫാക്ടറി പിശക് കണ്ടെത്തി</translation> +<translation id="3673097791729989571">സൈൻ ഇൻ ഹോസ്റ്റ് ചെയ്യുന്നത് <ph name="SAML_DOMAIN" /> ആണ്</translation> <translation id="367645871420407123">പരീക്ഷണ ചിത്ര മൂല്യത്തിലേക്ക് ഡീഫോൾട്ട് റൂട്ട് പാസ്വേഡ് സജ്ജീകരിക്കണമെങ്കിൽ ശൂന്യമായിടുക</translation> <translation id="3677106374019847299">ഇഷ്ടാനുസൃത ദാതാവിനെ നൽകുക</translation> <translation id="3677911431265050325">മൊബൈൽ സൈറ്റ് അഭ്യർത്ഥിക്കുക</translation> @@ -3402,6 +3406,7 @@ <translation id="4481467543947557978">സർവീസ് വർക്കർ</translation> <translation id="4481530544597605423">ജോടി മാറ്റിയ ഉപകരണങ്ങൾ</translation> <translation id="4482990632723642375">ഏറ്റവും അവസാനം അടച്ച ടാബ്</translation> +<translation id="4484922932728109422">വിൻഡോകൾ തുറന്ന് വയ്ക്കുന്നതിന് നിങ്ങളുടെ സ്ക്രീനുകളുടെ വിവരങ്ങൾ ഉപയോഗിക്കാൻ സൈറ്റുകളെ അനുവദിക്കരുത്</translation> <translation id="4487489714832036847">Chromebooks പരമ്പരാഗത സോഫ്റ്റ്വെയറിന് പകരം ആപ്പുകൾ ഉപയോഗിക്കുന്നു. ഉൽപ്പാദനക്ഷമത, വിനോദം എന്നിവയ്ക്കും മറ്റും ആപ്പുകൾ നേടുക.</translation> <translation id="4488257340342212116">നിങ്ങളുടെ ക്യാമറ ഉപയോഗിക്കാൻ അനുവദിച്ചിരിക്കുന്നു</translation> <translation id="4488502501195719518">എല്ലാ ഡാറ്റയും മായ്ക്കണോ?</translation> @@ -3484,6 +3489,7 @@ <translation id="4565917129334815774">സിസ്റ്റം ലോഗുകൾ സംഭരിക്കുക</translation> <translation id="4566417217121906555">മൈക്രോഫോൺ മ്യൂട്ട് ചെയ്യുക</translation> <translation id="456717285308019641">വിവർത്തനം ചെയ്യേണ്ട പേജ് ഭാഷ</translation> +<translation id="4567512141633030272">സൈൻ ഇൻ ഓപ്ഷൻ തെറ്റാണോ?</translation> <translation id="4567533462991917415">സജ്ജീകരിച്ചതിനുശേഷം, നിങ്ങൾക്ക് എപ്പോൾ വേണമെങ്കിലും കൂടുതൽ ആളുകളെ ചേർക്കാം. ഓരോ വ്യക്തിക്കും അവരുടെ അക്കൗണ്ട് വ്യക്തിപരമാക്കാനും ഡാറ്റ സ്വകാര്യമായി സൂക്ഷിക്കാനും കഴിയും.</translation> <translation id="4567772783389002344">പദം ചേർക്കുക</translation> <translation id="4568025708905928793">ഒരു സുരക്ഷാ കീ അഭ്യർത്ഥിക്കുന്നു</translation> @@ -3699,6 +3705,7 @@ <translation id="4813136279048157860">എന്റെ ചിത്രങ്ങൾ</translation> <translation id="4813512666221746211">നെറ്റ്വര്ക്ക് പിശക്</translation> <translation id="4814378367953456825">ഈ ഫിംഗർപ്രിന്റിന് ഒരു പേര് നൽകുക</translation> +<translation id="481574578487123132">ലിങ്ക് ചെയ്ത ഉപകരണങ്ങൾ</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, വിശദാംശങ്ങൾ</translation> <translation id="4816336393325437908">{COUNT,plural, =1{ഒരു ബുക്ക്മാർക്ക് ഇല്ലാതാക്കി}other{{COUNT} ബുക്ക്മാർക്കുകൾ ഇല്ലാതാക്കി}}</translation> <translation id="4819607494758673676">Google Assistant അറിയിപ്പുകൾ</translation> @@ -3713,7 +3720,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> എന്ന വെൻഡറിൽ നിന്നുള്ള USB ഉപകരണങ്ങൾ</translation> <translation id="4829768588131278040">പിൻ നമ്പർ സജ്ജമാക്കുക</translation> <translation id="4830026649400230050">യോഗ്യമായ എല്ലാ ഡൗൺലോഡുകളും സ്ഥാപനത്തിന്റെ <ph name="WEB_DRIVE" /> അക്കൗണ്ടുകളിലേക്ക് റൂട്ട് ചെയ്യുന്നു.</translation> -<translation id="4830121310592638841">ഒരു സൈറ്റിന് നിങ്ങളുടെ സ്ക്രീനുകളിൽ വിൻഡോകൾ തുറന്ന് വയ്ക്കണമെന്നുള്ളപ്പോൾ ചോദിക്കുക</translation> <translation id="4830502475412647084">OS അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുന്നു</translation> <translation id="4830573902900904548"><ph name="NETWORK_NAME" /> ഉപയോഗിച്ച് നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> ഇന്റർനെറ്റിൽ കണക്റ്റ് ചെയ്യാനാകുന്നില്ല. മറ്റൊരു നെറ്റ്വർക്ക് തിരഞ്ഞെടുക്കുക. <ph name="LEARN_MORE_LINK_START" />കൂടുതലറിയുക<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">പ്രിന്റ് സെർവറിൽ നിന്ന് ഒരു പ്രിന്റർ കണ്ടെത്തി</translation> @@ -3729,6 +3735,7 @@ <translation id="4841741146571978176">ആവശ്യമായ വെർച്വൽ മെഷീൻ നിലവിലില്ല. തുടരുന്നതിന് <ph name="VM_TYPE" /> സജ്ജീകരിച്ച് നോക്കുക</translation> <translation id="4842976633412754305">ഈ പേജ്, പരിശോധിച്ചുറപ്പി ഉറവിടങ്ങളിൽ നിന്ന് സ്ക്രിപ്റ്റുകൾ ലോഡ് ചെയ്യാൻ ശ്രമിക്കുന്നു.</translation> <translation id="4844333629810439236">മറ്റ് കീബോർഡുകൾ</translation> +<translation id="4844633725025837809">അധിക സുരക്ഷയ്ക്ക്, Google പാസ്വേഡ് മാനേജറിലേക്ക് സംരക്ഷിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്വേഡുകൾ എൻക്രിപ്റ്റ് ചെയ്യുക</translation> <translation id="4846680374085650406">നിങ്ങൾ ഈ ക്രമീകരണത്തിനായി അഡ്മിനിസ്ട്രേറ്ററുടെ ശുപാർശ പാലിക്കുന്നു.</translation> <translation id="4847902821209177679"><ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" /> തിരഞ്ഞെടുത്തു, <ph name="TOPIC_SOURCE" /> ആൽബങ്ങൾ തിരഞ്ഞെടുക്കാൻ 'Enter' അമർത്തുക</translation> <translation id="4848191975108266266">Google Assistant "Ok Google"</translation> @@ -3870,6 +3877,7 @@ <translation id="499165176004408815">ഉയർന്ന ദൃശ്യതീവ്രത മോഡ് ഉപയോഗിക്കുക</translation> <translation id="4992458225095111526">പവർവാഷ് സ്ഥിരീകരിക്കുക</translation> <translation id="4992473555164495036">ലഭ്യമായ ഇൻപുട്ട് രീതികളെ നിങ്ങളുടെ അഡ്മിൻ പരിമിതപ്പെടുത്തി.</translation> +<translation id="4992984395680162305">ഈ ഉപകരണങ്ങൾ QR കോഡ് സ്കാൻ ചെയ്ത് ലിങ്ക് ചെയ്തവയാണ്.</translation> <translation id="4994474651455208930">പ്രോട്ടോകോളുകളുടെ ഡിഫോൾട്ടായ കൈകാര്യം ചെയ്യുന്ന സംവിധാനമായി മാറാനുള്ള അനുവാദം ചോദിക്കാൻ സൈറ്റുകളെ അനുവദിക്കുന്നു</translation> <translation id="4994754230098574403">സജ്ജീകരിക്കുന്നു</translation> <translation id="4995131849631312693"><ph name="BEGIN_PARAGRAPH1" /><ph name="DEVICE_OS" /> എന്നതിന് ഈ ഉപകരണത്തിന്റെ ഉടമസ്ഥത ഏറ്റെടുക്കാൻ, എൻറോൾ ചെയ്യുന്നതിന് മുമ്പ് TPM മായ്ക്കേണ്ടതുണ്ട്.<ph name="END_PARAGRAPH1" /> @@ -3990,6 +3998,7 @@ <translation id="5123433949759960244">ബാസ്ക്കറ്റ്ബോൾ</translation> <translation id="5125751979347152379">URL അസാധുവാണ്.</translation> <translation id="5126611267288187364">മാറ്റങ്ങൾ കാണുക</translation> +<translation id="5127242257756472928">വിൻഡോകൾ തുറന്ന് വയ്ക്കുന്നതിന് നിങ്ങളുടെ സ്ക്രീനുകളുടെ വിവരങ്ങൾ ഉപയോഗിക്കാൻ അനുവദിച്ചിട്ടില്ല</translation> <translation id="5127620150973591153">സുരക്ഷിത കണക്ഷൻ ഐഡി: <ph name="TOKEN" /></translation> <translation id="5127805178023152808">സമന്വയം ഓഫാണ്</translation> <translation id="5127881134400491887">നെറ്റ്വർക്ക് കണക്ഷനുകൾ നിയന്ത്രിക്കുക</translation> @@ -4102,6 +4111,7 @@ <translation id="5243522832766285132">അൽപ്പസമയത്തിനുള്ളിൽ വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="5244474230056479698"><ph name="EMAIL" /> ഇമെയിലിലേക്ക് സമന്വയിപ്പിക്കുന്നു</translation> <translation id="5245610266855777041">സ്കൂൾ അക്കൗണ്ട് ഉപയോഗിച്ച് ആരംഭിക്കുക</translation> +<translation id="5246036036039717045">ഈ ഉപകരണങ്ങളിൽ നിങ്ങൾ Chrome-ൽ സൈൻ ഇൻ ചെയ്തിരിക്കുന്നതിനാൽ അവ സുരക്ഷാ കീകളായി ഉപയോഗിക്കാനാകും.</translation> <translation id="5246282308050205996"><ph name="APP_NAME" /> എന്നത് ക്രാഷ് ചെയ്തു. ആപ്പ് പുനരാംഭിക്കുന്നതിനായി ഈ ബലൂണ് ക്ലിക്ക് ചെയ്യുക.</translation> <translation id="5247051749037287028">നാമം പ്രദർശിപ്പിക്കുക (ഓപ്ഷണൽ)</translation> <translation id="5249624017678798539">ഡൗൺലോഡ് പൂർത്തിയാകുന്നതിന് മുമ്പ് ബ്രൗസർ ക്രാഷായി.</translation> @@ -4414,6 +4424,7 @@ <translation id="5563234215388768762">Google-ൽ തിരയുക അല്ലെങ്കിൽ URL ടൈപ്പ് ചെയ്യുക</translation> <translation id="5565735124758917034">സജീവമാണ്</translation> <translation id="5568069709869097550">സൈൻ ഇൻ ചെയ്യാനായില്ല</translation> +<translation id="5571066253365925590">Bluetooth പ്രവർത്തനക്ഷമമാക്കി</translation> <translation id="5571092938913434726">ആഗോള മീഡിയാ നിയന്ത്രണങ്ങൾ</translation> <translation id="5571832155627049070">നിങ്ങളുടെ പ്രൊഫൈൽ ഇഷ്ടാനുസൃതമാക്കുക</translation> <translation id="5572851009514199876">ആരംഭിച്ച് Chrome-ൽ സൈൻ ഇൻ ചെയ്യുന്നതിലൂടെ, നിങ്ങൾക്ക് ഈ സൈറ്റ് ആക്സസ് ചെയ്യാൻ അനുവാദമുണ്ടോയെന്ന് Chrome-ന് പരിശോധിക്കാനാവും.</translation> @@ -4590,6 +4601,7 @@ <translation id="5757375109985023827">പ്രിവ്യൂ ചെയ്യാൻ ഒരു ടാബ് തിരഞ്ഞെടുക്കുക</translation> <translation id="5758631781033351321">നിങ്ങളുടെ വായനാ ലിസ്റ്റ് ഇവിടെ കാണാം</translation> <translation id="5759728514498647443"><ph name="APP_NAME" /> വഴി പ്രിന്റ് ചെയ്യാൻ നിങ്ങൾ അയയ്ക്കുന്ന പ്രമാണങ്ങളെ <ph name="APP_NAME" /> എന്നതിന് വായിക്കാനാകുന്നു.</translation> +<translation id="5762787084360227629">Google അക്കൗണ്ട് വിവരങ്ങൾ നൽകുക</translation> <translation id="5763751966069581670">USB ഉപകരണങ്ങളൊന്നും കണ്ടില്ല</translation> <translation id="5764483294734785780">ഓഡിയോ ഇതുപോലെ സം&രക്ഷിക്കുക...</translation> <translation id="57646104491463491">തീയതി പരിഷ്കരിച്ചു</translation> @@ -4812,6 +4824,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{നിങ്ങൾക്ക് വെബ് ബ്രൗസ് ചെയ്യുന്നത് തുടരാനാകുമെന്ന് ഉറപ്പാക്കാൻ, ഈ ആപ്പ് നീക്കം ചെയ്യാൻ അഡ്മിനോട് ആവശ്യപ്പെടുക.}other{നിങ്ങൾക്ക് വെബ് ബ്രൗസ് ചെയ്യുന്നത് തുടരാനാകുമെന്ന് ഉറപ്പാക്കാൻ, ഈ ആപ്പുകൾ നീക്കം ചെയ്യാൻ അഡ്മിനോട് ആവശ്യപ്പെടുക.}}</translation> <translation id="5997337190805127100">സൈറ്റ് ആക്സസിനെക്കുറിച്ച് കൂടുതലറിയുക</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' എന്നതിനായി <ph name="RESULT_COUNT" /> ഫലങ്ങള്</translation> +<translation id="6002122790816966947">നിങ്ങളുടെ ഉപകരണങ്ങൾ</translation> <translation id="6002210667729577411">പുതിയ വിൻഡോയിലേക്ക് ഗ്രൂപ്പിനെ നീക്കുക</translation> <translation id="6002452033851752583">നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്ന് പാസ്വേഡ് ഇല്ലാതാക്കി</translation> <translation id="6002458620803359783">തിരഞ്ഞെടുത്ത ശബ്ദങ്ങൾ</translation> @@ -5619,7 +5632,6 @@ <translation id="6833996806551876956">സ്വകാര്യതാ സാൻഡ്ബോക്സ് ട്രയൽ</translation> <translation id="6834652994408928492">സൂര്യനസ്തമിക്കുമ്പോൾ ഡാർക്ക് മോഡ് സ്വയമേ ഓണാകും</translation> <translation id="6835762382653651563">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> അപ്ഡേറ്റ് ചെയ്യാൻ ഇന്റർനെറ്റിൽ കണക്റ്റ് ചെയ്യുക.</translation> -<translation id="6838034009068684089">ഒരു സൈറ്റിന് നിങ്ങളുടെ സ്ക്രീനുകളിൽ വിൻഡോകൾ തുറന്ന് വയ്ക്കണമെന്നുള്ളപ്പോൾ ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നു)</translation> <translation id="6839225236531462745">സര്ട്ടിഫിക്കറ്റ് ഇല്ലാതാക്കല് പിശക്</translation> <translation id="6839916869147598086">സൈൻ ഇൻ മാറ്റി</translation> <translation id="6840155290835956714">അയയ്ക്കുന്നതിന് മുമ്പ് ചോദിക്കുക</translation> @@ -5736,6 +5748,7 @@ <translation id="6965382102122355670">ശരി</translation> <translation id="6965648386495488594">പോര്ട്ട്</translation> <translation id="6965978654500191972">ഉപകരണം</translation> +<translation id="6966370001499648704">നിങ്ങൾക്ക് സുരക്ഷാ കീകൾ ആയി ഉപയോഗിക്കേണ്ട ഫോണുകൾ നിയന്ത്രിക്കുക</translation> <translation id="6967430741871315905">ഉപകരണം അനുവദിച്ചിട്ടുണ്ടോയെന്ന് പരിശോധിക്കാനാകുന്നില്ല</translation> <translation id="696780070563539690">വ്യത്യസ്ത സൈറ്റുകളിലുടനീളമുള്ള നിങ്ങളുടെ ബ്രൗസിംഗ് ആക്റ്റിവിറ്റി കാണാൻ സൈറ്റുകൾക്ക് നിങ്ങളുടെ കുക്കികൾ ഉപയോഗിക്കാനാവില്ല, ഉദാഹരണത്തിന്, പരസ്യങ്ങൾ വ്യക്തിപരമാക്കാൻ</translation> <translation id="6968288415730398122">സ്ക്രീൻ ലോക്ക് കോൺഫിഗർ ചെയ്യാൻ പാസ്വേഡ് നൽകുക</translation> @@ -5910,6 +5923,7 @@ <translation id="7135729336746831607">Bluetooth ഓണാക്കണോ?</translation> <translation id="7136694880210472378">ഡിഫോൾട്ട് ആക്കുക</translation> <translation id="7136993520339022828">ഒരു പിശകുണ്ട്. മറ്റ് ചിത്രങ്ങൾ തിരഞ്ഞെടുത്ത് വീണ്ടും ശ്രമിക്കുക.</translation> +<translation id="7137472406312798422">വിൻഡോകൾ തുറന്ന് വയ്ക്കുന്നതിന് നിങ്ങളുടെ സ്ക്രീനുകളുടെ വിവരങ്ങൾ ഉപയോഗിക്കാൻ സൈറ്റുകൾക്ക് ആവശ്യപ്പെടാം</translation> <translation id="7138515695467025690">സൂര്യാസ്തമയ സമയത്ത് സ്വയമേവ ഓഫാക്കും / ഓണാക്കും</translation> <translation id="7138678301420049075">മറ്റുള്ളവ</translation> <translation id="7139627972753429585"><ph name="APP_NAME" /> നിങ്ങളുടെ മൈക്രോഫോൺ ഉപയോഗിക്കുന്നു</translation> @@ -6530,7 +6544,6 @@ <translation id="7775694664330414886">ടാബ് പേരില്ലാത്ത ഗ്രൂപ്പിലേക്ക് നീക്കി - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">ഈ സൈറ്റിനുള്ള എല്ലാ ടാബുകളും നിങ്ങൾ അടയ്ക്കുന്നത് വരെ <ph name="ORIGIN" />-ന് <ph name="FOLDERNAME" /> എന്നതിലെ ഫയലുകൾ കാണാനാവും.</translation> <translation id="7776701556330691704">ശബ്ദമൊന്നും കണ്ടെത്തിയില്ല</translation> -<translation id="7777284276915203144">Google പാസ്വേഡ് മാനേജറിലേക്ക് സംരക്ഷിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്വേഡുകൾ എൻക്രിപ്റ്റ് ചെയ്യുന്നു</translation> <translation id="7781335840981796660">എല്ലാ ഉപയോക്തൃ അക്കൗണ്ടുകളും പ്രദേശിക ഡാറ്റയും നീക്കംചെയ്യും.</translation> <translation id="7782102568078991263">Google-ൽ നിന്നും കൂടുതൽ നിർദ്ദേശങ്ങൾ ഒന്നുമില്ല</translation> <translation id="7782717250816686129">ലോഗിൻ സ്ക്രീനിൽ നിരന്തരമായി ഉപയോഗിക്കുന്ന ഡാറ്റ സംഭരിച്ച് സെഷനിലേക്ക് ക്രെഡൻഷ്യലുകൾ നൽകുക.</translation> @@ -6797,6 +6810,7 @@ <translation id="8028803902702117856"><ph name="SIZE" /> ഡൗൺലോഡ് ചെയ്യുന്നു, <ph name="FILE_NAME" /></translation> <translation id="8028993641010258682">വലുപ്പം</translation> <translation id="8029492516535178472"><ph name="WINDOW_TITLE" /> - അനുമതി അഭ്യർത്ഥിച്ചു, പ്രതികരിക്കാൻ ⌘ + Option + മുകളിലേക്കുള്ള അമ്പടയാളം അമർത്തുക</translation> +<translation id="8029539783236818164">വിൻഡോകൾ തുറന്ന് വയ്ക്കുന്നതിന് നിങ്ങളുടെ സ്ക്രീനുകളുടെ വിവരങ്ങൾ ഉപയോഗിക്കാൻ അനുവദിച്ചിട്ടുണ്ട്</translation> <translation id="8030169304546394654">വിച്ഛേദിച്ചു</translation> <translation id="8030852056903932865">അംഗീകരിക്കുക</translation> <translation id="8032244173881942855">ടാബ് കാസ്റ്റ് ചെയ്യാനാവുന്നില്ല.</translation> @@ -6809,6 +6823,7 @@ <translation id="8038399858950372766"><ph name="DEVICE_COUNT" />-ൽ <ph name="DEVICE_INDEX" />-ാമത്തെ ഉപകരണം, <ph name="DEVICE_NAME" /> എന്ന പേരിലുള്ള കീബോർഡ്</translation> <translation id="8041089156583427627">ഫീഡ്ബാക്ക് അയയ്ക്കുക</translation> <translation id="8042142357103597104">ടെക്സ്റ്റ് അതാര്യത</translation> +<translation id="8042331986490021244">Google പാസ്വേഡ് മാനേജറിലേക്ക് സംരക്ഷിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്വേഡുകൾ എൻക്രിപ്റ്റ് ചെയ്യുന്നു</translation> <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> പ്രതികരിക്കുന്നില്ല.</translation> <translation id="8044899503464538266">പതുക്കെ</translation> <translation id="8045253504249021590">Google ഡാഷ്ബോർഡ് വഴിയുള്ള സമന്വയിപ്പിക്കൽ നിർത്തി.</translation> @@ -7182,7 +7197,6 @@ <translation id="8428634594422941299">മനസ്സിലായി</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" />-നുള്ളിൽ നിങ്ങൾ സൈൻ ഔട്ട് ചെയ്യപ്പെടും</translation> <translation id="8431190899827883166">ഷോ ടാപ്സ്</translation> -<translation id="8431730749911729314">Google പാസ്വേഡ് മാനേജറിലേക്ക് സംരക്ഷിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്വേഡുകൾ എൻക്രിപ്റ്റ് ചെയ്യുക</translation> <translation id="8434480141477525001">NaCl ഡീബഗ് പോർട്ട്</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> ഉപയോഗിച്ച് നിങ്ങളുടെ ഐഡന്റിറ്റി പരിശോധിച്ച് ഉറപ്പിക്കുക</translation> <translation id="8437209419043462667">യുഎസ്</translation> @@ -7567,6 +7581,7 @@ <translation id="8838234842677265403"><ph name="WEB_DRIVE_MESSAGE" /> (<ph name="SUPPORT_INFO" />)</translation> <translation id="8838601485495657486">അതാര്യം</translation> <translation id="8838770651474809439">ഹാംബർഗർ</translation> +<translation id="8838778928843281408">ഫോണുകൾ മാനേജ് ചെയ്യുക</translation> <translation id="883911313571074303">ചിത്രം വ്യാഖ്യാനിക്കുക</translation> <translation id="8841843049738266382">വൈറ്റ്ലിസ്റ്റ് ചെയ്ത ഉപയോക്താക്കളെ വായിക്കുക, മാറ്റുക</translation> <translation id="8842594465773264717">ഈ ഫിംഗർപ്രിന്റ് ഇല്ലാതാക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 3b28c43..8e20096 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -242,6 +242,7 @@ <translation id="1235458158152011030">Мэдэгдэж байгаа сүлжээ</translation> <translation id="123578888592755962">Диск дүүрсэн</translation> <translation id="1235924639474699896">{COUNT,plural, =1{текст}other{# текст}}</translation> +<translation id="1236009322878349843">Утсыг засах</translation> <translation id="1239594683407221485">Файлc апп дээр төхөөрөмжийн агуулгыг судлах</translation> <translation id="1241066500170667906"><ph name="EXPERIMENT_NAME" />-д туршилтын муж сонгоно уу</translation> <translation id="124116460088058876">Бусад хэл</translation> @@ -1270,6 +1271,7 @@ тусламжийн төв<ph name="END_LINK" />-өөс лавлана уу.</translation> <translation id="22665427234727190">Сайт Bluetooth төхөөрөмжүүдэд хандах хүсэлтэй үед асуух (санал болгосон)</translation> <translation id="2266957463645820432">USB дээрх IPP (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth-г идэвхгүй болгосон байна</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> домэйнд холбогдсон ямар ч төхөөрөмжийг ашиглан мэдээлэл солилцоорой</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Суулгаснаар <ph name="BEGIN_BOLD" />таны хатуу дискийг бүхэлд нь устгана<ph name="END_BOLD" />. Өгөгдлөө хуулбарласан эсэхээ шалгана уу.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Суулгаж эхэлмэгц үүнийг цуцлах боломжгүй.<ph name="END_PARAGRAPH2" /></translation> @@ -1953,6 +1955,7 @@ <translation id="2939908794993783865">Бусад идэвхгүй сайт</translation> <translation id="2939938020978911855">Боломжтой Bluetooth төхөөрөмжийг харуулна уу</translation> <translation id="2941112035454246133">Бага</translation> +<translation id="2941696810925320401">Сайтууд ихэвчлэн цонхыг нэмэлт документ эсвэл таны дэлгэц дээр контентыг бүтэн дэлгэцээр харуулахын тулд нээж, байрлуулдаг</translation> <translation id="2942279350258725020">Андройд мессеж</translation> <translation id="2942560570858569904">Хүлээж байна...</translation> <translation id="2942581856830209953">Энэ хуудсыг тохируулах</translation> @@ -2094,7 +2097,6 @@ <translation id="3088052000289932193">Сайт MIDI-г ашиглаж байна</translation> <translation id="3088128611727407543">Аппын профайлыг бэлтгэж байна...</translation> <translation id="3088325635286126843">& Дахин нэр өгөх...</translation> -<translation id="3089064280130434511">Сайтуудыг таны дэлгэцэд цонх нээх болон байрлуулахыг хориглоно</translation> <translation id="3089137131053189723">Хайлтыг устгасан</translation> <translation id="3090589793601454425">Бүү зөө</translation> <translation id="3090819949319990166">Гадаад crx файлыг <ph name="TEMP_CRX_FILE" />-д хуулах боломжгүй байна.</translation> @@ -2106,6 +2108,7 @@ <translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{Аюултай байж болзошгүй 1 өргөтгөлийг унтраалаа. Та мөн түүнийг устгах боломжтой.}other{Аюултай байж болзошгүй {NUM_EXTENSIONS} өргөтгөлийг унтраалаа. Та мөн тэднийг устгах боломжтой.}}</translation> <translation id="3101126716313987672">Бүдэг гэрэл</translation> <translation id="3101709781009526431">Огноо ба цаг</translation> +<translation id="3103451787721578293">Энэ өгөгдлийг байршуулах шалтгаан оруулна уу:</translation> <translation id="3103941660000130485">Linux-г дэвшүүлэхэд алдаа гарлаа</translation> <translation id="3105796011181310544">Google рүү буцааж өөрчлөх үү?</translation> <translation id="310671807099593501">Сайт bluetooth-г ашиглаж байна</translation> @@ -2632,6 +2635,7 @@ <translation id="3670113805793654926">Дурын борлуулагчийн төхөөрөмжүүд</translation> <translation id="3670229581627177274">Bluetooth асаах</translation> <translation id="3672681487849735243">Үйлдвэрлэлийн алдаа илэрлээ</translation> +<translation id="3673097791729989571">Нэвтрэлтийг <ph name="SAML_DOMAIN" />-с хост хийсэн</translation> <translation id="367645871420407123">Хэрэв та тест зургийн өгөгдөлд үндсэн нууц үг тохируулахыг хүсвэл хоосон үлдээнэ үү</translation> <translation id="3677106374019847299">Захиалгат нийлүүлэгчийг оруулах</translation> <translation id="3677911431265050325">Мобайл сайтын хүсэлт тавих</translation> @@ -3414,6 +3418,7 @@ <translation id="4481467543947557978">үйлчилгээний ажилтан</translation> <translation id="4481530544597605423">Хослоогүй төхөөрөмж</translation> <translation id="4482990632723642375">Саяхан хаасан таб</translation> +<translation id="4484922932728109422">Сайтуудад таны дэлгэцийн талаарх мэдээллийг цонх нээх болон байрлуулахад ашиглахыг бүү зөвшөөр</translation> <translation id="4487489714832036847">Chromebook уламжлалт программ хангамжийн оронд аппыг ашигладаг. Бүтээмж, энтертайнмент болон бусад зүйлд зориулсан аппуудыг татаж аваарай.</translation> <translation id="4488257340342212116">Таны камерыг ашиглахыг зөвшөөрсөн</translation> <translation id="4488502501195719518">Бүх өгөгдлийг устгах уу?</translation> @@ -3497,6 +3502,7 @@ <translation id="4565917129334815774">Системийн логуудыг хадгалах</translation> <translation id="4566417217121906555">Микрофоны дууг хаах</translation> <translation id="456717285308019641">Хуудсыг орчуулах хэл</translation> +<translation id="4567512141633030272">Нэвтрэх буруу сонголт байсан уу?</translation> <translation id="4567533462991917415">Тохируулга хийснийхээ дараа та дахиад үргэлж хүн нэмэх боломжтой. Хүн бүр бүртгэлээ хувийн болгож, өгөгдлөө хувьдаа хадгалж болно.</translation> <translation id="4567772783389002344">Үг нэмэх</translation> <translation id="4568025708905928793">Аюулгүй байдлын түлхүүрийн хүсэлт гаргаж байна</translation> @@ -3712,6 +3718,7 @@ <translation id="4813136279048157860">Миний зураг</translation> <translation id="4813512666221746211">Сүлжээний алдаа</translation> <translation id="4814378367953456825">Энэ хурууны хээний нэрийг оруулна уу</translation> +<translation id="481574578487123132">Холбосон төхөөрөмжүүд</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Дэлгэрэнгүй мэдээлэл</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 хавчуургыг устгасан}other{{COUNT} хавчуургыг устгасан}}</translation> <translation id="4819607494758673676">Google Туслахын мэдэгдэл</translation> @@ -3726,7 +3733,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> нийлүүлэгчийн USB төхөөрөмжүүд</translation> <translation id="4829768588131278040">ПИН тохируулах</translation> <translation id="4830026649400230050">Эрх бүхий бүх таталтыг танай байгууллагын <ph name="WEB_DRIVE" /> бүртгэл рүү чиглүүлдэг.</translation> -<translation id="4830121310592638841">Сайтыг таны дэлгэцэд цонх нээх болон байрлуулахыг хүсэх үед асууна</translation> <translation id="4830502475412647084">Үйлдлийн системийн шинэчлэлтийг суулгаж байна</translation> <translation id="4830573902900904548">Таны <ph name="DEVICE_TYPE" /> нь <ph name="NETWORK_NAME" />-ыг ашиглан интернэтэд холбогдох боломжгүй байна. Өөр сүлжээ сонгоно уу. <ph name="LEARN_MORE_LINK_START" />Дэлгэрэнгүй үзэх<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Хэвлэх серверээс 1 хэвлэгч олдлоо</translation> @@ -3742,6 +3748,7 @@ <translation id="4841741146571978176">Шаардлагатай виртуал машин байхгүй байна. Үргэлжлүүлэхийн тулд <ph name="VM_TYPE" />-г тохируулж үзнэ үү</translation> <translation id="4842976633412754305">Энэ хуудас нь баталгаажаагүй эх үүсвэрээс скриптүүдийг ачаалахыг оролдож байна.</translation> <translation id="4844333629810439236">Бусад гарнууд</translation> +<translation id="4844633725025837809">Нэмэлт аюулгүй байдлын үүднээс өөрийн төхөөрөмж дээрх нууц үгнүүдийг Google-н Нууц үгний менежерт хадгалахаас нь өмнө шифрлэнэ үү</translation> <translation id="4846680374085650406">Та энэ тохиргоог хийхдээ админы зөвлөмжийн дагуу хийнэ.</translation> <translation id="4847902821209177679"><ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" />-г сонгосон, <ph name="TOPIC_SOURCE" /> цомгуудыг сонгохын тулд Enter дарна уу</translation> <translation id="4848191975108266266">Google Туслахын "Ok Google"</translation> @@ -3883,6 +3890,7 @@ <translation id="499165176004408815">Өндөр эрс тэсийн горимыг ашиглах</translation> <translation id="4992458225095111526">Powerwash-ийг батлах</translation> <translation id="4992473555164495036">Танай админ боломжит оруулах аргыг хязгаарласан байна.</translation> +<translation id="4992984395680162305">Эдгээр төхөөрөмжийг QR код скан хийж холбосон.</translation> <translation id="4994474651455208930">Сайтыг протоколын өгөгдмөл хариуцагч байхыг зөвшөөрөх</translation> <translation id="4994754230098574403">Тохируулж байна</translation> <translation id="4995131849631312693"><ph name="BEGIN_PARAGRAPH1" />Бүртгүүлэхээсээ өмнө та TPM-г цэвэрлэх шаардлагатай бөгөөд ингэснээр <ph name="DEVICE_OS" /> нь төхөөрөмжийн өмчлөлийг авах боломжтой.<ph name="END_PARAGRAPH1" /> @@ -4003,6 +4011,7 @@ <translation id="5123433949759960244">Сагсан бөмбөг</translation> <translation id="5125751979347152379">Хүчингүй холбоос</translation> <translation id="5126611267288187364">Өөрчлөлтийг харах</translation> +<translation id="5127242257756472928">Таны дэлгэцийн талаарх мэдээллийг цонх нээх болон байрлуулахад ашиглахыг зөвшөөрөөгүй</translation> <translation id="5127620150973591153">Аюулгүй холболтын ID: <ph name="TOKEN" /></translation> <translation id="5127805178023152808">Тохиргоог унтраасан байна</translation> <translation id="5127881134400491887">Сүлжээний холболтууд зохицуулах</translation> @@ -4115,6 +4124,7 @@ <translation id="5243522832766285132">Хэдэн хормын дараа дахин оролдоно уу</translation> <translation id="5244474230056479698"><ph name="EMAIL" />-д синк хийж байна</translation> <translation id="5245610266855777041">Сургуулийн бүртгэл ашиглаж эхлэх</translation> +<translation id="5246036036039717045">Та эдгээр төхөөрөмж дээр Chrome-д нэвтэрсэн тул тэдгээрийг аюулгүй байдлын түлхүүрээр ашиглах боломжтой.</translation> <translation id="5246282308050205996"><ph name="APP_NAME" /> эвдэрсэн байна. Энэ аппликйешнийг дахин эхлүүлэхийн тулд энэ заагч суман дээр дарна уу.</translation> <translation id="5247051749037287028">Дэлгэцийн нэр (заавал биш)</translation> <translation id="5249624017678798539">Татаж дуусахаас өмнө веб хөтөч ажиллагаагүй болсон.</translation> @@ -4427,6 +4437,7 @@ <translation id="5563234215388768762">Google-с хайх эсвэл URL оруулна уу</translation> <translation id="5565735124758917034">Идэвхтэй</translation> <translation id="5568069709869097550">Нэвтрэх боломжгүй</translation> +<translation id="5571066253365925590">Bluetooth идэвхжсэн байна</translation> <translation id="5571092938913434726">Глобал медиа хяналт</translation> <translation id="5571832155627049070">Профайлаа өөрчлөх</translation> <translation id="5572851009514199876">Chrome-г эхлүүлж, нэвтэрснээр Chrome таныг энэ сайтад хандах эрхтэй эсэхийг шалгах болно.</translation> @@ -4603,6 +4614,7 @@ <translation id="5757375109985023827">Урьдчилан үзэх табыг сонгоно уу</translation> <translation id="5758631781033351321">Та унших жагсаалтаа эндээс олох болно</translation> <translation id="5759728514498647443">Таны <ph name="APP_NAME" />-аар дамжуулан хэвлэхээр илгээсэн бичиг баримтуудыг <ph name="APP_NAME" />-аар уншиж болно.</translation> +<translation id="5762787084360227629">Google Бүртгэлийн мэдээллийг оруулах</translation> <translation id="5763751966069581670">USB төхөөрөмж олдсонгүй</translation> <translation id="5764483294734785780">Аудиог ... гэх хадгалах</translation> <translation id="57646104491463491">Огноо өөрчлөгдсөн</translation> @@ -4824,6 +4836,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Та вебийг үргэлжлүүлэн үзэх боломжтой байхын тулд админаасаа энэ аппыг устгахыг хүснэ үү.}other{Та вебийг үргэлжлүүлэн үзэх боломжтой байхын тулд админаасаа эдгээр аппыг устгахыг хүснэ үү.}}</translation> <translation id="5997337190805127100">Сайтын хандалтын талаар нэмэлт мэдээлэл авах</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />'-н <ph name="RESULT_COUNT" /> илэрц</translation> +<translation id="6002122790816966947">Таны төхөөрөмжүүд</translation> <translation id="6002210667729577411">Бүлгийг шинэ цонх руу зөөх</translation> <translation id="6002452033851752583">Нууц үгийг таны Google Бүртгэлээс устгасан</translation> <translation id="6002458620803359783">Давуу эрхтэй дуу хоолой</translation> @@ -5630,7 +5643,6 @@ <translation id="6833996806551876956">Нууцлалын sandbox-н туршилт</translation> <translation id="6834652994408928492">Нар жаргах үед бараан горим автоматаар асна</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" />-ээ шинэчлэхийн тулд интернэтэд холбогдоно уу.</translation> -<translation id="6838034009068684089">Сайтыг таны дэлгэц дээр цонх нээх болон байрлуулахыг хүсэх үед асуух (санал болгосон)</translation> <translation id="6839225236531462745">Гэрчилгээг арчих алдаа</translation> <translation id="6839916869147598086">Нэвтрэх өөрчлөгдлөө</translation> <translation id="6840155290835956714">Илгээхээсээ өмнө асуух</translation> @@ -5747,6 +5759,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Порт</translation> <translation id="6965978654500191972">Төхөөрөмж</translation> +<translation id="6966370001499648704">Та аль утсыг аюулгүй байдлын түлхүүрээр ашиглахаа хянана уу</translation> <translation id="6967430741871315905">Төхөөрөмжийг зөвшөөрөгдсөн эсэхийг шалгах боломжгүй байна</translation> <translation id="696780070563539690">Сайтууд нь, жишээлбэл зарыг хувийн болгохын тулд өөр өөр сайт дээрх таны хөтчийн үйл ажиллагааг харахын тулд таны күүкиг ашиглах боломжгүй</translation> <translation id="6968288415730398122">Дэлгэцийн түгжээг тохируулахын тулд нууц үгээ оруулна уу</translation> @@ -5921,6 +5934,7 @@ <translation id="7135729336746831607">Bluetooth-г асаах уу?</translation> <translation id="7136694880210472378">Байнга ашиглагдах болгох</translation> <translation id="7136993520339022828">Алдаа байна. Өөр зураг сонгож дахин оролдоно уу.</translation> +<translation id="7137472406312798422">Сайтууд таны дэлгэцийн талаарх мэдээллийг цонх нээх болон байрлуулахад ашиглахыг хүсэх боломжтой</translation> <translation id="7138515695467025690">Унтраалттай / Нар жаргахад автоматаар асна</translation> <translation id="7138678301420049075">Бусад</translation> <translation id="7139627972753429585"><ph name="APP_NAME" /> таны микрофоныг ашиглаж байна</translation> @@ -6541,7 +6555,6 @@ <translation id="7775694664330414886">Табыг нэргүй бүлэг рүү зөөсөн - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Таныг энэ сайтын бүх табыг хаах хүртэл <ph name="ORIGIN" /> нь <ph name="FOLDERNAME" /> доторх файлуудыг үзэх боломжтой байна</translation> <translation id="7776701556330691704">Дуу хоолой олдсонгүй</translation> -<translation id="7777284276915203144">Таны нууц үгийг Google-н Нууц үгний менежерт хадгалахаас нь өмнө төхөөрөмж дээр тань шифрлэдэг</translation> <translation id="7781335840981796660">Бүх хэрэглэгчийн бүртгэлүүд болон суурин өгөгдлүүд устах болно.</translation> <translation id="7782102568078991263">Google-ээс өөр зөвлөмж алга байна.</translation> <translation id="7782717250816686129">Нэвтрэх дэлгэц дээр байнгын өгөгдлийг хадгалж, харилцан үйлдэлд мандат үнэмлэхийг оруулах.</translation> @@ -6806,6 +6819,7 @@ <translation id="8028803902702117856"><ph name="SIZE" />, <ph name="FILE_NAME" />-г татаж байна</translation> <translation id="8028993641010258682">Хэмжээ</translation> <translation id="8029492516535178472"><ph name="WINDOW_TITLE" /> - Зөвшөөрлийн хүсэлт тавьсан. Хариу өгөхийн тулд ⌘ + Сонголт + Дээш сумыг дарна уу</translation> +<translation id="8029539783236818164">Таны дэлгэцийн талаарх мэдээллийг цонх нээх болон байрлуулахад ашиглахыг зөвшөөрсөн</translation> <translation id="8030169304546394654">Салгасан</translation> <translation id="8030852056903932865">Зөвшөөрөх</translation> <translation id="8032244173881942855">Табыг дамжуулах боломжгүй.</translation> @@ -6818,6 +6832,7 @@ <translation id="8038399858950372766"><ph name="DEVICE_COUNT" />-с <ph name="DEVICE_INDEX" />-р төхөөрөмж, <ph name="DEVICE_NAME" /> гэсэн нэртэй гар</translation> <translation id="8041089156583427627">Санал хүсэлт илгээх</translation> <translation id="8042142357103597104">Текстийн бүдэгрэл</translation> +<translation id="8042331986490021244">Таны нууц үгнүүдийг Google-н Нууц үгний менежерт хадгалахаас нь өмнө төхөөрөмж дээр тань шифрлэдэг</translation> <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> хариу өгөхгүй байна.</translation> <translation id="8044899503464538266">Удаан</translation> <translation id="8045253504249021590">Google Хяналтын самбар синкийг зогсоосон байна.</translation> @@ -7191,7 +7206,6 @@ <translation id="8428634594422941299">Ойлголоо</translation> <translation id="84297032718407999">Та <ph name="LOGOUT_TIME_LEFT" />-н дараа гарах болно</translation> <translation id="8431190899827883166">Товшилтыг харуулах</translation> -<translation id="8431730749911729314">Өөрийн төхөөрөмж дээрх нууц үгнүүдийг Google-н Нууц үгний менежерт хадгалахаас нь өмнө шифрлэнэ үү</translation> <translation id="8434480141477525001">NaCl гүйцэтгэл сайжруулах порт</translation> <translation id="8435395510592618362">Аюулгүй байдлын түлхүүрээ <ph name="APP_NAME" />-р баталгаажуулна уу</translation> <translation id="8437209419043462667">АНУ</translation> @@ -7575,6 +7589,7 @@ <translation id="8838234842677265403"><ph name="WEB_DRIVE_MESSAGE" /> (<ph name="SUPPORT_INFO" />)</translation> <translation id="8838601485495657486">Тунгалаг бус</translation> <translation id="8838770651474809439">Гамбургер</translation> +<translation id="8838778928843281408">Утас удирдах</translation> <translation id="883911313571074303">Зураг тэмдэглэх</translation> <translation id="8841843049738266382">Зөвшөөрсөн жагсаалтын хэрэглэгчдийг уншиж, өөрчлөх</translation> <translation id="8842594465773264717">Энэ хурууны хээг устгах</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 7171297..6af9ed88e 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1273,6 +1273,7 @@ मदत केंद्र<ph name="END_LINK" /> याचा संदर्भ घ्या.</translation> <translation id="22665427234727190">साइटला ब्लूटूथ डिव्हाइस अॅक्सेस करायची असतील तेव्हा विचारा (शिफारस केलेले)</translation> <translation id="2266957463645820432">USB (IPPUSB) वर IPP</translation> +<translation id="2268130516524549846">ब्लूटूथ अक्षम</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> डोमेनमध्ये कोणत्याही डिव्हाइससह डेटा अदलाबदल करा</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />इंस्टॉलेशन<ph name="BEGIN_BOLD" />तुमची संपूर्ण हार्ड ड्राइव्ह मिटवेल<ph name="END_BOLD" />. तुमच्या डेटाचा बॅकअप घेतला असल्याची खात्री करा.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />इंस्टॉलेशन सुरू झाल्यावर ते रद्द करता येऊ शकत नाही.<ph name="END_PARAGRAPH2" /></translation> @@ -2097,7 +2098,6 @@ <translation id="3088052000289932193">साइट MIDI वापरत आहे</translation> <translation id="3088128611727407543">अॅप प्रोफाइल तयार करत आहे...</translation> <translation id="3088325635286126843">&पुनर्नामित करा...</translation> -<translation id="3089064280130434511">तुमच्या स्क्रीनवर विंडो उघडणे आणि ठेवणे यांपासून साइटना ब्लॉक करा</translation> <translation id="3089137131053189723">शोध साफ केला</translation> <translation id="3090589793601454425">हलवू नका</translation> <translation id="3090819949319990166">बाह्य crx फाइल <ph name="TEMP_CRX_FILE" /> वर कॉपी करू शकत नाही.</translation> @@ -3714,6 +3714,7 @@ <translation id="4813136279048157860">माझ्या इमेज</translation> <translation id="4813512666221746211">नेटवर्क एरर</translation> <translation id="4814378367953456825">या फिंगरप्रिंटसाठी एखादे नाव एंटर करा</translation> +<translation id="481574578487123132">लिंक केलेली डिव्हाइस</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, तपशील</translation> <translation id="4816336393325437908">{COUNT,plural, =1{एक बुकमार्क हटवला}other{{COUNT} बुकमार्क हटवले}}</translation> <translation id="4819607494758673676">Google Assistant सूचना</translation> @@ -3728,7 +3729,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> या विक्रेत्याकडील USB डिव्हाइस</translation> <translation id="4829768588131278040">पिन सेट करा</translation> <translation id="4830026649400230050">सर्व पात्र डाउनलोड ही तुमच्या संस्थेच्या <ph name="WEB_DRIVE" /> खात्याकडे राउट केली जातात.</translation> -<translation id="4830121310592638841">साइटला तुमच्या स्क्रीनवर विंडो उघडायच्या आणि ठेवायच्या असतील तेव्हा विचारा</translation> <translation id="4830502475412647084">OS अपडेट इंस्टॉल करत आहे</translation> <translation id="4830573902900904548"><ph name="NETWORK_NAME" /> वापरून इंटरनेटशी कनेक्ट करण्यात तुमचे <ph name="DEVICE_TYPE" /> अक्षम आहे. कृपया अन्य नेटवर्क वापरा. <ph name="LEARN_MORE_LINK_START" />अधिक जाणून घ्या<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">प्रिंट सर्व्हरवरील एक प्रिंटर आढळला</translation> @@ -4429,6 +4429,7 @@ <translation id="5563234215388768762">Google वर शोधा किंवा URL टाइप करा</translation> <translation id="5565735124758917034">सक्रिय</translation> <translation id="5568069709869097550">साइन इन करणे शक्य नाही</translation> +<translation id="5571066253365925590">ब्लूटूथ सक्षम</translation> <translation id="5571092938913434726">जागतिक मीडिया नियंत्रणे</translation> <translation id="5571832155627049070">तुमची प्रोफाइल कस्टमाइझ करा</translation> <translation id="5572851009514199876">कृपया सुरुवात करा आणि Chrome मध्ये साइन इन करा जेणेकरून तुम्हाला या साइट ॲक्सेस करण्याची परवानगी आहे किंवा नाही ते Chrome तपासू शकेल.</translation> @@ -4827,6 +4828,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{तुमचे वेब ब्राउझिंग सुरू राहावे याची खात्री करण्यासाठी, तुमच्या ॲडमिनिस्ट्रेटरला हे ॲप्लिकेशन काढून टाकण्यास सांगा.}other{तुमचे वेब ब्राउझिंग सुरू राहावे याची खात्री करण्यासाठी, तुमच्या ॲडमिनिस्ट्रेटरला हे ॲप्लिकेशन काढून टाकण्यास सांगा.}}</translation> <translation id="5997337190805127100">साइट ॲक्सेसबद्दल अधिक जाणून घ्या</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' साठी <ph name="RESULT_COUNT" /> परिणाम</translation> +<translation id="6002122790816966947">तुमची डिव्हाइस</translation> <translation id="6002210667729577411">गट नवीन विंडोवर हलवा</translation> <translation id="6002452033851752583">तुमच्या Google खाते वरून पासवर्ड हटवला गेला</translation> <translation id="6002458620803359783">प्राधान्य दिलेली व्हॉइस</translation> @@ -5633,7 +5635,6 @@ <translation id="6833996806551876956">गोपनीयता सॅंडबॉक्स याची चाचणी</translation> <translation id="6834652994408928492">सूर्यास्ताच्या वेळी गडद मोड आपोआप सुरू होईल</translation> <translation id="6835762382653651563">कृपया तुमचे <ph name="DEVICE_TYPE" /> अपडेट करण्यासाठी इंटरनेटशी कनेक्ट करा.</translation> -<translation id="6838034009068684089">साइटला तुमच्या स्क्रीनवर विंडो उघडायच्या आणि ठेवायच्या असतील तेव्हा विचारा (शिफारस केलेले)</translation> <translation id="6839225236531462745">सर्टिफिकेट हटविणे एरर</translation> <translation id="6839916869147598086">साइन इन बदलले आहे</translation> <translation id="6840155290835956714">पाठविण्यापूर्वी विचारा</translation> @@ -6544,7 +6545,6 @@ <translation id="7775694664330414886">टॅब अनामित गटामध्ये हलवला आहे - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">तुम्ही या साइटसाठी सर्व टॅब बंद करेपर्यंत <ph name="ORIGIN" /> ला <ph name="FOLDERNAME" /> मधील फाइल पाहता येतील</translation> <translation id="7776701556330691704">कोणतेही व्हॉइस सापडले नाहीत</translation> -<translation id="7777284276915203144">तुमचे पासवर्ड हे Google पासवर्ड व्यवस्थापक यामध्ये सेव्ह केले जाण्यापूर्वी ते तुमच्या डिव्हाइसवर एंक्रिप्ट केले जातात</translation> <translation id="7781335840981796660">सर्व वापरकर्ता खाती आणि स्थानिक डेटा काढला जाईल.</translation> <translation id="7782102568078991263">Google कडून कोणत्याही आणखी सूचना नाहीत</translation> <translation id="7782717250816686129">लॉगिन स्क्रीनवर सतत वापरात असलेला डेटा स्टोअर करा आणि सेशनमध्ये क्रेडेंशियल घाला.</translation> @@ -7195,7 +7195,6 @@ <translation id="8428634594422941299">समजले</translation> <translation id="84297032718407999">तुम्हाला <ph name="LOGOUT_TIME_LEFT" /> मध्ये साइन आउट केले जाईल</translation> <translation id="8431190899827883166">टॅप दाखवा</translation> -<translation id="8431730749911729314">पासवर्ड हे Google पासवर्ड व्यवस्थापक यामध्ये सेव्ह केले जाण्यापूर्वी ते तुमच्या डिव्हाइसवर एंक्रिप्ट करा</translation> <translation id="8434480141477525001">NaCl डीबग पोर्ट</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> सह तुमची ओळख पडताळा</translation> <translation id="8437209419043462667">यूएस</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 94453fa..4002b57 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1274,6 +1274,7 @@ pusat bantuan<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Tanya apabila tapak mahu mengakses peranti Bluetooth (disyorkan)</translation> <translation id="2266957463645820432">IPP melalui USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth dilumpuhkan</translation> <translation id="2270450558902169558">Bertukar data dengan mana-mana peranti dalam domain <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Pemasangan <ph name="BEGIN_BOLD" />akan memadamkan seluruh pemacu keras anda<ph name="END_BOLD" />. Pastikan data anda disandarkan.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Sebaik sahaja dimulakan, pemasangan tidak boleh dibatalkan.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">Tapak menggunakan MIDI</translation> <translation id="3088128611727407543">Menyediakan profil apl...</translation> <translation id="3088325635286126843">&Namakan semula...</translation> -<translation id="3089064280130434511">Sekat tapak daripada membuka dan meletakkan tetingkap pada skrin anda</translation> <translation id="3089137131053189723">Carian dikosongkan</translation> <translation id="3090589793601454425">Jangan alihkan</translation> <translation id="3090819949319990166">Tidak dapat menyalin fail crx luar ke <ph name="TEMP_CRX_FILE" />.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">Imej Saya</translation> <translation id="4813512666221746211">Ralat rangkaian</translation> <translation id="4814378367953456825">Masukkan nama untuk cap jari ini</translation> +<translation id="481574578487123132">Peranti terpaut</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Butiran</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 penanda halaman dipadamkan}other{{COUNT} penanda halaman dipadamkan}}</translation> <translation id="4819607494758673676">Pemberitahuan Google Assistant</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">Peranti USB daripada vendor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Sediakan PIN</translation> <translation id="4830026649400230050">Semua muat turun yang layak dihalakan ke akaun <ph name="WEB_DRIVE" /> organisasi anda.</translation> -<translation id="4830121310592638841">Tanya apabila tapak mahu membuka dan meletakkan tetingkap pada skrin anda</translation> <translation id="4830502475412647084">Memasang kemas kini OS</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> anda tidak dapat menyambung ke Internet menggunakan <ph name="NETWORK_NAME" />. Sila pilih rangkaian lain. <ph name="LEARN_MORE_LINK_START" />Ketahui lebih lanjut<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Menjumpai 1 pencetak daripada pelayan cetak</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Cari di Google atau taip URL</translation> <translation id="5565735124758917034">Aktif</translation> <translation id="5568069709869097550">Tidak boleh log masuk</translation> +<translation id="5571066253365925590">Bluetooth didayakan</translation> <translation id="5571092938913434726">Kawalan Media Global</translation> <translation id="5571832155627049070">Sesuaikan profil anda</translation> <translation id="5572851009514199876">Sila mulakan dan log masuk ke Chrome supaya Chrome boleh menyemak sama ada anda dibenarkan mengakses tapak ini.</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Untuk memastikan anda boleh terus melayari web, minta pentadbir anda mengalih keluar aplikasi ini.}other{Untuk memastikan anda boleh terus melayari web, minta pentadbir anda mengalih keluar aplikasi ini.}}</translation> <translation id="5997337190805127100">Ketahui Lebih Lanjut Tentang Akses Tapak</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> hasil carian untuk '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">Peranti anda</translation> <translation id="6002210667729577411">Alihkan kumpulan ke tetingkap baharu</translation> <translation id="6002452033851752583">Kata laluan dipadamkan daripada Akaun Google anda</translation> <translation id="6002458620803359783">Suara Pilihan</translation> @@ -5635,7 +5637,6 @@ <translation id="6833996806551876956">Percubaan Kotak Pasir Privasi</translation> <translation id="6834652994408928492">Mod gelap akan dihidupkan secara automatik pada waktu matahari terbenam</translation> <translation id="6835762382653651563">Sila sambung ke Internet untuk mengemaskinikan <ph name="DEVICE_TYPE" /> anda.</translation> -<translation id="6838034009068684089">Tanya apabila tapak mahu membuka dan meletakkan tetingkap pada skrin anda (disyorkan)</translation> <translation id="6839225236531462745">Ralat Pemadaman Sijil</translation> <translation id="6839916869147598086">Log masuk telah berubah</translation> <translation id="6840155290835956714">Tanya sebelum menghantar</translation> @@ -6546,7 +6547,6 @@ <translation id="7775694664330414886">Tab dialihkan ke kumpulan tidak bernama - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> akan dapat melihat fail dalam <ph name="FOLDERNAME" /> sehinggalah anda menutup semua tab bagi tapak ini</translation> <translation id="7776701556330691704">Suara tidak ditemui</translation> -<translation id="7777284276915203144">Kata laluan anda disulitkan pada peranti sebelum disimpan ke Pengurus Kata Laluan Google</translation> <translation id="7781335840981796660">Semua akaun pengguna dan data setempat akan dialih keluar.</translation> <translation id="7782102568078991263">Tiada lagi cadangan daripada Google</translation> <translation id="7782717250816686129">Simpan data berulang pada skrin log masuk dan masukkan bukti kelayakan ke dalam sesi.</translation> @@ -7200,7 +7200,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Anda akan dilog keluar dalam masa <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Tunjukkan ketikan</translation> -<translation id="8431730749911729314">Sulitkan kata laluan pada peranti anda sebelum kata laluan itu disimpan ke Pengurus Kata Laluan Google</translation> <translation id="8434480141477525001">Port Nyahpepijat NaCl</translation> <translation id="8435395510592618362">Sahkan identiti anda dengan <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">AS</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index cc0cb1a..6457c4f 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -1272,6 +1272,7 @@ ကူညီရေးဌာန<ph name="END_LINK" /> သို့ သွားပါ။</translation> <translation id="22665427234727190">ဝဘ်ဆိုက်က ဘလူးတုသ်စက်များကို အသုံးပြုလိုသည့်အခါ ခွင့်တောင်းရန် (အကြံပြုထားသည်)</translation> <translation id="2266957463645820432">USB မှတစ်ဆင့် IPP (IPPUSB)</translation> +<translation id="2268130516524549846">ဘလူးတုရှ် ပိတ်ထား</translation> <translation id="2270450558902169558">ဒိုမိန်း <ph name="DOMAIN" /> တွင် မည်သည့်စက်ကိရိယာဖြင့်မဆို ဒေတာများ အလဲအလှယ်ပြုရန်</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ထည့်သွင်းခြင်းသည် <ph name="BEGIN_BOLD" />သင့်ဟတ်ဒရိုက်ဗ် တစ်ခုလုံးကို (ဒေတာ) ဖျက်ပါမည်<ph name="END_BOLD" />။ သင့်ဒေတာကို အရန်သိမ်းထားကြောင်း သေချာပါစေ။<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ထည့်သွင်းမှုစတင်ပြီးပါက ပယ်ဖျက်၍မရပါ။<ph name="END_PARAGRAPH2" /></translation> @@ -2096,7 +2097,6 @@ <translation id="3088052000289932193">ဝဘ်ဆိုက်က MIDI ကို အသုံးပြုနေသည်</translation> <translation id="3088128611727407543">အက်ပ်ပရိုဖိုင် ပြင်ဆင်နေသည်...</translation> <translation id="3088325635286126843">&အမည် ပြောင်းရန်...</translation> -<translation id="3089064280130434511">သင့်ဖန်သားပြင်များတွင် ဝဘ်ဆိုက်များက ဝင်းဒိုးများ ဖွင့်ပြီး နေရာချထားခြင်းကို ပိတ်ထားရန်</translation> <translation id="3089137131053189723">ရှာဖွေမှုကို ရှင်းလင်းလိုက်ပါပြီ</translation> <translation id="3090589793601454425">မရွှေ့ပါနှင့်</translation> <translation id="3090819949319990166">ပြင်ပရှိ crx ဖိုင်ကို <ph name="TEMP_CRX_FILE" /> သို့ ကူးယူမရပါ။</translation> @@ -3714,6 +3714,7 @@ <translation id="4813136279048157860">ကျွန်ုပ်၏ ပုံများ</translation> <translation id="4813512666221746211">ကွန်ရက် ပြဿနာ</translation> <translation id="4814378367953456825">ဤလက်ဗွေအတွက် အမည်တစ်ခု ထည့်ရန်</translation> +<translation id="481574578487123132">လင့်ခ်ချိတ်ထားသည့် စက်များ</translation> <translation id="4816097470512964351"><ph name="DEVICE" />၊ အသေးစိတ်များ</translation> <translation id="4816336393325437908">{COUNT,plural, =1{လိပ်စာ 1 ခု ဖျက်လိုက်သည်}other{လိပ်စာ {COUNT} ခု ဖျက်လိုက်သည်}}</translation> <translation id="4819607494758673676">Google Assistant အကြောင်းကြားချက်များ</translation> @@ -3728,7 +3729,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> မှ USB ကိရိယာများ</translation> <translation id="4829768588131278040">ပင်နံပါတ်ကို သတ်မှတ်ရန်</translation> <translation id="4830026649400230050">အကျုံးဝင်သော ဒေါင်းလုဒ်အားလုံးကို သင့်အဖွဲ့အစည်း၏ <ph name="WEB_DRIVE" /> အကောင့်သို့ ပေးပို့သည်။</translation> -<translation id="4830121310592638841">သင့်ဖန်သားပြင်များတွင် ဝဘ်ဆိုက်က ဝင်းဒိုးများ ဖွင့်ပြီး နေရာချထားလိုသည့်အခါ ခွင့်တောင်းရန်</translation> <translation id="4830502475412647084">OS အပ်ဒိတ်ကို ထည့်သွင်းနေသည်</translation> <translation id="4830573902900904548">သင့် <ph name="DEVICE_TYPE" /> သည် <ph name="NETWORK_NAME" /> ကိုအသုံးပြုပြီ: အင်တာနက်သို့ ချိတ်ဆက်၍မရနိုင်ပါ။ ကျေးဇူးပြု၍ အခြားကွန်ရက်ကို ရွေးချယ်ပါ။ <ph name="LEARN_MORE_LINK_START" />ပိုမိုလေ့လာရန်<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">ပရင်တာဆာဗာမှ ပရင်တာ ၁ ခုတွေ့သည်</translation> @@ -4429,6 +4429,7 @@ <translation id="5563234215388768762">Google တွင်ရှာပါ သို့မဟုတ် URL ကိုထည့်ပါ</translation> <translation id="5565735124758917034">အသက်ဝင်နေ</translation> <translation id="5568069709869097550">လက်မှတ်ထိုးဝင်၍ မရပါ။</translation> +<translation id="5571066253365925590">ဘလူးတုသ်ကို ဖွင့်ထား</translation> <translation id="5571092938913434726">အထွေထွေ မီဒီယာ ထိန်းချုပ်မှုများ</translation> <translation id="5571832155627049070">သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ရန်</translation> <translation id="5572851009514199876">သင်သည် ဤဆိုက်ကို ကြည့်ရှုခွင့်ရှိမရှိ Chrome က စစ်ဆေးပေးရန် စတင်၍ Chrome သို့ လက်မှတ်ထိုးဝင်ပါ။</translation> @@ -4825,6 +4826,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ဝဘ်ဆိုက်ကို ဆက်လက် ကြည့်ရှုနိုင်ရေးအတွက် ဤအပလီကေးရှင်းကို ဖယ်ရှားပေးရန် စီမံခန့်ခွဲသူထံ တောင်းဆိုပါ။}other{ဝဘ်ဆိုက်ကို ဆက်လက် ကြည့်ရှုနိုင်ရေးအတွက် ဤအပလီကေးရှင်းများကို ဖယ်ရှားပေးရန် စီမံခန့်ခွဲသူထံ တောင်းဆိုပါ။}}</translation> <translation id="5997337190805127100">ဝဘ်ဆိုက်အသုံးပြုခွင့်အကြောင်း ပိုမိုလေ့လာခြင်း</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' အတွက် ရလဒ် <ph name="RESULT_COUNT" /> ခု</translation> +<translation id="6002122790816966947">သင်၏စက်များ</translation> <translation id="6002210667729577411">အုပ်စုကို ဝင်းဒိုးအသစ်သို့ ရွှေ့ခြင်း</translation> <translation id="6002452033851752583">စကားဝှက်ကို သင့် Google Account မှဖျက်လိုက်ပါပြီ</translation> <translation id="6002458620803359783">အသုံးပြုလိုသည့် စကားသံများ</translation> @@ -5630,7 +5632,6 @@ <translation id="6833996806551876956">'ပုဂ္ဂိုလ်ရေး လုံခြုံသည့်နေရာ' အစမ်းသုံးခြင်း</translation> <translation id="6834652994408928492">နေဝင်ချိန်တွင် အမှောင်မုဒ် အလိုအလျောက်ဖွင့်မည်</translation> <translation id="6835762382653651563">သင့် <ph name="DEVICE_TYPE" /> ကို အသစ်မွမ်းမံရန် ကျေးဇူးပြု၍ အင်တာနက်နှင့် ချိတ်ဆက်ပါ။</translation> -<translation id="6838034009068684089">သင့်ဖန်သားပြင်များတွင် ဝဘ်ဆိုက်က ဝင်းဒိုးများ ဖွင့်ပြီး နေရာချထားလိုသည့်အခါ ခွင့်တောင်းရန် (အကြံပြုထားသည်)</translation> <translation id="6839225236531462745">အသိမှတ်ပြု လက်မှတ် ဖျက်ခြင်း မှားယွင်းမှု</translation> <translation id="6839916869147598086">အကောင့်ဝင်ရောက်ခြင်းကို ပြောင်းထားသည်</translation> <translation id="6840155290835956714">မပို့မီ မေးမြန်းရန်</translation> @@ -6541,7 +6542,6 @@ <translation id="7775694664330414886">အမည်ပေးမထားသော အုပ်စုထဲသို့ တဘ်ကိုရွှေ့လိုက်သည် - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">ဤဝဘ်ဆိုက်အတွက် တဘ်များအားလုံးကို မပိတ်မချင်း <ph name="ORIGIN" /> သည် <ph name="FOLDERNAME" /> ရှိ ဖိုင်များကို ကြည့်နိုင်ပါမည်</translation> <translation id="7776701556330691704">မည်သည့်အသံမျှ မတွေ့ပါ</translation> -<translation id="7777284276915203144">စကားဝှက်များကို ‘Google စကားဝှက်မန်နေဂျာ’ သို့ မသိမ်းမီ သင်၏စက်၌ အသွင်ဝှက်ပြီးပါပြီ</translation> <translation id="7781335840981796660">အသုံးပြုသူ အကောင့်များ နှင့် ဒေတာ အားလုံး ဖယ်ရှားပစ်မည်။</translation> <translation id="7782102568078991263">Google မှအကြံပေးချက်များ မရှိတော့ပါ</translation> <translation id="7782717250816686129">အကောင့်ဝင်ရောက်မှု ဖန်သားပြင်တွင် အမြဲသုံးဒေတာကို သိမ်းပြီး စက်ရှင်သို့ဝင်ရန် အထောက်အထားများ ထည့်သွင်းပါ။</translation> @@ -7193,7 +7193,6 @@ <translation id="8428634594422941299">ရပါပြီ</translation> <translation id="84297032718407999">သင်သည် <ph name="LOGOUT_TIME_LEFT" /> အတွင်း ထွက်သွားပါမည်</translation> <translation id="8431190899827883166">တို့ရန်များကို ပြခြင်း</translation> -<translation id="8431730749911729314">စကားဝှက်များကို ‘Google စကားဝှက်မန်နေဂျာ’ သို့ မသိမ်းမီ သင်၏စက်၌ အသွင်ဝှက်ပါ</translation> <translation id="8434480141477525001">NaCl အမှားရှာပြင်ခြင်း ပို့တ်</translation> <translation id="8435395510592618362">သင်မည်သူမည်ဝါဖြစ်ကြောင်း <ph name="APP_NAME" /> နှင့် အတည်ပြုပါ</translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 2ae0ad1..4f3d370c 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1256,6 +1256,7 @@ <translation id="2263679799334060788">हामी तपाईंको प्रतिक्रियाको सहायताले Google Cast को गुणस्तर सुधार्न सक्छौँ र तपाईंको प्रतिक्रियाको सह्राना गर्छौँ। Cast सम्बन्धी समस्याहरू निवारण गर्न मद्दत प्राप्त गर्नका लागि कृपया <ph name="BEGIN_LINK" />मद्दत केन्द्र<ph name="END_LINK" />मा जानुहोस्।</translation> <translation id="22665427234727190">कुनै साइटले ब्लुटुथ यन्त्रहरूमाथि पहुँच राख्न खोज्दा चलाउन दिने कि नदिने भनी मलाई सोधियोस् (सिफारिस गरिएको)</translation> <translation id="2266957463645820432">USB मार्फत IPP (IPPUSB)</translation> +<translation id="2268130516524549846">ब्लुतुथ असक्षम गरियो</translation> <translation id="2270450558902169558">कुनै पनि यन्त्रमार्फत डोमेन <ph name="DOMAIN" /> मा डेटा सेयर गर्नुहोस्</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />तपाईंले यो OS इन्स्टल गर्नुभयो भने <ph name="BEGIN_BOLD" />तपाईंको हार्ड ड्राइभमा भएका सबै डेटा मेटाइने छन्<ph name="END_BOLD" />। यो OS इन्स्टल गर्नुअघि आफ्नो डेटा ब्याकअप गर्न नभुल्नुहोस्।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />इन्स्टल गर्ने प्रक्रिया थालिसकेपछि उक्त प्रक्रिया रद्द गर्न मिल्दैन।<ph name="END_PARAGRAPH2" /></translation> @@ -2081,7 +2082,6 @@ <translation id="3088052000289932193">साइटले MIDI प्रयोग गर्दै छ</translation> <translation id="3088128611727407543">एपको प्रोफाइल तयार गर्दै...</translation> <translation id="3088325635286126843">&पुन: नामाकरण गर्नुहोस्...</translation> -<translation id="3089064280130434511">साइटहरूलाई आफ्ना स्क्रिनहरूमा विन्डो राख्न र त्यहाँ भएका विन्डो खोल्न नदिनुहोस्</translation> <translation id="3089137131053189723">खोज खाली गरियो</translation> <translation id="3090589793601454425">नसारियोस्</translation> <translation id="3090819949319990166">बाह्य सिआरएक्स फाइललाई <ph name="TEMP_CRX_FILE" /> मा प्रतिलिपि गर्न सकिएन।</translation> @@ -3698,6 +3698,7 @@ <translation id="4813136279048157860">मेरा फोटो</translation> <translation id="4813512666221746211">सञ्जाल त्रुटि</translation> <translation id="4814378367953456825">यो फिंगरप्रिन्टको नाम प्रविष्टि गर्नुहोस्</translation> +<translation id="481574578487123132">लिंक गरिएका डिभाइसहरू</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, विवरणहरू</translation> <translation id="4816336393325437908">{COUNT,plural, =1{एउटा पुस्तक चिन्ह मेटाइयो}other{{COUNT} वटा पुस्तक चिन्ह मेटाइए}}</translation> <translation id="4819607494758673676">Google सहायकका सूचनाहरू</translation> @@ -3712,7 +3713,6 @@ <translation id="482952334869563894">विक्रेता <ph name="VENDOR_ID" /> का USB डिभाइसहरू</translation> <translation id="4829768588131278040">PIN सेटअप गर्नुहोस्</translation> <translation id="4830026649400230050">डाउनलोड गर्न मिल्ने सबै फाइलहरू तपाईंको सङ्गठनको <ph name="WEB_DRIVE" /> खातामा पठाइन्छ।</translation> -<translation id="4830121310592638841">कुनै साइटले मेरा स्क्रिनहरूमा विन्डो राख्न र त्यहाँ भएका विन्डो खोल्न खोज्दा त्यसो गर्न दिने कि नदिने भनी सोधियोस्</translation> <translation id="4830502475412647084">OS अद्यावधिक स्थापना गर्दै</translation> <translation id="4830573902900904548">तपाईँको <ph name="DEVICE_TYPE" /> <ph name="NETWORK_NAME" /> प्रयोग गरेर इन्टरनेटसँग जडान गर्न असमर्थ छ। कृपया अर्को नेटवर्क छनौट गर्नुहोस्। <ph name="LEARN_MORE_LINK_START" /> थप जान्नुहोस् <ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">प्रिन्ट सर्भरमा १ प्रिन्टर फेला पर्यो</translation> @@ -4413,6 +4413,7 @@ <translation id="5563234215388768762">Google मा खोज्नुहोस् वा कुनै URL टाइप गर्नुहोस्</translation> <translation id="5565735124758917034">सक्रिय</translation> <translation id="5568069709869097550">साइन इन गर्न सक्दैन</translation> +<translation id="5571066253365925590">ब्लुटूथ सक्षम भयो</translation> <translation id="5571092938913434726">मिडियासम्बन्धी वैश्विक नियन्त्रणहरू</translation> <translation id="5571832155627049070">आफ्नो प्रोफाइल आफ्नो रोजाइ अनुकूल पार्नुहोस्</translation> <translation id="5572851009514199876">Chrome ले तपाईंलाई यस साइटमाथि पहुँच राख्ने अनुमति छ वा छैन भनी जाँच्न सकोस् भन्नका लागि कृपया Chrome सुरु गरी साइन इन गर्नुहोस्।</translation> @@ -4809,6 +4810,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{आफूले वेब ब्राउज गर्न जारी राख्न सक्ने कुरा सुनिश्चित गर्न आफ्नो प्रशासकलाई यो एप हटाउन लगाउनुहोस्।}other{आफूले वेब ब्राउज गर्न जारी राख्न सक्ने कुरा सुनिश्चित गर्न आफ्नो प्रशासकलाई यी एपहरू हटाउन लगाउनुहोस्।}}</translation> <translation id="5997337190805127100">साइटको पाहुँचबारे थप जान्नुहोस्</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' मध्ये <ph name="RESULT_COUNT" /></translation> +<translation id="6002122790816966947">तपाईंका डिभाइसहरू</translation> <translation id="6002210667729577411">समूहलाई सारेर नयाँ विन्डोमा लैजानुहोस्</translation> <translation id="6002452033851752583">तपाईंको Google खातामा सुरक्षित गरिएको पासवर्ड मेटाइयो</translation> <translation id="6002458620803359783">रुचाइएका आवाजहरू</translation> @@ -5615,7 +5617,6 @@ <translation id="6833996806551876956">गोपनीयता स्यान्डबक्सको ट्रायल अवधि</translation> <translation id="6834652994408928492">अँध्यारो मोड सूर्यास्तको बेला स्वतः अफ हुने छ</translation> <translation id="6835762382653651563">कृपया तपाईँको <ph name="DEVICE_TYPE" /> अद्यावधिक गर्न इन्टरनेटमा कनेक्ट गर्नुहोस्।</translation> -<translation id="6838034009068684089">कुनै साइटले मेरा स्क्रिनहरूमा विन्डो राख्न र त्यहाँ भएका विन्डो खोल्न खोज्दा त्यसो गर्न दिने कि नदिने भनी सोधियोस् (सिफारिस गरिएको)</translation> <translation id="6839225236531462745">प्रमाणपत्र मेटाइमा त्रुटी</translation> <translation id="6839916869147598086">साइन इन परिवर्तन गरिएको छ</translation> <translation id="6840155290835956714">पठाउनु अघि सोध्नुहोस्</translation> @@ -6526,7 +6527,6 @@ <translation id="7775694664330414886">यो ट्याब नामविहीन समूहमा सारियो - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">तपाईंले यो साइटका सबै ट्याबहरू बन्द नगरुन्जेल <ph name="ORIGIN" /> ले <ph name="FOLDERNAME" /> मा रहेका फाइलहरू हेर्न सक्ने छ</translation> <translation id="7776701556330691704">कुनै पनि आवाज फेला परेन</translation> -<translation id="7777284276915203144">तपाईंका पासवर्डहरू तपाईंको डिभाइसमा इन्क्रिप्ट गरेपछि मात्र Google पासवर्ड म्यानेजरमा सेभ गरिन्छ</translation> <translation id="7781335840981796660">सबै प्रयोगकर्ता खाताहरू र स्थानीय लगत हटाइनेछन्।</translation> <translation id="7782102568078991263">गुगलबाट कुनै थप सुझाव छैन</translation> <translation id="7782717250816686129">लग इन स्क्रिनमा निरन्तर डेटा भण्डारण गर्नुहोस् र सत्रमा प्रमाणपत्रहरू प्रविष्टि होस्।</translation> @@ -7178,7 +7178,6 @@ <translation id="8428634594422941299">बुझेँ</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> मा तपाईंलाई साइन आउट गरिने छ</translation> <translation id="8431190899827883166">ट्याप देखाइयोस्</translation> -<translation id="8431730749911729314">Google पासवर्ड म्यानेजरमा पासवर्डहरू सेभ गर्नुअघि ती पासवर्डहरू आफ्नो डिभाइसमा इन्क्रिप्ट गर्नुहोस्</translation> <translation id="8434480141477525001">NaCl डिबग पोर्ट</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> मार्फत आफ्नो पहिचान पुष्टि गर्नुहोस्</translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index f3e31dc..3230399 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1259,6 +1259,7 @@ <translation id="2263679799334060788">We ontvangen graag feedback, zodat we Google Cast kunnen verbeteren. Als je hulp nodig hebt bij het oplossen van castproblemen, ga je naar het <ph name="BEGIN_LINK" />Helpcentrum<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Vragen als een site toegang wil krijgen tot bluetooth-apparaten (aanbevolen)</translation> <translation id="2266957463645820432">IPP over USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth staat uit</translation> <translation id="2270450558902169558">Gegevens uitwisselen met elk apparaat in het domein <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Tijdens de installatie <ph name="BEGIN_BOLD" />wordt je hele harde schijf gewist<ph name="END_BOLD" />. Zorg dat je een back-up van je gegevens hebt.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Nadat de installatie is gestart, kun je deze niet meer annuleren.<ph name="END_PARAGRAPH2" /></translation> @@ -2082,7 +2083,6 @@ <translation id="3088052000289932193">De site gebruikt MIDI</translation> <translation id="3088128611727407543">App-profiel voorbereiden…</translation> <translation id="3088325635286126843">&Naam wijzigen...</translation> -<translation id="3089064280130434511">Blokkeer sites die vensters op je schermen openen en plaatsen</translation> <translation id="3089137131053189723">Zoekopdracht gewist</translation> <translation id="3090589793601454425">Niet verplaatsen</translation> <translation id="3090819949319990166">Kan extern crx-bestand niet kopiëren naar <ph name="TEMP_CRX_FILE" />.</translation> @@ -3700,6 +3700,7 @@ <translation id="4813136279048157860">Mijn afbeeldingen</translation> <translation id="4813512666221746211">Netwerkfout</translation> <translation id="4814378367953456825">Geef een naam op voor deze vingerafdruk</translation> +<translation id="481574578487123132">Gekoppelde apparaten</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, details</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 bookmark verwijderd}other{{COUNT} bookmarks verwijderd}}</translation> <translation id="4819607494758673676">Google Assistent-meldingen</translation> @@ -3714,7 +3715,6 @@ <translation id="482952334869563894">USB-apparaten van leverancier <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Pincode instellen</translation> <translation id="4830026649400230050">Alle in aanmerking komende downloads worden naar het <ph name="WEB_DRIVE" />-account van je organisatie geleid.</translation> -<translation id="4830121310592638841">Vragen als een site vensters op je schermen wil openen en plaatsen</translation> <translation id="4830502475412647084">OS-update installeren</translation> <translation id="4830573902900904548">Je <ph name="DEVICE_TYPE" /> kan geen verbinding maken met internet via <ph name="NETWORK_NAME" />. Kies een ander netwerk. <ph name="LEARN_MORE_LINK_START" />Meer informatie<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Er is één printer gevonden op de printerserver</translation> @@ -4413,6 +4413,7 @@ <translation id="5563234215388768762">Zoek op Google of typ een URL</translation> <translation id="5565735124758917034">Actief</translation> <translation id="5568069709869097550">Kan niet aanmelden</translation> +<translation id="5571066253365925590">Bluetooth staat aan</translation> <translation id="5571092938913434726">Algemene mediabediening</translation> <translation id="5571832155627049070">Je profiel aanpassen</translation> <translation id="5572851009514199876">Start Chrome en log in zodat Chrome kan controleren of je deze site mag openen.</translation> @@ -4810,6 +4811,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Vraag je beheerder deze app te verwijderen om ervoor te zorgen dat je kunt blijven browsen op het web.}other{Vraag je beheerder deze apps te verwijderen om ervoor te zorgen dat je kunt blijven browsen op het web.}}</translation> <translation id="5997337190805127100">Meer informatie over sitetoegang</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultaten voor '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">Je apparaten</translation> <translation id="6002210667729577411">Groep verplaatsen naar nieuw venster</translation> <translation id="6002452033851752583">Wachtwoord verwijderd uit je Google-account</translation> <translation id="6002458620803359783">Voorkeursstemmen</translation> @@ -5616,7 +5618,6 @@ <translation id="6833996806551876956">Proef voor privacy-sandbox</translation> <translation id="6834652994408928492">De donkere modus wordt automatisch aangezet bij zonsondergang</translation> <translation id="6835762382653651563">Maak verbinding met internet om je <ph name="DEVICE_TYPE" /> te updaten.</translation> -<translation id="6838034009068684089">Vragen als een site vensters op je schermen wil openen en plaatsen (aanbevolen)</translation> <translation id="6839225236531462745">Fout tijdens verwijderen van certificaat</translation> <translation id="6839916869147598086">Inloggegevens zijn gewijzigd</translation> <translation id="6840155290835956714">Vragen vóór verzenden</translation> @@ -6527,7 +6528,6 @@ <translation id="7775694664330414886">Tabblad verplaatst naar naamloze groep - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> kan bestanden in <ph name="FOLDERNAME" /> bekijken totdat je alle tabbladen voor deze site sluit</translation> <translation id="7776701556330691704">Geen stemmen gevonden</translation> -<translation id="7777284276915203144">Je wachtwoorden worden versleuteld op je apparaat voordat ze worden opgeslagen in Google Wachtwoordmanager</translation> <translation id="7781335840981796660">Alle gebruikersaccounts en lokale gegevens worden verwijderd.</translation> <translation id="7782102568078991263">Geen verdere suggesties van Google</translation> <translation id="7782717250816686129">Sla persistente gegevens op het inlogscherm op en voeg inloggegevens aan de sessie toe.</translation> @@ -7178,7 +7178,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Je wordt uitgelogd over <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Tikken bekijken</translation> -<translation id="8431730749911729314">Versleutel wachtwoorden op je apparaat voordat ze worden opgeslagen in Google Wachtwoordmanager</translation> <translation id="8434480141477525001">Foutopsporingspoort voor systeemeigen client</translation> <translation id="8435395510592618362">Je identiteit verifiëren met <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">Amerikaans</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index b6f1252..aa3b7df 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -1268,6 +1268,7 @@ brukerstøtten<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Spør når nettsteder vil ha tilgang til Bluetooth-enheter (anbefales)</translation> <translation id="2266957463645820432">IPP over USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth er deaktivert</translation> <translation id="2270450558902169558">utveksle data med en hvilken som helst enhet på domenet <ph name="DOMAIN" />.</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Installasjonen <ph name="BEGIN_BOLD" />kommer til å tømme hele harddisken din<ph name="END_BOLD" />. Sørg for at dataene dine er sikkerhetskopiert.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Når installasjonen er startet, kan den ikke avbrytes.<ph name="END_PARAGRAPH2" /></translation> @@ -2092,7 +2093,6 @@ <translation id="3088052000289932193">Nettstedet bruker MIDI</translation> <translation id="3088128611727407543">Klargjør app-profilen …</translation> <translation id="3088325635286126843">&Gi nytt navn</translation> -<translation id="3089064280130434511">Blokkér nettsteder fra å åpne og plassere vinduer på skjermene dine</translation> <translation id="3089137131053189723">Søket er slettet</translation> <translation id="3090589793601454425">Ikke flytt</translation> <translation id="3090819949319990166">Kunne ikke kopiere den eksterne crx-filen til <ph name="TEMP_CRX_FILE" />.</translation> @@ -3708,6 +3708,7 @@ <translation id="4813136279048157860">Mine bilder</translation> <translation id="4813512666221746211">Nettverksfeil</translation> <translation id="4814378367953456825">Skriv inn et navn for dette fingeravtrykket</translation> +<translation id="481574578487123132">Tilknyttede enheter</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detaljer</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 bokmerke er slettet}other{{COUNT} bokmerker er slettet}}</translation> <translation id="4819607494758673676">Google Assistent-varsler</translation> @@ -3722,7 +3723,6 @@ <translation id="482952334869563894">USB-enheter fra leverandøren <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Konfigurer en PIN-kode</translation> <translation id="4830026649400230050">Alle kvalifiserte nedlastinger lagres i organisasjonens <ph name="WEB_DRIVE" />-konto.</translation> -<translation id="4830121310592638841">Spør når nettsteder vil åpne og plassere vinduer på skjermene dine</translation> <translation id="4830502475412647084">Installerer OS-oppdateringen</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> kan ikke koble til Internett via <ph name="NETWORK_NAME" />. Velg et annet nettverk. <ph name="LEARN_MORE_LINK_START" />Finn ut mer<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Fant én skriver på utskriftstjeneren</translation> @@ -4422,6 +4422,7 @@ <translation id="5563234215388768762">Søk i Google eller skriv inn en nettadresse</translation> <translation id="5565735124758917034">Aktiv</translation> <translation id="5568069709869097550">Kan ikke logge på</translation> +<translation id="5571066253365925590">Bluetooth er aktivert</translation> <translation id="5571092938913434726">Global Media Controls</translation> <translation id="5571832155627049070">Tilpass profilen din</translation> <translation id="5572851009514199876">Start og logg på Chrome, så Chrome kan sjekke om du har tillatelse til å gå til dette nettstedet.</translation> @@ -4819,6 +4820,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{For å sikre at du fortsatt kan surfe på nettet, be administratoren din om å fjerne dette programmet.}other{For å sikre at du fortsatt kan surfe på nettet, be administratoren din om å fjerne disse programmene.}}</translation> <translation id="5997337190805127100">Finn ut mer om nettstedstilgang</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultater for «<ph name="SEARCH_TEXT" />»</translation> +<translation id="6002122790816966947">Enhetene dine</translation> <translation id="6002210667729577411">Flytt gruppen til et nytt vindu</translation> <translation id="6002452033851752583">Passordet ble slettet fra Google-kontoen din</translation> <translation id="6002458620803359783">Foretrukne stemmer</translation> @@ -5625,7 +5627,6 @@ <translation id="6833996806551876956">Prøveperiode på Prosessisolering for personvern</translation> <translation id="6834652994408928492">Mørk modus blir slått på automatisk ved solnedgang</translation> <translation id="6835762382653651563">Koble til Internett for å oppdatere <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Spør når nettsteder vil åpne og plassere vinduer på skjermene dine (anbefales)</translation> <translation id="6839225236531462745">Feil ved sletting av sertifikat</translation> <translation id="6839916869147598086">Påloggingen er endret</translation> <translation id="6840155290835956714">Spør før noe sendes</translation> @@ -6536,7 +6537,6 @@ <translation id="7775694664330414886">Fanen er flyttet til en gruppe uten navn – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Da kan <ph name="ORIGIN" /> se filer i <ph name="FOLDERNAME" /> frem til du lukker alle fanene for dette nettstedet</translation> <translation id="7776701556330691704">Fant ingen stemmer</translation> -<translation id="7777284276915203144">Passordene dine krypteres på enheten før de lagres i Google Passordlagring</translation> <translation id="7781335840981796660">Alle brukerkontoer og lokale data fjernes.</translation> <translation id="7782102568078991263">Google har ikke flere forslag</translation> <translation id="7782717250816686129">Lagre vedvarende data på påloggingsskjermen, og bruk legitimasjon i økten.</translation> @@ -7188,7 +7188,6 @@ <translation id="8428634594422941299">Greit</translation> <translation id="84297032718407999">Du logges av om <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Vis trykk</translation> -<translation id="8431730749911729314">Krypter passord på enheten før de lagres i Google Passordlagring</translation> <translation id="8434480141477525001">Feilsøkingsport for NaCl</translation> <translation id="8435395510592618362">Bekreft identiteten din med <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">Amerikansk</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index 69a86a9..46ea44cd 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -1257,6 +1257,7 @@ Cast ସମ୍ବନ୍ଧିତ ସମସ୍ୟାଗୁଡ଼ିକର ଟ୍ରବୁଲସୁଟ୍ କରିବାରେ ସହାୟତା ପାଇଁ, ଦୟାକରି <ph name="BEGIN_LINK" />ସହାୟତା କେନ୍ଦ୍ର<ph name="END_LINK" />କୁ ରେଫର୍ କରନ୍ତୁ।</translation> <translation id="22665427234727190">କୌଣସି ସାଇଟ୍ ବ୍ଲୁଟୁଥ୍ ଡିଭାଇସଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରିବାକୁ ଚାହିଁଲେ, ପଚାରନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation> <translation id="2266957463645820432">USBରେ IPP (IPPUSB)</translation> +<translation id="2268130516524549846">ବ୍ଲୁ-ଟୁଥ୍ ଅକ୍ଷମ କରାଗଲା</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> ଡୋମେନ୍ରେ ଥିବା ଯେକୌଣସି ଡିଭାଇସ୍ ସହିତ ଡାଟା ବିନିମୟ କରନ୍ତୁ</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ଇନଷ୍ଟଲେସନ <ph name="BEGIN_BOLD" />ଆପଣଙ୍କ ହାର୍ଡ ଡ୍ରାଇଭର ସମସ୍ତ ଡାଟାକୁ ଖାଲି କରିଦେବ<ph name="END_BOLD" />। ଆପଣଙ୍କ ଡାଟାର ବ୍ୟାକଅପ ନିଆଯାଇଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ଇନଷ୍ଟଲେସନ ଆରମ୍ଭ ହେବା ପରେ ଏହାକୁ ବାତିଲ୍ କରାଯାଇପାରିବ ନାହିଁ।<ph name="END_PARAGRAPH2" /></translation> @@ -2081,7 +2082,6 @@ <translation id="3088052000289932193">ସାଇଟ୍ MIDI ବ୍ୟବହାର କରୁଛି</translation> <translation id="3088128611727407543">ଆପ୍ ପ୍ରୋଫାଇଲ୍ ପ୍ରସ୍ତୁତ କରାଯାଉଛି...</translation> <translation id="3088325635286126843">&ରିନେମ୍ କରନ୍ତୁ...</translation> -<translation id="3089064280130434511">ସାଇଟଗୁଡ଼ିକୁ ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ୱିଣ୍ଡୋଗୁଡ଼ିକ ଖୋଲିବା ଏବଂ ରଖିବାରୁ ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="3089137131053189723">ସନ୍ଧାନ ଖାଲି ହୋଇଯାଇଛି</translation> <translation id="3090589793601454425">ମୁଭ୍ କରନ୍ତୁ ନାହିଁ</translation> <translation id="3090819949319990166"><ph name="TEMP_CRX_FILE" />କୁ crx ଏକ୍ସଟର୍ନଲ୍ ଫାଇଲ୍ କପି କରିପାରିବ ନାହିଁ।</translation> @@ -3699,6 +3699,7 @@ <translation id="4813136279048157860">ମୋ ଛବି</translation> <translation id="4813512666221746211">ନେଟ୍ୱର୍କ ତ୍ରୁଟି</translation> <translation id="4814378367953456825">ଏହି ଟିପଚିହ୍ନ ପାଇଁ ଏକ ନାମ ଲେଖନ୍ତୁ</translation> +<translation id="481574578487123132">ଲିଙ୍କ କରାଯାଇଥିବା ଡିଭାଇସଗୁଡ଼ିକ</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, ବିବରଣୀ</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1ଟି ବୁକମାର୍କ ଡିଲିଟ୍ କରାଯାଇଛି}other{{COUNT}ଟି ବୁକମାର୍କ ଡିଲିଟ୍ କରାଯାଇଛି}}</translation> <translation id="4819607494758673676">Google Assistant ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ</translation> @@ -3713,7 +3714,6 @@ <translation id="482952334869563894">ଭେଣ୍ଡର୍ <ph name="VENDOR_ID" />ରୁ USB ଡିଭାଇସଗୁଡ଼ିକ</translation> <translation id="4829768588131278040">PIN ସେଟ୍ ଅପ୍ କରନ୍ତୁ</translation> <translation id="4830026649400230050">ସମସ୍ତ ଯୋଗ୍ୟ ଡାଉନଲୋଡ୍ ଆପଣଙ୍କ ସଂସ୍ଥାର <ph name="WEB_DRIVE" /> ଆକାଉଣ୍ଟକୁ ଯାଇଥାଏ।</translation> -<translation id="4830121310592638841">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ଖୋଲିବା ଏବଂ ରଖିବାକୁ ଚାହିଁଲେ, ପଚାରନ୍ତୁ</translation> <translation id="4830502475412647084">OS ଅପ୍ଡେଟ୍ ଇନ୍ଷ୍ଟଲ୍ ହେଉଛି</translation> <translation id="4830573902900904548">ଆପଣଙ୍କ <ph name="DEVICE_TYPE" />ର <ph name="NETWORK_NAME" /> ବ୍ୟବହାର କରି ଇଣ୍ଟର୍ନେଟ୍ ସହ ସଂଯୁକ୍ତ କରିବାକୁ ଅକ୍ଷମ ଅଟେ। ଦୟାକରି ଅନ୍ୟ ଏକ ନେଟ୍ୱର୍କ ବାଛନ୍ତୁ। <ph name="LEARN_MORE_LINK_START" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">ପ୍ରିଣ୍ଟ ସର୍ଭରରୁ 1ଟି ପ୍ରିଣ୍ଟର୍ ମିଳିଲା</translation> @@ -4414,6 +4414,7 @@ <translation id="5563234215388768762">Googleରେ ଖୋଜନ୍ତୁ କିମ୍ବା ଗୋଟିଏ URL ଲେଖନ୍ତୁ</translation> <translation id="5565735124758917034">ସକ୍ରିୟ ଅଛି</translation> <translation id="5568069709869097550">ସାଇନ୍ ଇନ୍ କରିପାରିବ ନାହିଁ</translation> +<translation id="5571066253365925590">ବ୍ଲୁଟୁଥ୍ ସକ୍ଷମ ଅଛି</translation> <translation id="5571092938913434726">ଗ୍ଲୋବାଲ୍ ମିଡିଆ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ</translation> <translation id="5571832155627049070">ଆପଣଙ୍କ ପ୍ରୋଫାଇଲ୍ କଷ୍ଟମାଇଜ୍ କରନ୍ତୁ</translation> <translation id="5572851009514199876">ଦୟାକରି Chromeରେ ସାଇନ୍ ଇନ୍ କରି ଆରମ୍ଭ କରନ୍ତୁ ଯାହା ଦ୍ୱାରା Chrome ଏହା ଯାଞ୍ଚ କରିପାରିବ ଯେ ଆପଣଙ୍କୁ ଏହି ସାଇଟ୍ ଆକ୍ସେସ୍ କରିବାକୁ ଅନୁମତି ଅଛି କି ନାହିଁ।</translation> @@ -4811,6 +4812,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ଏହା ସୁନିଶ୍ଚିତ କରିବା ପାଇଁ ଯେ ଆପଣ ୱେବ୍ ବ୍ରାଉଜିଂ ଜାରି ରଖିପାରିବେ, ଆପଣଙ୍କର ବ୍ୟବସ୍ଥାପକଙ୍କୁ ଏହି ଆପ୍ଲିକେସନ୍ କାଢ଼ିବାକୁ କୁହନ୍ତୁ।}other{ଏହା ସୁନିଶ୍ଚିତ କରିବା ପାଇଁ ଯେ ଆପଣ ୱେବ୍ ବ୍ରାଉଜିଂ ଜାରି ରଖିପାରିବେ, ଆପଣଙ୍କର ବ୍ୟବସ୍ଥାପକଙ୍କୁ ଏହି ଆପ୍ଲିକେସନ୍ଗୁଡ଼ିକ କାଢ଼ିବାକୁ କୁହନ୍ତୁ।}}</translation> <translation id="5997337190805127100">ସାଇଟ୍ ଆକ୍ସେସ୍ ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' ପାଇଁ <ph name="RESULT_COUNT" />ଟି ପରିଣାମ</translation> +<translation id="6002122790816966947">ଆପଣଙ୍କ ଡିଭାଇସଗୁଡ଼ିକ</translation> <translation id="6002210667729577411">ନୂଆ ୱିଣ୍ଡୋକୁ ଗୋଷ୍ଠୀ ମୁଭ୍ କରନ୍ତୁ</translation> <translation id="6002452033851752583">ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରୁ ପାସୱାର୍ଡକୁ ଡିଲିଟ୍ କରିଦିଆଯାଇଛି</translation> <translation id="6002458620803359783">ଅଗ୍ରାଧିକାର ଭିତ୍ତିରେ ଦିଆଯାଇଥିବା ଭଏସ୍</translation> @@ -5619,7 +5621,6 @@ <translation id="6833996806551876956">Privacy Sandboxର ଟ୍ରାଏଲ୍</translation> <translation id="6834652994408928492">ସୂର୍ଯ୍ୟାସ୍ତ ସମୟରେ ଡାର୍କ ମୋଡ୍ ସ୍ୱଚାଳିତ ଭାବେ ଚାଲୁ ହୋଇଯିବ</translation> <translation id="6835762382653651563">ଆପଣଙ୍କର <ph name="DEVICE_TYPE" />କୁ ଅପ୍ଡେଟ୍ କରିବା ପାଇଁ ଦୟାକରି ଇର୍ଣ୍ଟନେଟ୍ ସହ ସଂଯୋଗ କରନ୍ତୁ।</translation> -<translation id="6838034009068684089">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ଖୋଲିବା ସହ ରଖିବାକୁ ଚାହିଁଲେ, ପଚାରନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation> <translation id="6839225236531462745">ସାର୍ଟିଫିକେଟ୍ ଡିଲିଟ୍ କରିବା ପ୍ରକ୍ରିୟାରେ ତ୍ରୁଟି</translation> <translation id="6839916869147598086">ସାଇନ-ଇନ୍ ବଦଳା ଯାଇଛି</translation> <translation id="6840155290835956714">ପଠାଇବା ପୂର୍ବରୁ ପଚାରନ୍ତୁ</translation> @@ -6530,7 +6531,6 @@ <translation id="7775694664330414886">ବେନାମୀ ଗୋଷ୍ଠୀକୁ ଟାବ୍ ମୁଭ୍ କରାଯାଇଛି - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">ଆପଣ ଏହି ସାଇଟ୍ ପାଇଁ ସମସ୍ତ ଟାବକୁ ବନ୍ଦ ନକରିବା ପର୍ଯ୍ୟନ୍ତ <ph name="ORIGIN" />, <ph name="FOLDERNAME" />ରେ ଥିବା ଫାଇଲଗୁଡ଼ିକୁ ଦେଖିବାକୁ ସକ୍ଷମ ହେବ</translation> <translation id="7776701556330691704">କୌଣସି ଭଏସ୍ ମିଳିଲା ନାହିଁ</translation> -<translation id="7777284276915203144">ଆପଣଙ୍କର ପାସୱାର୍ଡକୁ Google ପାସୱାର୍ଡ ମ୍ୟାନେଜରରେ ସେଭ କରାଯିବା ପୂର୍ବରୁ ତାହାକୁ ଆପଣଙ୍କ ଡିଭାଇସରେ ଏନକ୍ରିପ୍ଟ କରାଯାଏ</translation> <translation id="7781335840981796660">ସମସ୍ତ ଉପଯୋଗକର୍ତ୍ତା ଆକାଉଣ୍ଟ ଏବଂ ସ୍ଥାନୀୟ ଡାଟା କାଢ଼ିଦିଆଯିବ।</translation> <translation id="7782102568078991263">Googleରୁ ଆଉ ଅଧିକ ପରାମର୍ଶ ମିଳିବ ନାହିଁ</translation> <translation id="7782717250816686129">ଲଗ୍ଇନ୍ ସ୍କ୍ରିନ୍ରେ ନିୟମିତ ଡାଟା ଷ୍ଟୋର୍ କରନ୍ତୁ ଏବଂ ସେସନ୍କୁ କ୍ରେଡେନ୍ସିଆଲ୍ଗୁଡ଼ିକ ଇନ୍ଜେକ୍ଟ କରନ୍ତୁ।</translation> @@ -7180,7 +7180,6 @@ <translation id="8428634594422941299">ବୁଝିଗଲି</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" />ରେ ଆପଣ ସାଇନ୍ ଆଉଟ୍ ହୋଇଯିବେ</translation> <translation id="8431190899827883166">ଟାପ୍ଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ</translation> -<translation id="8431730749911729314">ପାସୱାର୍ଡଗୁଡ଼ିକୁ Google ପାସୱାର୍ଡ ମ୍ୟାନେଜରରେ ସେଭ କରାଯିବା ପୂର୍ବରୁ ସେଗୁଡ଼ିକୁ ଆପଣଙ୍କ ଡିଭାଇସରେ ଏନକ୍ରିପ୍ଟ କରନ୍ତୁ</translation> <translation id="8434480141477525001">NaCl ଡିବଗ୍ ପୋର୍ଟ</translation> <translation id="8435395510592618362">ଆପଣଙ୍କ ପରିଚୟକୁ <ph name="APP_NAME" /> ସହିତ ଯାଞ୍ଚ କରନ୍ତୁ</translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 86c048c..bc6be814 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -1275,6 +1275,7 @@ ਮਦਦ ਕੇਂਦਰ<ph name="END_LINK" /> 'ਤੇ ਜਾਓ।</translation> <translation id="22665427234727190">ਕਿਸੇ ਸਾਈਟ ਵੱਲੋਂ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਵੇਲੇ ਪੁੱਛੋ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation> <translation id="2266957463645820432">USB 'ਤੇ IPP (IPPUSB)</translation> +<translation id="2268130516524549846">ਬਲੂਟੁੱਥ ਬੰਦ ਹੈ</translation> <translation id="2270450558902169558">ਡੋਮੇਨ <ph name="DOMAIN" /> ਵਿੱਚ ਕਿਸੇ ਵੀ ਡੀਵਾਈਸ ਨਾਲ ਡਾਟਾ ਐਕਸਚੇਂਜ ਕਰੋ</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ਸਥਾਪਨਾ <ph name="BEGIN_BOLD" />ਨਾਲ ਤੁਹਾਡੀ ਹਾਰਡ ਡਰਾਈਵ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ<ph name="END_BOLD" />। ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਹਾਡੇ ਡਾਟੇ ਦਾ ਬੈਕਅੱਪ ਲਿਆ ਗਿਆ ਹੈ।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ਇੱਕ ਵਾਰ ਸਥਾਪਨਾ ਸ਼ੁਰੂ ਹੋਣ 'ਤੇ, ਇਸ ਨੂੰ ਰੱਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">ਸਾਈਟ MIDI ਨੂੰ ਵਰਤ ਰਹੀ ਹੈ</translation> <translation id="3088128611727407543">ਐਪ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation> <translation id="3088325635286126843">&ਮੁੜ ਨਾਮ ਦਿਓ...</translation> -<translation id="3089064280130434511">ਸਾਈਟਾਂ ਨੂੰ ਤੁਹਾਡੀਆਂ ਸਕ੍ਰੀਨਾਂ 'ਤੇ ਵਿੰਡੋ ਨੂੰ ਖੋਲ੍ਹਣ ਅਤੇ ਰੱਖਣ ਤੋਂ ਬਲਾਕ ਕਰੋ</translation> <translation id="3089137131053189723">ਖੋਜ ਕਲੀਅਰ ਕੀਤੀ ਗਈ</translation> <translation id="3090589793601454425">ਨਾ ਲਿਜਾਓ</translation> <translation id="3090819949319990166"><ph name="TEMP_CRX_FILE" /> 'ਤੇ ਬਾਹਰੀ crx ਫਾਈਲ ਨੂੰ ਕਾਪੀ ਨਹੀਂ ਕਰ ਸਕਦਾ।</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">ਮੇਰੇ ਚਿੱਤਰ</translation> <translation id="4813512666221746211">ਨੈੱਟਵਰਕ ਗੜਬੜ</translation> <translation id="4814378367953456825">ਇਸ ਫਿੰਗਰਪ੍ਰਿੰਟ ਲਈ ਨਾਮ ਦਾਖਲ ਕਰੋ</translation> +<translation id="481574578487123132">ਲਿੰਕ ਕੀਤੇ ਡੀਵਾਈਸ</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, ਵੇਰਵੇ</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 ਬੁੱਕਮਾਰਕ ਮਿਟਾਇਆ ਗਿਆ}one{{COUNT} ਬੁੱਕਮਾਰਕ ਮਿਟਾਇਆ ਗਿਆ}other{{COUNT} ਬੁੱਕਮਾਰਕ ਮਿਟਾਏ ਗਏ}}</translation> <translation id="4819607494758673676">Google Assistant ਸੂਚਨਾਵਾਂ</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">ਵਿਕਰੇਤਾ <ph name="VENDOR_ID" /> ਦੇ USB ਡੀਵਾਈਸ</translation> <translation id="4829768588131278040">PIN ਸਥਾਪਤ ਕਰੋ</translation> <translation id="4830026649400230050">ਸਾਰੇ ਯੋਗ ਡਾਊਨਲੋਡ ਤੁਹਾਡੀ ਸੰਸਥਾ ਦੇ <ph name="WEB_DRIVE" /> ਖਾਤੇ ਵਿੱਚ ਭੇਜਣ ਵਾਲੇ ਹੁੰਦੇ ਹਨ।</translation> -<translation id="4830121310592638841">ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ 'ਤੇ ਕਿਸੇ ਸਾਈਟ ਵੱਲੋਂ ਵਿੰਡੋ ਨੂੰ ਖੋਲ੍ਹਣ ਅਤੇ ਉਸਨੂੰ ਰੱਖਣ ਦੌਰਾਨ ਪੁੱਛੋ</translation> <translation id="4830502475412647084">OS ਅੱਪਡੇਟ ਸਥਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="4830573902900904548">ਤੁਹਾਡਾ <ph name="DEVICE_TYPE" /> <ph name="NETWORK_NAME" /> ਨੂੰ ਵਰਤਦੇ ਹੋਏ ਇੰਟਰਨੈਟ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੂਜਾ ਨੈੱਟਵਰਕ ਚੁਣੋ। <ph name="LEARN_MORE_LINK_START" />ਹੋਰ ਜਾਣੋ<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">ਪ੍ਰਿੰਟ ਸਰਵਰ ਤੋਂ 1 ਪ੍ਰਿੰਟਰ ਮਿਲਿਆ</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Google 'ਤੇ ਖੋਜੋ ਜਾਂ ਕੋਈ URL ਟਾਈਪ ਕਰੋ</translation> <translation id="5565735124758917034">ਸਕਿਰਿਆ</translation> <translation id="5568069709869097550">ਸਾਈਨ-ਇਨ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation> +<translation id="5571066253365925590">ਬਲੂਟੁੱਥ ਸਮਰਥਿਤ</translation> <translation id="5571092938913434726">ਗਲੋਬਲ ਮੀਡੀਆ ਕੰਟਰੋਲ</translation> <translation id="5571832155627049070">ਆਪਣੇ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ</translation> <translation id="5572851009514199876">ਕਿਰਪਾ ਕਰਕੇ ਸ਼ੁਰੂ ਕਰੋ ਅਤੇ Chrome 'ਤੇ ਸਾਈਨ ਇਨ ਕਰੋ ਤਾਂ ਕਿ Chrome ਇਹ ਜਾਂਚ ਸਕੇ ਕਿ ਤੁਹਾਨੂੰ ਇਸ ਸਾਈਟ 'ਤੇ ਪਹੁੰਚ ਲਈ ਇਜਾਜ਼ਤ ਹੈ ਜਾਂ ਨਹੀਂ।</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ਇਹ ਪੱਕਾ ਕਰਨ ਲਈ ਕਿ ਤੁਸੀਂ ਵੈੱਬ ਬ੍ਰਾਊਜ਼ ਕਰਨਾ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਹਟਾਉਣ ਲਈ ਕਹੋ।}one{ਇਹ ਪੱਕਾ ਕਰਨ ਲਈ ਕਿ ਤੁਸੀਂ ਵੈੱਬ ਬ੍ਰਾਊਜ਼ ਕਰਨਾ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਹਟਾਉਣ ਲਈ ਕਹੋ।}other{ਇਹ ਪੱਕਾ ਕਰਨ ਲਈ ਕਿ ਤੁਸੀਂ ਵੈੱਬ ਬ੍ਰਾਊਜ਼ ਕਰਨਾ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਇਹ ਐਪਲੀਕੇਸ਼ਨਾਂ ਹਟਾਉਣ ਲਈ ਕਹੋ।}}</translation> <translation id="5997337190805127100">ਸਾਈਟ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਬਾਰੇ ਹੋਰ ਜਾਣੋ</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' ਲਈ <ph name="RESULT_COUNT" /> ਨਤੀਜੇ</translation> +<translation id="6002122790816966947">ਤੁਹਾਡੇ ਡੀਵਾਈਸ</translation> <translation id="6002210667729577411">ਗਰੁੱਪ ਨੂੰ ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਲਿਜਾਓ</translation> <translation id="6002452033851752583">ਤੁਹਾਡੇ Google ਖਾਤੇ ਤੋਂ ਪਾਸਵਰਡ ਮਿਟਾਇਆ ਗਿਆ</translation> <translation id="6002458620803359783">ਤਰਜੀਹੀ ਅਵਾਜ਼ਾਂ</translation> @@ -5636,7 +5638,6 @@ <translation id="6833996806551876956">ਪਰਦੇਦਾਰੀ ਸੈਂਡਬਾਕਸ ਪਰਖ</translation> <translation id="6834652994408928492">ਸੂਰਜ ਡੁੱਬਣ ਵੇਲੇ ਗੂੜ੍ਹਾ ਮੋਡ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਆਪਣੇ ਆਪ ਚਾਲੂ ਹੋ ਜਾਵੇਗਾ</translation> <translation id="6835762382653651563">ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀ <ph name="DEVICE_TYPE" /> ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਇੰਟਰਨੈਟ ਨਾਲ ਕਨੈਕਟ ਕਰੋ।</translation> -<translation id="6838034009068684089">ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ 'ਤੇ ਕਿਸੇ ਸਾਈਟ ਵੱਲੋਂ ਵਿੰਡੋ ਨੂੰ ਖੋਲ੍ਹਣ ਅਤੇ ਉਸਨੂੰ ਰੱਖਣ ਦੌਰਾਨ ਪੁੱਛੋ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation> <translation id="6839225236531462745">ਪ੍ਰਮਾਣ-ਪੱਤਰ ਮਿਟਾਉਣ ਵਿੱਚ ਗੜਬੜ</translation> <translation id="6839916869147598086">ਸਾਈਨ-ਇਨ ਬਦਲ ਗਿਆ ਹੈ</translation> <translation id="6840155290835956714">ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁੱਛੋ</translation> @@ -6547,7 +6548,6 @@ <translation id="7775694664330414886">ਟੈਬ ਨੂੰ ਬੇਨਾਮ ਗਰੁੱਪ ਵਿੱਚ ਲਿਜਾਇਆ ਗਿਆ - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> ਇਸ ਸਾਈਟ ਲਈ ਸਾਰੀਆਂ ਟੈਬਾਂ ਬੰਦ ਨਾ ਕੀਤੇ ਜਾਣ ਤੱਕ <ph name="FOLDERNAME" /> ਵਿੱਚ ਫ਼ਾਈਲਾਂ ਨੂੰ ਦੇਖ ਸਕੇਗੀ</translation> <translation id="7776701556330691704">ਕੋਈ ਅਵਾਜ਼ਾਂ ਨਹੀਂ ਮਿਲੀਆਂ</translation> -<translation id="7777284276915203144">Google ਪਾਸਵਰਡ ਪ੍ਰਬੰਧਕ 'ਤੇ ਰੱਖਿਅਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ 'ਤੇ ਇਨਕ੍ਰਿਪਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation> <translation id="7781335840981796660">ਸਾਰੇ ਵਰਤੋਂਕਾਰ ਖਾਤੇ ਅਤੇ ਸਥਾਨਕ ਡਾਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।</translation> <translation id="7782102568078991263">Google ਤੋਂ ਕੋਈ ਹੋਰ ਸੁਝਾਅ ਨਹੀਂ</translation> <translation id="7782717250816686129">ਲੌਗ-ਇਨ ਸਕ੍ਰੀਨ 'ਤੇ ਸਥਿਰ ਡਾਟਾ ਸਟੋਰ ਕਰਕੇ ਸੈਸ਼ਨ ਵਿੱਚ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਲਿਆਓ।</translation> @@ -7198,7 +7198,6 @@ <translation id="8428634594422941299">ਸਮਝ ਲਿਆ</translation> <translation id="84297032718407999">ਤੁਹਾਨੂੰ <ph name="LOGOUT_TIME_LEFT" /> ਵਿੱਚ ਸਾਈਨ-ਆਊਟ ਕੀਤਾ ਜਾਵੇਗਾ</translation> <translation id="8431190899827883166">ਟੈਪਾਂ ਦਿਖਾਓ</translation> -<translation id="8431730749911729314">Google ਪਾਸਵਰਡ ਪ੍ਰਬੰਧਕ 'ਤੇ ਪਾਸਵਰਡਾਂ ਦੇ ਰੱਖਿਅਤ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਉਨ੍ਹਾਂ ਨੂੰ ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ ਇਨਕ੍ਰਿਪਟ ਕਰੋ</translation> <translation id="8434480141477525001">NaCl ਡੀਬੱਗ ਪੋਰਟ</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> ਨਾਲ ਆਪਣੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ</translation> <translation id="8437209419043462667">US</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 1feac23..3600729 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1257,6 +1257,7 @@ <translation id="2263679799334060788">Opinie użytkowników pomagają nam udoskonalać Google Cast, dlatego bardzo je sobie cenimy. Pomoc w zakresie rozwiązywania problemów z przesyłaniem znajdziesz w <ph name="BEGIN_LINK" />Centrum pomocy<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Pytaj, gdy strona chce uzyskać dostęp do urządzeń Bluetooth (zalecane)</translation> <translation id="2266957463645820432">IPP przez USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth wyłączony</translation> <translation id="2270450558902169558">Wymiana danych z dowolnym urządzeniem w domenie <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Instalacja <ph name="BEGIN_BOLD" />wykasuje wszystkie dane z dysku twardego<ph name="END_BOLD" />. Utwórz kopię zapasową danych.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Rozpoczętej instalacji nie będzie można anulować.<ph name="END_PARAGRAPH2" /></translation> @@ -2080,7 +2081,6 @@ <translation id="3088052000289932193">Strona używa MIDI</translation> <translation id="3088128611727407543">Przygotowuję profil aplikacji…</translation> <translation id="3088325635286126843">&Zmień nazwę</translation> -<translation id="3089064280130434511">Nie zezwalaj stronom na otwieranie i umieszczanie okien na Twoich ekranach</translation> <translation id="3089137131053189723">Wyszukiwanie zostało wyczyszczone</translation> <translation id="3090589793601454425">Nie przenoś</translation> <translation id="3090819949319990166">Nie można skopiować zewnętrznego pliku CRX jako <ph name="TEMP_CRX_FILE" />.</translation> @@ -3698,6 +3698,7 @@ <translation id="4813136279048157860">Moje obrazy</translation> <translation id="4813512666221746211">Błąd sieci</translation> <translation id="4814378367953456825">Wpisz nazwę tego odcisku</translation> +<translation id="481574578487123132">Połączone urządzenia</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, szczegóły</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Usunięto 1 zakładkę}few{Usunięto {COUNT} zakładki}many{Usunięto {COUNT} zakładek}other{Usunięto {COUNT} zakładki}}</translation> <translation id="4819607494758673676">Powiadomienia od Asystenta Google</translation> @@ -3712,7 +3713,6 @@ <translation id="482952334869563894">Urządzenia USB firmy <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Ustaw kod PIN</translation> <translation id="4830026649400230050">Wszystkie kwalifikujące się pobrane pliki trafiają na należące do Twojej organizacji konto w usłudze <ph name="WEB_DRIVE" />.</translation> -<translation id="4830121310592638841">Pytaj, gdy strona chce otwierać i umieszczać okna na Twoich ekranach</translation> <translation id="4830502475412647084">Instaluję aktualizację systemu operacyjnego</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> nie może się połączyć z internetem przez sieć <ph name="NETWORK_NAME" />. Wybierz inną sieć. <ph name="LEARN_MORE_LINK_START" />Więcej informacji<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Znaleziono jedną drukarkę na serwerze druku</translation> @@ -4412,6 +4412,7 @@ <translation id="5563234215388768762">Wyszukaj w Google lub wpisz URL</translation> <translation id="5565735124758917034">Aktywny</translation> <translation id="5568069709869097550">Nie można się zalogować</translation> +<translation id="5571066253365925590">Bluetooth włączony</translation> <translation id="5571092938913434726">Global Media Controls</translation> <translation id="5571832155627049070">Dostosuj profil</translation> <translation id="5572851009514199876">Uruchom Chrome i zaloguj się w nim, by mógł sprawdzić, czy masz uprawnienia dostępu do tej strony.</translation> @@ -4809,6 +4810,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Aby móc dalej przeglądać internet, poproś administratora o usunięcie tej aplikacji.}few{Aby móc dalej przeglądać internet, poproś administratora o usunięcie tych aplikacji.}many{Aby móc dalej przeglądać internet, poproś administratora o usunięcie tych aplikacji.}other{Aby móc dalej przeglądać internet, poproś administratora o usunięcie tych aplikacji.}}</translation> <translation id="5997337190805127100">Więcej informacji o uprawnieniach dostępu do stron</translation> <translation id="6000758707621254961">Wyniki wyszukiwania dla zapytania „<ph name="SEARCH_TEXT" />”: <ph name="RESULT_COUNT" /></translation> +<translation id="6002122790816966947">Twoje urządzenia</translation> <translation id="6002210667729577411">Przenieś grupę do nowego okna</translation> <translation id="6002452033851752583">Hasło zostało usunięte z konta Google</translation> <translation id="6002458620803359783">Preferowane głosy</translation> @@ -5615,7 +5617,6 @@ <translation id="6833996806551876956">Okres próbny piaskownicy prywatności</translation> <translation id="6834652994408928492">Tryb ciemny włączy się automatycznie o zachodzie słońca</translation> <translation id="6835762382653651563">Aby zaktualizować urządzenie <ph name="DEVICE_TYPE" />, połącz się z internetem.</translation> -<translation id="6838034009068684089">Pytaj, gdy strona chce otwierać i umieszczać okna na Twoich ekranach (zalecane)</translation> <translation id="6839225236531462745">Błąd usuwania certyfikatu</translation> <translation id="6839916869147598086">Logowanie wygląda teraz inaczej</translation> <translation id="6840155290835956714">Pytaj przed wysłaniem</translation> @@ -6526,7 +6527,6 @@ <translation id="7775694664330414886">Karta została przeniesiona do nienazwanej grupy – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Strona <ph name="ORIGIN" /> będzie mogła wyświetlać pliki z folderu <ph name="FOLDERNAME" />, dopóki nie zamkniesz wszystkich jej kart</translation> <translation id="7776701556330691704">Nie znaleziono głosów</translation> -<translation id="7777284276915203144">Przed zapisaniem w menedżerze haseł Google hasła są szyfrowane na urządzeniu</translation> <translation id="7781335840981796660">Wszystkie konta użytkowników i dane lokalne zostaną usunięte.</translation> <translation id="7782102568078991263">Nie pokazuj sugestii od Google</translation> <translation id="7782717250816686129">Przechowuj trwałe dane na ekranie logowania i wstawiaj do sesji dane uwierzytelniające.</translation> @@ -7179,7 +7179,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Wylogujemy Cię za <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Pokaż kliknięcia</translation> -<translation id="8431730749911729314">Zanim zapiszesz hasła w menedżerze haseł Google, zaszyfruj je na urządzeniu</translation> <translation id="8434480141477525001">Port debugowania NaCl</translation> <translation id="8435395510592618362">Weryfikacja tożsamości w aplikacji <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">amerykański</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 14f4d362..5542b53 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1275,6 +1275,7 @@ Central de Ajuda<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Perguntar quando um site quiser acessar dispositivos Bluetooth (recomendado)</translation> <translation id="2266957463645820432">IPP via USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth desativado</translation> <translation id="2270450558902169558">Trocar dados com qualquer dispositivo no domínio <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />A instalação <ph name="BEGIN_BOLD" />limpará todo o disco rígido<ph name="END_BOLD" />. Confira se você fez o backup dos dados.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Não será possível cancelar a instalação depois que ela for iniciada.<ph name="END_PARAGRAPH2" /></translation> @@ -2099,7 +2100,6 @@ <translation id="3088052000289932193">O site está usando um dispositivo MIDI</translation> <translation id="3088128611727407543">Preparando perfil de app…</translation> <translation id="3088325635286126843">&Renomear...</translation> -<translation id="3089064280130434511">Impedir que sites abram e posicionem janelas nas suas telas</translation> <translation id="3089137131053189723">Pesquisa apagada</translation> <translation id="3090589793601454425">Não mover</translation> <translation id="3090819949319990166">Não foi possível copiar o arquivo externo crx em <ph name="TEMP_CRX_FILE" />.</translation> @@ -3719,6 +3719,7 @@ <translation id="4813136279048157860">Minhas imagens</translation> <translation id="4813512666221746211">Erro na rede</translation> <translation id="4814378367953456825">Insira um nome para essa impressão digital</translation> +<translation id="481574578487123132">Dispositivos vinculados</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detalhes</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 favorito excluído}one{{COUNT} favorito excluído}other{{COUNT} favoritos excluídos}}</translation> <translation id="4819607494758673676">Notificações do Google Assistente</translation> @@ -3733,7 +3734,6 @@ <translation id="482952334869563894">Dispositivos USB do fornecedor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configurar PIN</translation> <translation id="4830026649400230050">Todos os downloads qualificados são encaminhados para a conta da sua organização no <ph name="WEB_DRIVE" />.</translation> -<translation id="4830121310592638841">Perguntar quando um site quiser abrir e posicionar janelas nas suas telas</translation> <translation id="4830502475412647084">Instalando atualização do SO</translation> <translation id="4830573902900904548">Não foi possível conectar seu <ph name="DEVICE_TYPE" /> à Internet usando <ph name="NETWORK_NAME" />. Escolha outra rede. <ph name="LEARN_MORE_LINK_START" />Saiba mais<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Uma impressora encontrada no servidor de impressão.</translation> @@ -4434,6 +4434,7 @@ <translation id="5563234215388768762">Pesquise no Google ou digite um URL</translation> <translation id="5565735124758917034">Ativo</translation> <translation id="5568069709869097550">Não consigo acessar</translation> +<translation id="5571066253365925590">Bluetooth ativado</translation> <translation id="5571092938913434726">Controles globais de mídia</translation> <translation id="5571832155627049070">Personalize seu perfil</translation> <translation id="5572851009514199876">Inicie e faça login no Chrome para que ele possa verificar se você tem permissão para acessar este site.</translation> @@ -4832,6 +4833,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para que você possa continuar navegando na Web, peça ao seu administrador para remover esse aplicativo.}one{Para que você possa continuar navegando na Web, peça ao seu administrador para remover esse aplicativo.}other{Para que você possa continuar navegando na Web, peça ao seu administrador para remover esses aplicativos.}}</translation> <translation id="5997337190805127100">Saiba mais sobre o acesso aos sites</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Seus dispositivos</translation> <translation id="6002210667729577411">Mover grupo para nova janela</translation> <translation id="6002452033851752583">A senha foi excluída da sua Conta do Google</translation> <translation id="6002458620803359783">Vozes preferidas</translation> @@ -5638,7 +5640,6 @@ <translation id="6833996806551876956">Teste da Privacy Sandbox</translation> <translation id="6834652994408928492">O modo escuro será ativado automaticamente ao pôr do sol</translation> <translation id="6835762382653651563">Conecte-se à Internet para atualizar seu <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Perguntar quando um site quiser abrir e posicionar janelas nas suas telas (recomendado)</translation> <translation id="6839225236531462745">Erro de exclusão do certificado</translation> <translation id="6839916869147598086">O login mudou</translation> <translation id="6840155290835956714">Perguntar antes de enviar</translation> @@ -6549,7 +6550,6 @@ <translation id="7775694664330414886">A guia foi movida para um grupo sem nome: <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> poderá ver arquivos em <ph name="FOLDERNAME" /> até que você feche todas as guias desse site</translation> <translation id="7776701556330691704">Nenhuma voz encontrada</translation> -<translation id="7777284276915203144">Suas senhas são criptografadas no dispositivo antes de serem salvas no Gerenciador de senhas do Google</translation> <translation id="7781335840981796660">Todas as contas de usuário e os dados locais serão removidos.</translation> <translation id="7782102568078991263">Não há mais sugestões do Google</translation> <translation id="7782717250816686129">Armazenar dados persistentes na tela de login e inserir credenciais na sessão.</translation> @@ -7202,7 +7202,6 @@ <translation id="8428634594422941299">Entendi</translation> <translation id="84297032718407999">Você será desconectado em <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Mostrar toques</translation> -<translation id="8431730749911729314">Criptografe as senhas no dispositivo antes que elas sejam salvas no Gerenciador de senhas do Google</translation> <translation id="8434480141477525001">Porta de depuração de Cliente nativo</translation> <translation id="8435395510592618362">Verificar sua identidade com <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">EUA</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index e2032ec..cabfb64 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1260,6 +1260,7 @@ <translation id="2263679799334060788">O seu feedback é importante e ajuda-nos a melhorar o Google Cast. Para obter ajuda na resolução de problemas relacionados com a transmissão, consulte o <ph name="BEGIN_LINK" />Centro de Ajuda<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Perguntar quando um site pretender aceder a dispositivos Bluetooth (recomendado)</translation> <translation id="2266957463645820432">IPP através de USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth desativado</translation> <translation id="2270450558902169558">Trocar dados com qualquer dispositivo do domínio <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />A instalação <ph name="BEGIN_BOLD" />irá apagar todo o disco rígido<ph name="END_BOLD" />. Certifique-se de que é feita uma cópia de segurança dos seus dados.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Não pode cancelar a instalação depois de a iniciar.<ph name="END_PARAGRAPH2" /></translation> @@ -2085,7 +2086,6 @@ <translation id="3088052000289932193">O site está a utilizar MIDI</translation> <translation id="3088128611727407543">A preparar o perfil da app…</translation> <translation id="3088325635286126843">&Mudar o nome...</translation> -<translation id="3089064280130434511">Impedir que os sites abram e coloquem janelas nos seus ecrãs</translation> <translation id="3089137131053189723">Pesquisa limpa.</translation> <translation id="3090589793601454425">Não mover</translation> <translation id="3090819949319990166">Não é possível copiar o ficheiro crx externo para <ph name="TEMP_CRX_FILE" />.</translation> @@ -3703,6 +3703,7 @@ <translation id="4813136279048157860">As minhas imagens</translation> <translation id="4813512666221746211">Erro de rede</translation> <translation id="4814378367953456825">Introduza um nome para esta impressão digital.</translation> +<translation id="481574578487123132">Dispositivos associados</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detalhes</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 marcador eliminado}one{{COUNT} marcador(es) eliminado(s)}other{{COUNT} marcadores eliminados}}</translation> <translation id="4819607494758673676">Notificações do Assistente Google</translation> @@ -3717,7 +3718,6 @@ <translation id="482952334869563894">Dispositivos USB do fornecedor <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configurar PIN</translation> <translation id="4830026649400230050">Todas as transferências elegíveis são encaminhadas para a conta do <ph name="WEB_DRIVE" /> da sua entidade.</translation> -<translation id="4830121310592638841">Perguntar quando um site pretender abrir e colocar janelas nos seus ecrãs</translation> <translation id="4830502475412647084">A instalar a atualização do SO…</translation> <translation id="4830573902900904548">O seu <ph name="DEVICE_TYPE" /> não consegue estabelecer ligação à Internet através de <ph name="NETWORK_NAME" />. Escolha outra rede. <ph name="LEARN_MORE_LINK_START" />Saiba mais<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Foi encontrada 1 impressora no servidor de impressão.</translation> @@ -4418,6 +4418,7 @@ <translation id="5563234215388768762">Pesquise no Google ou escreva um URL</translation> <translation id="5565735124758917034">Ativo</translation> <translation id="5568069709869097550">Não é possível iniciar sessão</translation> +<translation id="5571066253365925590">Bluetooth ativado</translation> <translation id="5571092938913434726">Controlos de multimédia globais</translation> <translation id="5571832155627049070">Personalize o seu perfil</translation> <translation id="5572851009514199876">Comece e inicie sessão no Chrome para que este possa verificar se tem autorização para aceder a este site.</translation> @@ -4816,6 +4817,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para garantir que pode continuar a navegar na Web, peça ao administrador para remover esta aplicação.}one{To ensure that you can keep browsing the web, ask your administrator to remove these applications.}other{Para garantir que pode continuar a navegar na Web, peça ao administrador para remover estas aplicações.}}</translation> <translation id="5997337190805127100">Saiba mais acerca do acesso a sites</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Os seus dispositivos</translation> <translation id="6002210667729577411">Mover grupo para nova janela</translation> <translation id="6002452033851752583">Palavra-passe eliminada da sua Conta Google</translation> <translation id="6002458620803359783">Vozes preferidas</translation> @@ -5622,7 +5624,6 @@ <translation id="6833996806551876956">Avaliação do Privacy Sandbox</translation> <translation id="6834652994408928492">O modo escuro ativa-se automaticamente ao pôr do sol</translation> <translation id="6835762382653651563">Ligue-se à Internet para atualizar o <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Perguntar quando um site pretender abrir e colocar janelas nos seus ecrãs (recomendado)</translation> <translation id="6839225236531462745">Erro ao eliminar o certificado</translation> <translation id="6839916869147598086">O início de sessão foi alterado</translation> <translation id="6840155290835956714">Perguntar antes de enviar</translation> @@ -6533,7 +6534,6 @@ <translation id="7775694664330414886">Separador movido para grupo sem nome – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> poderá ver os ficheiros na pasta <ph name="FOLDERNAME" /> até fechar todos os separadores deste site.</translation> <translation id="7776701556330691704">Não foram encontradas vozes.</translation> -<translation id="7777284276915203144">As palavras-passe são encriptadas no seu dispositivo antes de serem guardadas no Gestor de palavras-passe da Google</translation> <translation id="7781335840981796660">Serão removidas todas as contas de utilizador e dados locais.</translation> <translation id="7782102568078991263">Não há mais sugestões do Google</translation> <translation id="7782717250816686129">Armazenar dados persistentes no ecrã de início de sessão e injetar credenciais na sessão.</translation> @@ -7186,7 +7186,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">A sessão será terminada dentro de <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Mostrar toques</translation> -<translation id="8431730749911729314">Encripte as palavras-passe no seu dispositivo antes de serem guardadas no Gestor de palavras-passe da Google</translation> <translation id="8434480141477525001">Porta de depuração de NaCl</translation> <translation id="8435395510592618362">Validar a sua identidade com a aplicação <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">EUA</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index c260a95..94aacd48 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -1260,6 +1260,7 @@ <translation id="2263679799334060788">Feedbackul tău ne ajută să îmbunătățim Google Cast și este apreciat. Pentru ajutor la remedierea problemelor privind proiectarea, accesează <ph name="BEGIN_LINK" />centrul de ajutor<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Anunță-mă dacă un site vrea să acceseze dispozitive Bluetooth (recomandat)</translation> <translation id="2266957463645820432">IPP prin USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth dezactivat</translation> <translation id="2270450558902169558">Fă schimb de date cu orice dispozitiv din domeniul <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Instalarea <ph name="BEGIN_BOLD" />va șterge toate datele de pe hard disk<ph name="END_BOLD" />. Asigură-te că ai făcut backup pentru date.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Odată ce începe instalarea, nu o poți anula.<ph name="END_PARAGRAPH2" /></translation> @@ -2084,7 +2085,6 @@ <translation id="3088052000289932193">Site-ul folosește dispozitive MIDI</translation> <translation id="3088128611727407543">Se pregătește profilul aplicației...</translation> <translation id="3088325635286126843">&Redenumiți...</translation> -<translation id="3089064280130434511">Împiedică site-urile să deschidă și să plaseze ferestre în ecrane</translation> <translation id="3089137131053189723">Căutarea a fost ștearsă</translation> <translation id="3090589793601454425">Nu le muta</translation> <translation id="3090819949319990166">Fișierul crx extern nu se poate copia în <ph name="TEMP_CRX_FILE" />.</translation> @@ -3702,6 +3702,7 @@ <translation id="4813136279048157860">Imaginile mele</translation> <translation id="4813512666221746211">Eroare de rețea</translation> <translation id="4814378367953456825">Introdu un nume pentru amprentă</translation> +<translation id="481574578487123132">Dispozitive conectate</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detalii</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Un marcaj șters}few{{COUNT} marcaje șterse}other{{COUNT} de marcaje șterse}}</translation> <translation id="4819607494758673676">Notificări privind Asistentul Google</translation> @@ -3716,7 +3717,6 @@ <translation id="482952334869563894">Dispozitive USB de la furnizorul <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Configurează codul PIN</translation> <translation id="4830026649400230050">Toate descărcările eligibile sunt direcționate către contul <ph name="WEB_DRIVE" /> al organizației.</translation> -<translation id="4830121310592638841">Anunță-mă dacă un site vrea să deschidă și să plaseze ferestre în ecrane</translation> <translation id="4830502475412647084">Se instalează actualizarea sistemului de operare</translation> <translation id="4830573902900904548">Dispozitivul <ph name="DEVICE_TYPE" /> nu se poate conecta la internet folosind <ph name="NETWORK_NAME" />. Alege altă rețea. <ph name="LEARN_MORE_LINK_START" />Află mai multe<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">S-a găsit o imprimantă de la serverul de imprimare</translation> @@ -4417,6 +4417,7 @@ <translation id="5563234215388768762">Caută pe Google sau introdu o adresă URL</translation> <translation id="5565735124758917034">Activ</translation> <translation id="5568069709869097550">Nu se poate conecta</translation> +<translation id="5571066253365925590">Bluetooth activat</translation> <translation id="5571092938913434726">Comenzi media globale</translation> <translation id="5571832155627049070">Personalizează-ți profilul</translation> <translation id="5572851009514199876">Pornește și conectează-te la Chrome, ca acesta să verifice dacă ai permisiunea să accesezi site-ul.</translation> @@ -4814,6 +4815,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Ca să poți naviga în continuare pe web, trebuie să soliciți administratorului să elimine aplicația.}few{Ca să poți naviga în continuare pe web, trebuie să soliciți administratorului să elimine aplicațiile.}other{Ca să poți naviga în continuare pe web, trebuie să soliciți administratorului să elimine aplicațiile.}}</translation> <translation id="5997337190805127100">Află mai multe despre accesul la site</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> rezultate pentru „<ph name="SEARCH_TEXT" />”</translation> +<translation id="6002122790816966947">Dispozitivele tale</translation> <translation id="6002210667729577411">Mută grupul în fereastră nouă</translation> <translation id="6002452033851752583">Parola a fost ștearsă din Contul tău Google</translation> <translation id="6002458620803359783">Vocile preferate</translation> @@ -5620,7 +5622,6 @@ <translation id="6833996806551876956">Perioada de încercare a Mediului de testare securizat pentru confidențialitate</translation> <translation id="6834652994408928492">Modul întunecat se va activa automat la apus</translation> <translation id="6835762382653651563">Accesează internetul pentru a actualiza dispozitivul <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Anunță-mă dacă un site vrea să deschidă și să plaseze ferestre în ecrane (recomandat)</translation> <translation id="6839225236531462745">Eroare de ștergere a certificatului</translation> <translation id="6839916869147598086">Conectarea a fost schimbată</translation> <translation id="6840155290835956714">Întreabă înainte de a trimite</translation> @@ -6531,7 +6532,6 @@ <translation id="7775694664330414886">Fila a fost mutată într-un grup nedenumit – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> va putea vedea fișierele din <ph name="FOLDERNAME" /> până când închizi toate filele pentru acest site</translation> <translation id="7776701556330691704">Nu s-a găsit nicio voce</translation> -<translation id="7777284276915203144">Parolele tale se criptează pe dispozitiv înainte să se salveze în Managerul de parole Google</translation> <translation id="7781335840981796660">Toate conturile de utilizator și datele locale vor fi eliminate.</translation> <translation id="7782102568078991263">Nu mai există sugestii de la Google</translation> <translation id="7782717250816686129">Stochează datele persistente pe ecranul de conectare și introdu datele de conectare în sesiune.</translation> @@ -7183,7 +7183,6 @@ <translation id="8428634594422941299">Am înțeles</translation> <translation id="84297032718407999">Vei fi deconectat(ă) peste <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Afișează atingerile</translation> -<translation id="8431730749911729314">Criptează parolele pe dispozitiv înainte să se salveze în Managerul de parole Google</translation> <translation id="8434480141477525001">Port remediere NaCl</translation> <translation id="8435395510592618362">Confirmă-ți identitatea cu <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">S.U.A.</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 82a3b1f4..514f092d 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1261,6 +1261,7 @@ <translation id="2263679799334060788">Мы постоянно улучшаем Google Cast, поэтому ваш отзыв очень важен для нас. О том, как устранить неполадки, можно узнать в <ph name="BEGIN_LINK" />Справочном центре<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Запрашивать разрешение на доступ сайтов к Bluetooth-устройствам (рекомендуется)</translation> <translation id="2266957463645820432">IPP через USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth отключен</translation> <translation id="2270450558902169558">Обмен данными с любыми устройствами в домене <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Установка <ph name="BEGIN_BOLD" />приведет к удалению всей информации с жесткого диска<ph name="END_BOLD" />. Рекомендуем создать резервную копию данных.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Установку нельзя будет отменить.<ph name="END_PARAGRAPH2" /></translation> @@ -2084,7 +2085,6 @@ <translation id="3088052000289932193">Сайт использует MIDI-устройство</translation> <translation id="3088128611727407543">Подготовка профиля…</translation> <translation id="3088325635286126843">&Переименовать</translation> -<translation id="3089064280130434511">Запретить сайтам открывать и размещать окна на экранах</translation> <translation id="3089137131053189723">История поиска удалена</translation> <translation id="3090589793601454425">Не переносить</translation> <translation id="3090819949319990166">Не удалось скопировать внешний файл CRX в <ph name="TEMP_CRX_FILE" />.</translation> @@ -3702,6 +3702,7 @@ <translation id="4813136279048157860">Мои изображения</translation> <translation id="4813512666221746211">Ошибка сети</translation> <translation id="4814378367953456825">Введите название для этого отпечатка пальца.</translation> +<translation id="481574578487123132">Связанные устройства</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, подробная информация</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Удалена 1 закладка.}one{Удалена {COUNT} закладка.}few{Удалено {COUNT} закладки.}many{Удалено {COUNT} закладок.}other{Удалено {COUNT} закладки.}}</translation> <translation id="4819607494758673676">Уведомления Google Ассистента</translation> @@ -3716,7 +3717,6 @@ <translation id="482952334869563894">USB-устройства от поставщика с идентификатором <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Установить PIN-код</translation> <translation id="4830026649400230050">Все скачанные файлы хранятся в аккаунте сервиса "<ph name="WEB_DRIVE" />".</translation> -<translation id="4830121310592638841">Запрашивать разрешение на открытие и размещение сайтами окон на экранах</translation> <translation id="4830502475412647084">Обновление ОС</translation> <translation id="4830573902900904548">Устройству <ph name="DEVICE_TYPE" /> не удается подключиться к Интернету по сети <ph name="NETWORK_NAME" />. Выберите другую сеть. <ph name="LEARN_MORE_LINK_START" />Подробнее…<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">На сервере печати найден 1 принтер.</translation> @@ -4417,6 +4417,7 @@ <translation id="5563234215388768762">Введите поисковый запрос или URL</translation> <translation id="5565735124758917034">Активен</translation> <translation id="5568069709869097550">Не удается войти</translation> +<translation id="5571066253365925590">Bluetooth включен</translation> <translation id="5571092938913434726">Универсальные элементы управления медиафайлами</translation> <translation id="5571832155627049070">Настройте профиль</translation> <translation id="5572851009514199876">Выполните вход, чтобы Chrome определил, разрешен ли вам доступ к этому сайту.</translation> @@ -4814,6 +4815,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить это приложение.}one{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}few{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}many{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}other{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}}</translation> <translation id="5997337190805127100">Подробнее о доступе для сайта…</translation> <translation id="6000758707621254961">Количество результатов поиска по запросу "<ph name="SEARCH_TEXT" />": <ph name="RESULT_COUNT" /></translation> +<translation id="6002122790816966947">Ваши устройства</translation> <translation id="6002210667729577411">Переместить группу в новое окно</translation> <translation id="6002452033851752583">Пароль удален из аккаунта Google.</translation> <translation id="6002458620803359783">Голоса по умолчанию</translation> @@ -5620,7 +5622,6 @@ <translation id="6833996806551876956">Пробная версия Privacy Sandbox</translation> <translation id="6834652994408928492">Тёмная тема автоматически включается на закате</translation> <translation id="6835762382653651563">Чтобы обновить устройство <ph name="DEVICE_TYPE" />, требуется подключение к Интернету.</translation> -<translation id="6838034009068684089">Запрашивать разрешение на открытие и размещение сайтами окон на экранах (рекомендуется)</translation> <translation id="6839225236531462745">Ошибка при удалении сертификата</translation> <translation id="6839916869147598086">Изменения, связанные с аккаунтами</translation> <translation id="6840155290835956714">Запрашивать разрешение перед отправкой</translation> @@ -6531,7 +6532,6 @@ <translation id="7775694664330414886">Вкладка перемещена в группу без названия – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Сайт <ph name="ORIGIN" /> сможет просматривать файлы в папке "<ph name="FOLDERNAME" />", пока вы не закроете все вкладки этого сайта.</translation> <translation id="7776701556330691704">Образцы не найдены.</translation> -<translation id="7777284276915203144">Ваши пароли шифруются на устройстве и только потом сохраняются в Диспетчере паролей Google.</translation> <translation id="7781335840981796660">Все пользовательские аккаунты и локальные данные будут удалены.</translation> <translation id="7782102568078991263">Подсказок от Google больше нет</translation> <translation id="7782717250816686129">Хранить неизменные данные на экране входа и вводить учетные данные в начале сеанса.</translation> @@ -7183,7 +7183,6 @@ <translation id="8428634594422941299">ОК</translation> <translation id="84297032718407999">Выход из системы произойдет через <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Визуальный отклик</translation> -<translation id="8431730749911729314">Шифруйте пароли на устройстве, прежде чем они будут сохраняться в Диспетчере паролей Google.</translation> <translation id="8434480141477525001">Порт отладки NaCl</translation> <translation id="8435395510592618362">Подтверждение личности для приложения "<ph name="APP_NAME" />"</translation> <translation id="8437209419043462667">США</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index e87c644..4503b14 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -1263,6 +1263,7 @@ උදවු මධ්යස්ථානය<ph name="END_LINK" /> වෙත යොමුවන්න.</translation> <translation id="22665427234727190">වෙබ් අඩවියකට බ්ලූටූත් උපාංග වෙත පිවිසීමට අවශ්ය විටදී අසන්න (නිර්දේශිතයි)</translation> <translation id="2266957463645820432">USB හරහා IPP (IPPUSB)</translation> +<translation id="2268130516524549846">බ්ලූටූත් අබල කෙරිණි</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> වසම තුළ ඇති ඕනෑම උපාංගයක් සමඟ දත්ත හුවමාරු කරගන්න</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ස්ථාපනය <ph name="BEGIN_BOLD" />ඔබගේ මුළු දෘඪ තැටියම මකනු ඇත<ph name="END_BOLD" />. ඔබගේ දත්ත උපස්ථ කර ඇති බව සහතික කර ගන්න.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ස්ථාපනය ආරම්භ වූ පසු එය අවලංගු කළ නොහැකිය.<ph name="END_PARAGRAPH2" /></translation> @@ -2086,7 +2087,6 @@ <translation id="3088052000289932193">වෙබ් අඩවිය MIDI භාවිත කරයි</translation> <translation id="3088128611727407543">යෙදුම් පැතිකඩ සූදානම් කෙරේ...</translation> <translation id="3088325635286126843">&යළි නම් කරන්න...</translation> -<translation id="3089064280130434511">ඔබේ තිර මත කවුළු විවෘත කිරීමෙන් සහ තැබීමෙන් වෙබ් අඩවි අවහිර කරන්න</translation> <translation id="3089137131053189723">සෙවුම හිස් කළා</translation> <translation id="3090589793601454425">ගෙන නොයන්න</translation> <translation id="3090819949319990166"><ph name="TEMP_CRX_FILE" /> වෙත බාහිර crx ගොනුව පිටපත් කළ නොහැක.</translation> @@ -3216,6 +3216,7 @@ <translation id="4275830172053184480">ඔබේ උපාංගය නැවත අරඹන්න</translation> <translation id="4278390842282768270">ඉඩ දුන්</translation> <translation id="4279129444466079448">ඔබට මෙම උපාංගයෙහි eSIM පැතිකඩවල් <ph name="PROFILE_LIMIT" />ක් දක්වා ස්ථාපනය කළ හැකිය. තවත් පැතිකඩක් එක් කිරීමට, පළමුව තිබෙන පැතිකඩක් ඉවත් කරන්න.</translation> +<translation id="4280325816108262082">උපාංගය ක්රියාවිරහිත කළ විට හෝ භාවිත නොකරන විට එය ස්වයංක්රීයව විසන්ධි වනු ඇත</translation> <translation id="4281844954008187215">සේවා කොන්දේසි</translation> <translation id="4282196459431406533">Smart Lock ක්රියාත්මකයි</translation> <translation id="4284755288573763878">වැඩිදියුණු කළ ආරක්ෂාව ක්රියාවිරහිත කරන්නද?</translation> @@ -3704,6 +3705,7 @@ <translation id="4813136279048157860">මගේ රූප</translation> <translation id="4813512666221746211">ජාල දෝෂයකි</translation> <translation id="4814378367953456825">මෙම ඇඟිලි සලකුණ සඳහා නමක් ඇතුළත් කරන්න</translation> +<translation id="481574578487123132">සබැඳි කළ උපාංග</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, විස්තර</translation> <translation id="4816336393325437908">{COUNT,plural, =1{පිටුසන් 1ක් මකන ලදි}one{පිටුසන් {COUNT}ක් මකන ලදි}other{පිටුසන් {COUNT}ක් මකන ලදි}}</translation> <translation id="4819607494758673676">Google සහකරු දැනුම්දීම්</translation> @@ -3718,7 +3720,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> වෙතින් USB උපාංග</translation> <translation id="4829768588131278040">PIN පිහිටුවන්න</translation> <translation id="4830026649400230050">සුදුසුකම් ලබන සියලු බාගැනීම් ඔබගේ සංවිධානයෙහි <ph name="WEB_DRIVE" /> ගිණුමට මාර්ගගත කිරීම අවශ්ය වේ.</translation> -<translation id="4830121310592638841">වෙබ් අඩවියකට ඔබේ තිර මත කවුළු විවෘත කිරීමටත් තැබීමටත් අවශ්ය වූ විට අසන්න</translation> <translation id="4830502475412647084">OS යාවත්කාලීනය ස්ථාපනය කරමින්</translation> <translation id="4830573902900904548">ඔබේ <ph name="DEVICE_TYPE" /> හට <ph name="NETWORK_NAME" />. භාවිත කර අන්තර්ජාලය වෙත පිවිසිය නොහැකිය. කරුණාකර වෙනත් ජාලයක් තෝරන්න. <ph name="LEARN_MORE_LINK_START" />තව දැන ගන්න<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">මුද්රණ සේවාදායකයෙන් 1 මුද්රකයක් හමු විය</translation> @@ -4335,6 +4336,7 @@ <translation id="5490721031479690399">බ්ලූටූත් උපාංගය විසන්ධි කරන්න</translation> <translation id="5490798133083738649">ලිනක්ස් හට ඔබේ මයික්රොෆෝනයට ප්රවේශ වීමට ඉඩ දෙන්න</translation> <translation id="549211519852037402">බේජ් සහ සුදු</translation> +<translation id="5492637351392383067">උපාංගයේ සංකේතනය</translation> <translation id="5493792505296048976">තිරය ක්රියාත්මකයි</translation> <translation id="5494016731375030300">මෑතකදී වැසූ ටැබ</translation> <translation id="5494362494988149300">&නිම කළ විට විවෘත කරන්න</translation> @@ -4418,6 +4420,7 @@ <translation id="5563234215388768762">Google සොයන්න නැතහොත් URL එකක් යතුරු ලියන්න</translation> <translation id="5565735124758917034">සක්රියයි</translation> <translation id="5568069709869097550">පුරනය විය නොහැක</translation> +<translation id="5571066253365925590">Bluetooth සක්රීයයි</translation> <translation id="5571092938913434726">ගෝලීය මාධ්ය පාලන</translation> <translation id="5571832155627049070">ඔබේ පැතිකඩ අභිරුචිකරණය කරන්න</translation> <translation id="5572851009514199876">ඔබට මෙම අඩවියට පිවිසීමට ඉඩ දෙන්නේද යන්න පරීක්ෂා කිරීමට Chrome හට හැකි වන ලෙස කරුණාකර Chrome ආරම්භ කර පුරන්න.</translation> @@ -4816,6 +4819,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ඔබට දිගටම වෙබය පිරික්සීමට හැකි බව සහතික කිරීම සඳහා, මෙම යෙදුම ඉවත් කිරීමට ඔබේ පරිපාලකගෙන් විමසන්න.}one{ඔබට දිගටම වෙබය පිරික්සීමට හැකි බව සහතික කිරීම සඳහා, මෙම යෙදුම් ඉවත් කිරීමට ඔබේ පරිපාලකගෙන් විමසන්න.}other{ඔබට දිගටම වෙබය පිරික්සීමට හැකි බව සහතික කිරීම සඳහා, මෙම යෙදුම් ඉවත් කිරීමට ඔබේ පරිපාලකගෙන් විමසන්න.}}</translation> <translation id="5997337190805127100">වෙබ් අඩවි ප්රවේශය ගැන තවත් දැන ගන්න</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' සඳහා ප්රතිඵල <ph name="RESULT_COUNT" />ක්</translation> +<translation id="6002122790816966947">ඔබගේ උපාංග</translation> <translation id="6002210667729577411">සමූහය නව කවුළුවට ගෙන යන්න</translation> <translation id="6002452033851752583">ඔබේ Google ගිණුමෙන් මුරපදය මැකුවා</translation> <translation id="6002458620803359783">මනාප හඬ</translation> @@ -5620,7 +5624,6 @@ <translation id="6833996806551876956">රහස්යතා සෑන්ඩ්බොක්ස් අත්හදා බැලීම</translation> <translation id="6834652994408928492">හිරු බැසීමේදී අඳුරු ප්රකාරය ස්වයංක්රියව ක්රියාවිරහිත කරනු ඇත</translation> <translation id="6835762382653651563">ඔබේ <ph name="DEVICE_TYPE" /> යාවත්කාලීන කිරීමට කරුණාකර අන්තර්ජාලය වෙත සබඳින්න.</translation> -<translation id="6838034009068684089">අඩවියකට ඔබේ තිර මත windows විවෘත කිරීමට සහ තැබීමට අවශ්ය වූ විට අසන්න (නිර්දේශිතයි)</translation> <translation id="6839225236531462745">සහතික මකාදැමීම් දෝශය</translation> <translation id="6839916869147598086">පුරනය වෙනස් වී ඇත</translation> <translation id="6840155290835956714">යැවීමට පෙර අසන්න</translation> @@ -7970,6 +7973,7 @@ <translation id="947667444780368238">එහි පද්ධති ගොනු අඩංගු වන බැවින් <ph name="ORIGIN" /> හට මෙම ෆෝල්ඩරය තුළ ඇති ගොනු විවෘත කළ නොහැකිය</translation> <translation id="950307215746360464">පිහිටුවීම් මාර්ගෝපදේශය</translation> <translation id="951991426597076286">පිළිකෙව්</translation> +<translation id="952471655966876828">උපාංගය ක්රියාත්මක විට සහ භාවිත කරන විට එය ස්වයංක්රීයව සම්බන්ධ වනු ඇත</translation> <translation id="953434574221655299">ඔබ ඔබගේ උපාංගය සක්රියව භාවිත කරන විට දැන ගැනීමට ඉඩ දේ</translation> <translation id="956500788634395331">හානිකර විය හැකි දිගුවලින් ඔබ ආරක්ෂා කෙරේ</translation> <translation id="957960681186851048">මෙම අඩවිය ගොනු කිහිපයක් ස්වයංක්රීයව බාගැනීමට උත්සාහ කළේය</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index fb4f830..be65e2b 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1261,6 +1261,7 @@ <translation id="2263679799334060788">Vaša spätná väzba nám pomáha zlepšovať Google Cast, a preto si ju ceníme. Pomoc s riešením problémov s prenosom nájdete v <ph name="BEGIN_LINK" />centre pomoci<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Opýtať sa, keď chce web získať prístup k zariadeniam Bluetooth (odporúčané)</translation> <translation id="2266957463645820432">IPP cez USB (IPPUSB)</translation> +<translation id="2268130516524549846">Rozhranie Bluetooth je deaktivované</translation> <translation id="2270450558902169558">Vymieňať údaje s ktorýmkoľvek zariadením z domény <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Inštaláciou <ph name="BEGIN_BOLD" />vymažete celý pevný disk<ph name="END_BOLD" />. Skontrolujte, či sú údaje zálohované.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Po spustení sa inštalácia nedá zrušiť.<ph name="END_PARAGRAPH2" /></translation> @@ -2085,7 +2086,6 @@ <translation id="3088052000289932193">Web používa MIDI</translation> <translation id="3088128611727407543">Pripravuje sa profil aplikácie...</translation> <translation id="3088325635286126843">&Premenovať...</translation> -<translation id="3089064280130434511">Brániť webom otvárať a umiestňovať okná na obrazovkách</translation> <translation id="3089137131053189723">Vyhľadávanie bolo vymazané</translation> <translation id="3090589793601454425">Nepresúvať</translation> <translation id="3090819949319990166">Externý súbor crx nie je možné skopírovať do súboru <ph name="TEMP_CRX_FILE" /></translation> @@ -3703,6 +3703,7 @@ <translation id="4813136279048157860">Moje obrázky</translation> <translation id="4813512666221746211">Chyba siete</translation> <translation id="4814378367953456825">Pomenujte tento odtlačok prsta</translation> +<translation id="481574578487123132">Prepojené zariadenia</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, podrobnosti</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Bola odstránená 1 záložka}few{Boli odstránené {COUNT} záložky}many{{COUNT} bookmarks deleted}other{Bolo odstránených {COUNT} záložiek}}</translation> <translation id="4819607494758673676">Upozornenia Asistenta Google</translation> @@ -3717,7 +3718,6 @@ <translation id="482952334869563894">Zariadenia USB od dodávateľa <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Nastaviť kód PIN</translation> <translation id="4830026649400230050">Všetky sťahovania spĺňajúce podmienky sú smerované do účtu <ph name="WEB_DRIVE" /> vašej organizácie.</translation> -<translation id="4830121310592638841">Opýtať sa, keď chce web otvárať a umiestňovať okná na vaše obrazovky</translation> <translation id="4830502475412647084">Inštaluje sa aktualizácia operačného systému</translation> <translation id="4830573902900904548">Vaše zariadenie <ph name="DEVICE_TYPE" /> sa nedokáže pripojiť k internetu pomocou siete <ph name="NETWORK_NAME" />. Vyberte inú sieť. <ph name="LEARN_MORE_LINK_START" />Ďalšie informácie<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Na tlačovom serveri bola nájdená jedna tlačiareň</translation> @@ -4418,6 +4418,7 @@ <translation id="5563234215388768762">Vyhľadajte na Googli alebo zadajte webovú adresu</translation> <translation id="5565735124758917034">Aktívne</translation> <translation id="5568069709869097550">Nedá sa prihlásiť</translation> +<translation id="5571066253365925590">Rozhranie Bluetooth je povolené</translation> <translation id="5571092938913434726">Globálne ovládacie prvky médií</translation> <translation id="5571832155627049070">Prispôsobenie profilu</translation> <translation id="5572851009514199876">Začnite a prihláste sa do Chromu, aby skontroloval, či môžete navštíviť tento web.</translation> @@ -4815,6 +4816,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Ak chcete zaistiť, že aj naďalej budete môcť prehliadať internet, požiadajte správcu o odstránenie tejto aplikácie.}few{Ak chcete zaistiť, že aj naďalej budete môcť prehliadať internet, požiadajte správcu o odstránenie týchto aplikácií.}many{Ak chcete zaistiť, že aj naďalej budete môcť prehliadať internet, požiadajte správcu o odstránenie týchto aplikácií.}other{Ak chcete zaistiť, že aj naďalej budete môcť prehliadať internet, požiadajte správcu o odstránenie týchto aplikácií.}}</translation> <translation id="5997337190805127100">Ďalšie informácie o prístupe k webom</translation> <translation id="6000758707621254961">Viacero výsledkov (<ph name="RESULT_COUNT" />) pre hľadaný výraz „<ph name="SEARCH_TEXT" />“</translation> +<translation id="6002122790816966947">Vaše zariadenia</translation> <translation id="6002210667729577411">Presunúť skupinu do nového okna</translation> <translation id="6002452033851752583">Heslo bolo odstránené z vášho účtu Google</translation> <translation id="6002458620803359783">Preferované hlasy</translation> @@ -5621,7 +5623,6 @@ <translation id="6833996806551876956">Skúšobné obdobie karantény ochrany súkromia</translation> <translation id="6834652994408928492">Tmavý režim sa automaticky zapne pri západe slnka</translation> <translation id="6835762382653651563">Ak chcete aktualizovať zariadenie <ph name="DEVICE_TYPE" />, pripojte sa k internetu.</translation> -<translation id="6838034009068684089">Opýtať sa, keď chce web otvárať a umiestňovať okná na vaše obrazovky (odporúčané)</translation> <translation id="6839225236531462745">Chyba odstránenia certifikátu</translation> <translation id="6839916869147598086">Prihlásenie sa zmenilo</translation> <translation id="6840155290835956714">Spýtať sa pred odoslaním</translation> @@ -6532,7 +6533,6 @@ <translation id="7775694664330414886">Karta bola presunutá do skupiny bez názvu – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> si bude môcť zobraziť súbory v priečinku <ph name="FOLDERNAME" />, dokým nezavriete všetky karty tohto webu</translation> <translation id="7776701556330691704">Nenašli sa žiadne hlasy</translation> -<translation id="7777284276915203144">Heslá sú šifrované v zariadení ešte pred ich uložením do správcu hesiel Google</translation> <translation id="7781335840981796660">Všetky používateľské účty a miestne údaje budú odstránené.</translation> <translation id="7782102568078991263">Žiadne ďalšie návrhy od spoločnosti Google</translation> <translation id="7782717250816686129">Uchovávať trvalé údaje na prihlasovacej obrazovke a vkladať prihlasovacie údaje do relácie.</translation> @@ -7184,7 +7184,6 @@ <translation id="8428634594422941299">Dobre</translation> <translation id="84297032718407999">Odhlásenie prebehne o <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Zobrazovanie klepnutí</translation> -<translation id="8431730749911729314">Zašifrujte si heslá v zariadení ešte pred ich uložením do správcu hesiel Google</translation> <translation id="8434480141477525001">Port ladenia klienta NaCl</translation> <translation id="8435395510592618362">Overenie totožnosti pomocou aplikácie <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">Americká klávesnica</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index c97c7a0..afeb1c76 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -1277,6 +1277,7 @@ center za pomoč<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Vprašaj, ko želi spletno mesto dostopati do naprav Bluetooth (priporočeno)</translation> <translation id="2266957463645820432">IPP prek USB-ja (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth onemogočen</translation> <translation id="2270450558902169558">Izmenjava podatkov z vsemi napravami v domeni: <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Z namestitvijo <ph name="BEGIN_BOLD" />bo izbrisan celotni trdi disk<ph name="END_BOLD" />. Poskrbite, da so podatki varnostno kopirani.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Ko se namestitev začne, je ni mogoče preklicati.<ph name="END_PARAGRAPH2" /></translation> @@ -2101,7 +2102,6 @@ <translation id="3088052000289932193">Spletno mesto uporablja MIDI</translation> <translation id="3088128611727407543">Pripravljanje profila aplikacije ….</translation> <translation id="3088325635286126843">&Preimenuj ...</translation> -<translation id="3089064280130434511">Preprečevanje spletnim mestom odpiranja in postavljanja oken na zaslone</translation> <translation id="3089137131053189723">Iskanje je izbrisano</translation> <translation id="3090589793601454425">Brez premikanja</translation> <translation id="3090819949319990166">Zunanje datoteke crx ni mogoče kopirati v <ph name="TEMP_CRX_FILE" />.</translation> @@ -3720,6 +3720,7 @@ <translation id="4813136279048157860">Moje slike</translation> <translation id="4813512666221746211">Napaka v omrežju</translation> <translation id="4814378367953456825">Vnesite ime za ta prstni odtis</translation> +<translation id="481574578487123132">Povezane naprave</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, podrobnosti</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 zaznamek je izbrisan}one{{COUNT} zaznamek je izbrisan}two{{COUNT} zaznamka sta izbrisana}few{{COUNT} zaznamki so izbrisani}other{{COUNT} zaznamkov je izbrisanih}}</translation> <translation id="4819607494758673676">Obvestila Pomočnika Google</translation> @@ -3734,7 +3735,6 @@ <translation id="482952334869563894">Naprave USB ponudnika <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Nastavi kodo PIN</translation> <translation id="4830026649400230050">Vsi primerni prenosi so usmerjeni v račun organizacije v storitvi <ph name="WEB_DRIVE" />.</translation> -<translation id="4830121310592638841">Vprašaj, ko želi spletno mesto odpreti okna in jih postaviti na zaslone</translation> <translation id="4830502475412647084">Nameščanje posodobitve operacijskega sistema</translation> <translation id="4830573902900904548">Naprava <ph name="DEVICE_TYPE" /> se ne more povezati v internet prek omrežja <ph name="NETWORK_NAME" />. Izberite drugo omrežje. <ph name="LEARN_MORE_LINK_START" />Več o tem<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">V tiskalnem strežniku je bil najden 1 tiskalnik.</translation> @@ -4435,6 +4435,7 @@ <translation id="5563234215388768762">Iščite v Googlu ali vnesite URL</translation> <translation id="5565735124758917034">Aktivno</translation> <translation id="5568069709869097550">Vpis ni mogoč</translation> +<translation id="5571066253365925590">Bluetooth omogočen</translation> <translation id="5571092938913434726">Globalni kontrolniki predstavnosti</translation> <translation id="5571832155627049070">Prilagodite svoj profil</translation> <translation id="5572851009514199876">Začnite s prijavo v Chrome, da lahko Chrome preveri, ali vam je dovoljeno dostopati do tega spletnega mesta.</translation> @@ -4834,6 +4835,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani to aplikacijo.}one{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani te aplikacije.}two{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani te aplikacije.}few{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani te aplikacije.}other{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani te aplikacije.}}</translation> <translation id="5997337190805127100">Več o dostopu do spletnih mest</translation> <translation id="6000758707621254961">Rezultati za »<ph name="SEARCH_TEXT" />« (<ph name="RESULT_COUNT" />)</translation> +<translation id="6002122790816966947">Vaše naprave</translation> <translation id="6002210667729577411">Premik skupine v novo okno</translation> <translation id="6002452033851752583">Geslo je bilo izbrisano iz računa Google</translation> <translation id="6002458620803359783">Prednostni glasovi</translation> @@ -5640,7 +5642,6 @@ <translation id="6833996806551876956">Preizkus za Privacy Sandbox</translation> <translation id="6834652994408928492">Temni način se bo samodejno vklopil ob sončnem zahodu.</translation> <translation id="6835762382653651563">Če želite posodobiti napravo <ph name="DEVICE_TYPE" />, vzpostavite internetno povezavo.</translation> -<translation id="6838034009068684089">Vprašaj, ko želi spletno mesto odpreti okna in jih postaviti na zaslone (priporočljivo)</translation> <translation id="6839225236531462745">Napaka pri brisanju potrdila</translation> <translation id="6839916869147598086">Prijava je zdaj drugačna</translation> <translation id="6840155290835956714">Vprašaj pred pošiljanjem</translation> @@ -6551,7 +6552,6 @@ <translation id="7775694664330414886">Zavihek je premaknjen v neimenovano skupino – <ph name="GROUP_CONTENTS" />.</translation> <translation id="7776156998370251340">Spletno mesto <ph name="ORIGIN" /> si bo lahko ogledovalo datoteke v mapi <ph name="FOLDERNAME" />, dokler ne zaprete vseh zavihkov tega spletnega mesta</translation> <translation id="7776701556330691704">Najden ni bil noben glas</translation> -<translation id="7777284276915203144">Gesla so šifrirana v napravi, preden se shranijo v Google Upravitelju gesel.</translation> <translation id="7781335840981796660">Odstranjeni bodo vsi uporabniški računi in lokalni podatki.</translation> <translation id="7782102568078991263">Nič več Googlovih predlogov</translation> <translation id="7782717250816686129">Shrani trajne podatke na zaslonu za prijavo in vstavi poverilnice v sejo.</translation> @@ -7204,7 +7204,6 @@ <translation id="8428634594422941299">Razumem</translation> <translation id="84297032718407999">Odjavljeni boste čez <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Prikaz dotikov</translation> -<translation id="8431730749911729314">Šifrirajte gesla v napravi, preden se shranijo v Google Upravitelju gesel.</translation> <translation id="8434480141477525001">Vrata za odpravljanje napak NaCl</translation> <translation id="8435395510592618362">Preverjanje identitete z aplikacijo <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">Združene države</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index fc765ba..5d8f511 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -1257,6 +1257,7 @@ Për ndihmë lidhur me zgjidhjen e problemeve të transmetimit, drejtohu te <ph name="BEGIN_LINK" />qendra e ndihmës<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Pyet kur një sajt dëshiron të ketë qasje te pajisjet Bluetooth (rekomandohet)</translation> <translation id="2266957463645820432">IPP përmes USB-së (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth-i u çaktivizua</translation> <translation id="2270450558902169558">Shkëmbe të dhëna me çdo pajisje në domenin <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Instalimi <ph name="BEGIN_BOLD" />do të fshijë të gjithë diskun tënd të ngurtë<ph name="END_BOLD" />. Sigurohu që të kesh rezervuar të dhënat e tua.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Pasi të fillojë instalimi, nuk mund të anulohet.<ph name="END_PARAGRAPH2" /></translation> @@ -2080,7 +2081,6 @@ <translation id="3088052000289932193">Sajti përdor MIDI</translation> <translation id="3088128611727407543">Po përgatit profilin e aplikacionit...</translation> <translation id="3088325635286126843">&Riemërtoje...</translation> -<translation id="3089064280130434511">Blloko sajtet që të mos hapin dhe vendosin dritare në ekranet e tua</translation> <translation id="3089137131053189723">Kërkimi u pastrua</translation> <translation id="3090589793601454425">Mos i zhvendos</translation> <translation id="3090819949319990166">Skedari i jashtëm crx nuk mund të kopjohet te <ph name="TEMP_CRX_FILE" />.</translation> @@ -3209,6 +3209,7 @@ <translation id="4275830172053184480">Rinise pajisjen</translation> <translation id="4278390842282768270">Të lejuara</translation> <translation id="4279129444466079448">Mund të instalosh deri në <ph name="PROFILE_LIMIT" /> profile të kartës eSIM në këtë pajisje. Për të shtuar një profil tjetër, në fillim hiq një profil ekzistues.</translation> +<translation id="4280325816108262082">Pajisja shkëputet automatikisht kur fiket ose kur nuk përdoret</translation> <translation id="4281844954008187215">Kushtet e shërbimit</translation> <translation id="4282196459431406533">Smart Lock është i aktivizuar</translation> <translation id="4284755288573763878">Të çaktivizohet siguria e përmirësuar?</translation> @@ -3697,6 +3698,7 @@ <translation id="4813136279048157860">Imazhet e mia</translation> <translation id="4813512666221746211">Gabim në rrjet</translation> <translation id="4814378367953456825">Fut një emër për këtë gjurmë gishti</translation> +<translation id="481574578487123132">Pajisjet e lidhura</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detaje</translation> <translation id="4816336393325437908">{COUNT,plural, =1{U fshi 1 faqëshënues}other{U fshinë {COUNT} faqeshënues}}</translation> <translation id="4819607494758673676">Njoftimet e "Asistentit të Google"</translation> @@ -3711,7 +3713,6 @@ <translation id="482952334869563894">Pajisjet USB nga shitësi <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Konfiguro kodin PIN</translation> <translation id="4830026649400230050">Të gjitha shkarkimet e përshtatshme drejtohen në llogarinë e <ph name="WEB_DRIVE" /> të organizatës sate.</translation> -<translation id="4830121310592638841">Pyet kur një sajt kërkon që të hapë dhe vendosë dritare në ekranet e tua</translation> <translation id="4830502475412647084">Po instalon përditësimin e sistemit operativ</translation> <translation id="4830573902900904548">Pajisja <ph name="DEVICE_TYPE" /> nuk mund të lidhet në internet duke përdorur <ph name="NETWORK_NAME" />. Zgjidh një rrjet tjetër. <ph name="LEARN_MORE_LINK_START" />Mëso më shumë<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">U gjet 1 printer nga serveri i printimit</translation> @@ -4328,6 +4329,7 @@ <translation id="5490721031479690399">Shkëput pajisjen me Bluetooth</translation> <translation id="5490798133083738649">Lejo që Linux të ketë qasje te mikrofoni yt</translation> <translation id="549211519852037402">Bezhë dhe e bardhë</translation> +<translation id="5492637351392383067">Enkriptimi në pajisje</translation> <translation id="5493792505296048976">ekrani aktiv</translation> <translation id="5494016731375030300">Skedat e mbyllura së fundmi</translation> <translation id="5494362494988149300">Hape kur të &përfundosh</translation> @@ -4411,6 +4413,7 @@ <translation id="5563234215388768762">Kërko në Google ose shkruaj një URL</translation> <translation id="5565735124758917034">Aktiv</translation> <translation id="5568069709869097550">Nuk mund të identifkohet</translation> +<translation id="5571066253365925590">Bluetooth-i u aktivizua</translation> <translation id="5571092938913434726">Kontrollet globale të medias</translation> <translation id="5571832155627049070">Personalizo profilin tënd</translation> <translation id="5572851009514199876">Fillo dhe identifikohu në Chrome që Chrome të mund të kontrollojë nëse lejohesh të kesh qasje në këtë sajt.</translation> @@ -4808,6 +4811,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Për t'u siguruar që mund të vazhdosh të shfletosh në ueb, kërkoji administratorit ta heqë këtë aplikacion.}other{Për t'u siguruar që mund të vazhdosh të shfletosh në ueb, kërkoji administratorit t'i heqë këto aplikacione.}}</translation> <translation id="5997337190805127100">Mëso më shumë për qasjen te sajti</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> rezultate për "<ph name="SEARCH_TEXT" />"</translation> +<translation id="6002122790816966947">Pajisjet e tua</translation> <translation id="6002210667729577411">Zhvendose grupin në dritaren e re</translation> <translation id="6002452033851752583">Fjalëkalimi u fshi nga "Llogaria jote e Google"</translation> <translation id="6002458620803359783">Zërat e preferuar</translation> @@ -5614,7 +5618,6 @@ <translation id="6833996806551876956">Prova e "Nismës për mjedis uebi privat"</translation> <translation id="6834652994408928492">"Modaliteti i errët" do të aktivizohet automatikisht në perëndim</translation> <translation id="6835762382653651563">Lidhu në internet për të përditësuar pajisjen <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Pyet kur një sajt kërkon që të hapë dhe vendosë dritare në ekranet e tua (rekomandohet)</translation> <translation id="6839225236531462745">Gabim në fshirjen e certifikatës</translation> <translation id="6839916869147598086">Identifikimi ka ndryshuar</translation> <translation id="6840155290835956714">Pyet përpara dërgimit</translation> @@ -7963,6 +7966,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> nuk mund t'i hapë skedarët në këtë dosje sepse ajo përmban skedarë sistemi</translation> <translation id="950307215746360464">Udhëzuesi i konfigurimit</translation> <translation id="951991426597076286">Refuzo</translation> +<translation id="952471655966876828">Pajisja lidhet automatikisht kur ndizet dhe përdoret</translation> <translation id="953434574221655299">Lejohen të dinë kur ti e përdor pajisjen tënde në mënyrë aktive</translation> <translation id="956500788634395331">Je i mbrojtur nga shtesat që mund të jenë të dëmshme</translation> <translation id="957960681186851048">Ky sajt u përpoq të shkarkonte automatikisht shumë skedarë</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index baa2c346..3808018b 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1258,6 +1258,7 @@ <translation id="2263679799334060788">Povratne informacije nam pomažu da poboljšamo Google Cast i zahvalni smo vam na njima. Da biste rešili probleme sa prebacivanjem, posetite <ph name="BEGIN_LINK" />centar za pomoć<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Pitaj kada sajt želi da pristupa Bluetooth uređajima (preporučeno)</translation> <translation id="2266957463645820432">IPP preko USB-a (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth je onemogućen</translation> <translation id="2270450558902169558">Razmena podataka sa bilo kojim uređajem na domenu <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Instalacija <ph name="BEGIN_BOLD" />će obrisati kompletne podatke sa hard-diska<ph name="END_BOLD" />. Proverite da li ste napravili rezervne kopije podataka.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Kada instalacija počne, ne može da se otkaže.<ph name="END_PARAGRAPH2" /></translation> @@ -2082,7 +2083,6 @@ <translation id="3088052000289932193">Sajt koristi MIDI</translation> <translation id="3088128611727407543">Priprema se profil aplikacije...</translation> <translation id="3088325635286126843">&Preimenuj...</translation> -<translation id="3089064280130434511">Ne dozvoljavaj sajtovima da otvaraju i postavljaju prozore na ekranima</translation> <translation id="3089137131053189723">Pretraga je obrisana</translation> <translation id="3090589793601454425">Ne premeštaj</translation> <translation id="3090819949319990166">Nije uspelo kopiranje spoljne crx datoteke u datoteku <ph name="TEMP_CRX_FILE" />.</translation> @@ -3700,6 +3700,7 @@ <translation id="4813136279048157860">Moje slike</translation> <translation id="4813512666221746211">Greška na mreži</translation> <translation id="4814378367953456825">Unesite naziv za ovaj otisak prsta</translation> +<translation id="481574578487123132">Povezani uređaji</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, detalji</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 obeleživač je izbrisan}one{{COUNT} obeleživač je izbrisan}few{{COUNT} obeleživača su izbrisana}other{{COUNT} obeleživača je izbrisano}}</translation> <translation id="4819607494758673676">Obaveštenja Google pomoćnika</translation> @@ -3714,7 +3715,6 @@ <translation id="482952334869563894">USB uređaji prodavca <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Podesi PIN</translation> <translation id="4830026649400230050">Sva preuzimanja koja ispunjavaju uslove usmeravaju se na <ph name="WEB_DRIVE" /> nalog organizacije.</translation> -<translation id="4830121310592638841">Pitaj kada sajt želi da otvara i postavlja prozore na ekrane</translation> <translation id="4830502475412647084">Instalira se ažuriranje OS-a</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> ne može da se poveže na internet pomoću mreže <ph name="NETWORK_NAME" />. Izaberite neku drugu mrežu. <ph name="LEARN_MORE_LINK_START" />Saznajte više<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Pronađen je 1 štampač sa servera za štampanje</translation> @@ -4414,6 +4414,7 @@ <translation id="5563234215388768762">Pretražite Google ili unesite URL</translation> <translation id="5565735124758917034">Aktivno</translation> <translation id="5568069709869097550">Ne mogu da se prijavim</translation> +<translation id="5571066253365925590">Bluetooth je omogućen</translation> <translation id="5571092938913434726">Globalne kontrole za medije</translation> <translation id="5571832155627049070">Prilagodite profil</translation> <translation id="5572851009514199876">Otvorite i prijavite se u Chrome da bi Chrome mogao da proveri da li imate dozvolu za pristup ovom sajtu.</translation> @@ -4812,6 +4813,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Da biste se uverili da možete da nastavite da pregledate veb, zatražite od administratora da ukloni ovu aplikaciju.}one{Da biste se uverili da možete da nastavite da pregledate veb, zatražite od administratora da ukloni ove aplikacije.}few{Da biste se uverili da možete da nastavite da pregledate veb, zatražite od administratora da ukloni ove aplikacije.}other{Da biste se uverili da možete da nastavite da pregledate veb, zatražite od administratora da ukloni ove aplikacije.}}</translation> <translation id="5997337190805127100">Saznajte više o pristupu sajtovima</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> rezultata za „<ph name="SEARCH_TEXT" />“</translation> +<translation id="6002122790816966947">Uređaji</translation> <translation id="6002210667729577411">Premesti grupu u novi prozor</translation> <translation id="6002452033851752583">Lozinka je izbrisana sa Google naloga</translation> <translation id="6002458620803359783">Željeni glasovi</translation> @@ -5618,7 +5620,6 @@ <translation id="6833996806551876956">Proba Zaštićenog okruženja privatnosti</translation> <translation id="6834652994408928492">Tamni režim se automatski uključuje kada sunce zađe</translation> <translation id="6835762382653651563">Povežite se na internet da biste ažurirali <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Pitaj kada sajt želi da otvara i postavlja prozore na ekrane (preporučeno)</translation> <translation id="6839225236531462745">Greška pri brisanju sertifikata</translation> <translation id="6839916869147598086">Prijavljivanje je promenjeno</translation> <translation id="6840155290835956714">Pitaj pre slanja</translation> @@ -6529,7 +6530,6 @@ <translation id="7775694664330414886">Kartica je premeštena u neimenovanu grupu – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> će moći da pregleda datoteke u direktorijumu <ph name="FOLDERNAME" /> dok ne zatvorite sve kartice ovog sajta</translation> <translation id="7776701556330691704">Nije pronađen nijedan glas</translation> -<translation id="7777284276915203144">Lozinke se šifruju na uređaju pre nego što se sačuva u Google menadžeru lozinki</translation> <translation id="7781335840981796660">Svi korisnički nalozi i lokalni podaci će biti uklonjeni.</translation> <translation id="7782102568078991263">Nema više predloga sa Google-a</translation> <translation id="7782717250816686129">Čuva podatke koji se ponavljaju na ekranu za prijavljivanje i umeće akreditive u sesiju.</translation> @@ -7181,7 +7181,6 @@ <translation id="8428634594422941299">Važi</translation> <translation id="84297032718407999">Odjavićete se za <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Prikaz dodira</translation> -<translation id="8431730749911729314">Šifrujte lozinke na uređaju pre nego što se sačuvaju u Google menadžer lozinki</translation> <translation id="8434480141477525001">NaCl port za otklanjanje grešaka</translation> <translation id="8435395510592618362">Potvrdite identitet pomoću <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">američka</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index a6d293e9..83a27b8b 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1258,6 +1258,7 @@ <translation id="2263679799334060788">Повратне информације нам помажу да побољшамо Google Cast и захвални смо вам на њима. Да бисте решили проблеме са пребацивањем, посетите <ph name="BEGIN_LINK" />центар за помоћ<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Питај када сајт жели да приступа Bluetooth уређајима (препоручено)</translation> <translation id="2266957463645820432">IPP преко USB-а (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth је онемогућен</translation> <translation id="2270450558902169558">Размена података са било којим уређајем на домену <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Инсталација <ph name="BEGIN_BOLD" />ће обрисати комплетне податке са хард-диска<ph name="END_BOLD" />. Проверите да ли сте направили резервне копије података.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Када инсталација почне, не може да се откаже.<ph name="END_PARAGRAPH2" /></translation> @@ -2082,7 +2083,6 @@ <translation id="3088052000289932193">Сајт користи MIDI</translation> <translation id="3088128611727407543">Припрема се профил апликације...</translation> <translation id="3088325635286126843">&Преименуј...</translation> -<translation id="3089064280130434511">Не дозвољавај сајтовима да отварају и постављају прозоре на екранима</translation> <translation id="3089137131053189723">Претрага је обрисана</translation> <translation id="3090589793601454425">Не премештај</translation> <translation id="3090819949319990166">Није успело копирање спољне crx датотеке у датотеку <ph name="TEMP_CRX_FILE" />.</translation> @@ -3700,6 +3700,7 @@ <translation id="4813136279048157860">Моје слике</translation> <translation id="4813512666221746211">Грешка на мрежи</translation> <translation id="4814378367953456825">Унесите назив за овај отисак прста</translation> +<translation id="481574578487123132">Повезани уређаји</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, детаљи</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 обележивач је избрисан}one{{COUNT} обележивач је избрисан}few{{COUNT} обележивача су избрисана}other{{COUNT} обележивача је избрисано}}</translation> <translation id="4819607494758673676">Обавештења Google помоћника</translation> @@ -3714,7 +3715,6 @@ <translation id="482952334869563894">USB уређаји продавца <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Подеси PIN</translation> <translation id="4830026649400230050">Сва преузимања која испуњавају услове усмеравају се на <ph name="WEB_DRIVE" /> налог организације.</translation> -<translation id="4830121310592638841">Питај када сајт жели да отвара и поставља прозоре на екране</translation> <translation id="4830502475412647084">Инсталира се ажурирање ОС-а</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> не може да се повеже на интернет помоћу мреже <ph name="NETWORK_NAME" />. Изаберите неку другу мрежу. <ph name="LEARN_MORE_LINK_START" />Сазнајте више<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Пронађен је 1 штампач са сервера за штампање</translation> @@ -4414,6 +4414,7 @@ <translation id="5563234215388768762">Претражите Google или унесите URL</translation> <translation id="5565735124758917034">Активно</translation> <translation id="5568069709869097550">Не могу да се пријавим</translation> +<translation id="5571066253365925590">Bluetooth је омогућен</translation> <translation id="5571092938913434726">Глобалне контроле за медије</translation> <translation id="5571832155627049070">Прилагодите профил</translation> <translation id="5572851009514199876">Отворите и пријавите се у Chrome да би Chrome могао да провери да ли имате дозволу за приступ овом сајту.</translation> @@ -4812,6 +4813,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ову апликацију.}one{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}few{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}other{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}}</translation> <translation id="5997337190805127100">Сазнајте више о приступу сајтовима</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> резултата за „<ph name="SEARCH_TEXT" />“</translation> +<translation id="6002122790816966947">Уређаји</translation> <translation id="6002210667729577411">Премести групу у нови прозор</translation> <translation id="6002452033851752583">Лозинка је избрисана са Google налога</translation> <translation id="6002458620803359783">Жељени гласови</translation> @@ -5618,7 +5620,6 @@ <translation id="6833996806551876956">Проба Заштићеног окружења приватности</translation> <translation id="6834652994408928492">Тамни режим се аутоматски укључује када сунце зађе</translation> <translation id="6835762382653651563">Повежите се на интернет да бисте ажурирали <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Питај када сајт жели да отвара и поставља прозоре на екране (препоручено)</translation> <translation id="6839225236531462745">Грешка при брисању сертификата</translation> <translation id="6839916869147598086">Пријављивање је промењено</translation> <translation id="6840155290835956714">Питај пре слања</translation> @@ -6529,7 +6530,6 @@ <translation id="7775694664330414886">Картица је премештена у неименовану групу – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> ће моћи да прегледа датотеке у директоријуму <ph name="FOLDERNAME" /> док не затворите све картице овог сајта</translation> <translation id="7776701556330691704">Није пронађен ниједан глас</translation> -<translation id="7777284276915203144">Лозинке се шифрују на уређају пре него што се сачува у Google менаџеру лозинки</translation> <translation id="7781335840981796660">Сви кориснички налози и локални подаци ће бити уклоњени.</translation> <translation id="7782102568078991263">Нема више предлога са Google-а</translation> <translation id="7782717250816686129">Чува податке који се понављају на екрану за пријављивање и умеће акредитиве у сесију.</translation> @@ -7181,7 +7181,6 @@ <translation id="8428634594422941299">Важи</translation> <translation id="84297032718407999">Одјавићете се за <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Приказ додира</translation> -<translation id="8431730749911729314">Шифрујте лозинке на уређају пре него што се сачувају у Google менаџер лозинки</translation> <translation id="8434480141477525001">NaCl порт за отклањање грешака</translation> <translation id="8435395510592618362">Потврдите идентитет помоћу <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">америчка</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 6a225e60..40bab1d 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -1274,6 +1274,7 @@ hjälpcentret<ph name="END_LINK" /> om du vill felsöka problem med Cast.</translation> <translation id="22665427234727190">Fråga när en webbplats vill få åtkomst till Bluetooth-enheter (rekommenderas)</translation> <translation id="2266957463645820432">IPP över USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth inaktiverat</translation> <translation id="2270450558902169558">Utväxla data med enheter i domänen <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Installationen <ph name="BEGIN_BOLD" />innebär att hårddisken rensas fullständigt<ph name="END_BOLD" />. Kontrollera att du har en säkerhetskopia av din data.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />När installationen har påbörjats går den inte att avbryta.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">MIDI används på webbplatsen</translation> <translation id="3088128611727407543">Förbereder appens profil …</translation> <translation id="3088325635286126843">&Byt namn ...</translation> -<translation id="3089064280130434511">Blockera webbplatser från att öppna och placera ut fönster på skärmen</translation> <translation id="3089137131053189723">Sökningen har rensats</translation> <translation id="3090589793601454425">Flytta inte</translation> <translation id="3090819949319990166">Det går inte att kopiera den externa CRX-filen till <ph name="TEMP_CRX_FILE" />.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">Mina bilder</translation> <translation id="4813512666221746211">Nätverksfel</translation> <translation id="4814378367953456825">Ge fingeravtrycket ett namn</translation> +<translation id="481574578487123132">Länkade enheter</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, information</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 bokmärke har raderats}other{{COUNT} bokmärken har raderats}}</translation> <translation id="4819607494758673676">Aviseringar från Google Assistent</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">USB-enheter från leverantören <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Konfigurera pinkod</translation> <translation id="4830026649400230050">Alla nedladdningar som uppfyller villkoren dirigeras till organisationens <ph name="WEB_DRIVE" />-konto.</translation> -<translation id="4830121310592638841">Fråga när en webbplats vill öppna fönster och placera ut dem på skärmen</translation> <translation id="4830502475412647084">Uppdateringen för operativsystemet installeras</translation> <translation id="4830573902900904548">Din <ph name="DEVICE_TYPE" /> kan inte ansluta till internet med <ph name="NETWORK_NAME" />. Välj ett annat nätverk. <ph name="LEARN_MORE_LINK_START" />Läs mer<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">1 skrivare från utskriftsservern hittades</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Sök på Google eller skriv en webbadress</translation> <translation id="5565735124758917034">Aktiv</translation> <translation id="5568069709869097550">Kan inte logga in</translation> +<translation id="5571066253365925590">Bluetooth aktiverad</translation> <translation id="5571092938913434726">Globala mediareglage</translation> <translation id="5571832155627049070">Anpassa din profil</translation> <translation id="5572851009514199876">Logga in på Chrome så att Chrome kan kontrollera om du har tillgång till den här webbplatsen.</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Be administratören att ta bort den här appen så att du kan fortsätta att surfa på internet.}other{Be administratören att ta bort de här apparna så att du kan fortsätta att surfa på internet.}}</translation> <translation id="5997337190805127100">Läs mer om webbplatsåtkomst</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultat för <ph name="SEARCH_TEXT" /></translation> +<translation id="6002122790816966947">Dina enheter</translation> <translation id="6002210667729577411">Flytta gruppen till ett nytt fönster</translation> <translation id="6002452033851752583">Lösenordet har raderats från Google-kontot</translation> <translation id="6002458620803359783">Önskade röster</translation> @@ -5635,7 +5637,6 @@ <translation id="6833996806551876956">Privacy Sandbox – provperiod</translation> <translation id="6834652994408928492">Mörkt läge aktiveras automatiskt vid solnedgången</translation> <translation id="6835762382653651563">Anslut till internet om du vill uppdatera din <ph name="DEVICE_TYPE" />.</translation> -<translation id="6838034009068684089">Fråga när en webbplats vill öppna fönster och placera ut dem på skärmen (rekommenderas)</translation> <translation id="6839225236531462745">Fel vid borttagning av certifikat</translation> <translation id="6839916869147598086">Inloggning fungerar annorlunda</translation> <translation id="6840155290835956714">Fråga innan något skickas</translation> @@ -6546,7 +6547,6 @@ <translation id="7775694664330414886">Fliken flyttades till en namnlös grupp – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> har läsbehörighet till filer i <ph name="FOLDERNAME" /> tills du stänger alla flikar för den här webbplatsen</translation> <translation id="7776701556330691704">Inga röster hittades</translation> -<translation id="7777284276915203144">Dina lösenord krypteras på enheten innan de sparas i Google Lösenordshantering</translation> <translation id="7781335840981796660">Alla användarkonton och all lokal data tas bort.</translation> <translation id="7782102568078991263">Inga fler förslag från Google</translation> <translation id="7782717250816686129">Spara beständig data på inloggningsskärmen och injicera användaruppgifterna i sessionen.</translation> @@ -7199,7 +7199,6 @@ <translation id="8428634594422941299">Jag förstår</translation> <translation id="84297032718407999">Du loggas ut om <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Visa tryck</translation> -<translation id="8431730749911729314">Kryptera lösenord på enheten innan de sparas i Google Lösenordshantering</translation> <translation id="8434480141477525001">Felsökningsport för Native Client</translation> <translation id="8435395510592618362">Verifiera din identitet med <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">USA</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 2a50556..091ea0d1 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -1270,6 +1270,7 @@ kituo cha usaidizi<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Uliza wakati tovuti inataka kufikia vifaa vya Bluetooth (inapendekezwa)</translation> <translation id="2266957463645820432">IPP kupitia USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth imelemazwa</translation> <translation id="2270450558902169558">Badilisha data kwa kifaa chochote kwenye kikoa <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Hatua ya usakinishaji <ph name="BEGIN_BOLD" />itafuta data yote kwenye diski yako kuu<ph name="END_BOLD" />. Hakikisha umehifadhi nakala ya data yako.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Usakinishaji ukianza hauwezi kughairiwa.<ph name="END_PARAGRAPH2" /></translation> @@ -2094,7 +2095,6 @@ <translation id="3088052000289932193">Tovuti inatumia MIDI</translation> <translation id="3088128611727407543">Inatayarisha maelezo ya programu...</translation> <translation id="3088325635286126843">&Badilisha jina...</translation> -<translation id="3089064280130434511">Zuia tovuti zisifungue wala kuweka madirisha kwenye skrini zako</translation> <translation id="3089137131053189723">Utafutaji umefutwa</translation> <translation id="3090589793601454425">Usihamishe</translation> <translation id="3090819949319990166">Haiwezi kunakili faili ya CRX kwenye <ph name="TEMP_CRX_FILE" />.</translation> @@ -3221,6 +3221,7 @@ <translation id="4275830172053184480">Washa upya kifaa chako</translation> <translation id="4278390842282768270">Imeruhusiwa</translation> <translation id="4279129444466079448">Unaweza kuweka hadi wasifu <ph name="PROFILE_LIMIT" /> wa eSIM kwenye kifaa hiki. Ili uweze kuweka wasifu mwingine, ondoa wasifu uliopo kwanza.</translation> +<translation id="4280325816108262082">Kifaa kitaondolewa kiotomatiki kinapokuwa kimezimwa au wakati hakitumiwi</translation> <translation id="4281844954008187215">Sheria na Masharti</translation> <translation id="4282196459431406533">Smart Lock imewashwa</translation> <translation id="4284755288573763878">Ungependa kuzima kipengele cha usalama kilichoboreshwa?</translation> @@ -3710,6 +3711,7 @@ <translation id="4813136279048157860">Picha Zangu</translation> <translation id="4813512666221746211">Hitilafu ya mtandao</translation> <translation id="4814378367953456825">Weka jina la alama ya kidole</translation> +<translation id="481574578487123132">Vifaa vilivyounganishwa</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Maelezo</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Alamisho moja imefutwa}other{Alamisho {COUNT} zimefutwa}}</translation> <translation id="4819607494758673676">Arifa za Programu ya Mratibu wa Google</translation> @@ -3724,7 +3726,6 @@ <translation id="482952334869563894">Vifaa vya USB kutoka kwa muuzaji mwenye kitambulisho cha <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Unda PIN</translation> <translation id="4830026649400230050">Vipakuliwa vyote vilivyotimiza masharti hutumwa kwenye akaunti ya <ph name="WEB_DRIVE" /> ya shirika lako.</translation> -<translation id="4830121310592638841">Uliza wakati tovuti inataka kufungua na kuweka madirisha kwenye skrini zako</translation> <translation id="4830502475412647084">Inasasisha Mfumo wa Uendeshaji</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> yako haiwezi kuunganisha kwenye Intaneti kwa kutumia <ph name="NETWORK_NAME" />. Tafadhali chagua mtandao mwingine. <ph name="LEARN_MORE_LINK_START" />Pata maelezo zaidi<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Imepata printa moja kwenye seva ya kuchapisha</translation> @@ -4341,6 +4342,7 @@ <translation id="5490721031479690399">Ondoa kifaa cha Bluetooth</translation> <translation id="5490798133083738649">Ruhusu Linux ifikie maikrofoni yako</translation> <translation id="549211519852037402">Kahawia hafifu na nyeupe</translation> +<translation id="5492637351392383067">Usimbaji fiche kwenye kifaa</translation> <translation id="5493792505296048976">skrini imewashwa</translation> <translation id="5494016731375030300">Vichupo Vilivyofungwa hivi Karibuni</translation> <translation id="5494362494988149300">Funga &Utakapomalizika</translation> @@ -4424,6 +4426,7 @@ <translation id="5563234215388768762">Tafuta kwenye Google au uandike URL</translation> <translation id="5565735124758917034">Inatumika</translation> <translation id="5568069709869097550">Siwezi kuingia</translation> +<translation id="5571066253365925590">Bluetooth imewezeshwa</translation> <translation id="5571092938913434726">Vidhibiti vya Jumla vya Maudhui</translation> <translation id="5571832155627049070">Weka mapendeleo kwenye wasifu wako</translation> <translation id="5572851009514199876">Tafadhali anza na uingie katika Chrome ili Chrome iangalie ikiwa unaruhusiwa kufikia tovuti hii.</translation> @@ -4821,6 +4824,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Ili uhakikishe kuwa unaendelea kuvinjari wavuti, mwombe msimamizi wako aondoe programu hii.}other{Ili uhakikishe kuwa unaendelea kuvinjari wavuti, mwombe msimamizi wako aondoe programu hii.}}</translation> <translation id="5997337190805127100">Pata Maelezo Zaidi kuhusu Ufikiaji wa Tovuti</translation> <translation id="6000758707621254961">Matokeo <ph name="RESULT_COUNT" /> ya '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">Vifaa vyako</translation> <translation id="6002210667729577411">Hamishia kikundi kwenye dirisha jipya</translation> <translation id="6002452033851752583">Nenosiri limefutwa kwenye Akaunti yako ya Google</translation> <translation id="6002458620803359783">Sauti Zinazopendelewa</translation> @@ -5627,7 +5631,6 @@ <translation id="6833996806551876956">Jaribio la kipengele cha Utaratibu wa Kuwekea Vikwazo vya Faragha</translation> <translation id="6834652994408928492">Hali nyeusi itawashwa kiotomatiki wakati wa machweo</translation> <translation id="6835762382653651563">Tafadhali unganisha kwenye Intaneti ili usasishe <ph name="DEVICE_TYPE" /> yako.</translation> -<translation id="6838034009068684089">Uliza wakati tovuti inataka kufungua na kuweka madirisha kwenye skrini zako (inapendekezwa)</translation> <translation id="6839225236531462745">Hitilafu ya Ufutaji wa Cheti</translation> <translation id="6839916869147598086">Kipengele cha kuingia katika akaunti kimebadilika</translation> <translation id="6840155290835956714">Uliza kabla ya kutuma</translation> @@ -7981,6 +7984,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> haiwezi kufungua faili kwenye folda hii kwa sababu ina faili za mfumo</translation> <translation id="950307215746360464">Mwongozo wa mipangilio</translation> <translation id="951991426597076286">Kataa</translation> +<translation id="952471655966876828">Kifaa kitaunganishwa kiotomatiki kinapokuwa kimewashwa na wakati kinatumiwa</translation> <translation id="953434574221655299">Zinazoruhusiwa kujua wakati unatumia kifaa chako</translation> <translation id="956500788634395331">Umelindwa dhidi ya viendelezi ambavyo huenda ni hatari</translation> <translation id="957960681186851048">Tovuti hii imejaribu kupakua faili nyingi kiotomatiki</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index c4bc303..ea669fc 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1274,6 +1274,7 @@ உதவி மையத்தைப்<ph name="END_LINK" /> பார்க்கவும்.</translation> <translation id="22665427234727190">புளூடூத் சாதனங்களை அணுக ஒரு தளம் விரும்பும் போது அனுமதி கேள் (பரிந்துரைக்கப்படுகிறது)</translation> <translation id="2266957463645820432">USBக்கான IPP (IPPUSB)</translation> +<translation id="2268130516524549846">புளூடூத் முடக்கப்பட்டது</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> டொமைனில் உள்ள எந்தச் சாதனத்துடனும் தரவைப் பரிமாறவும்</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />இதை நிறுவினால் <ph name="BEGIN_BOLD" />உங்கள் ஹார்டு டிரைவில் இருக்கும் தரவு அனைத்தும் அழிக்கப்படும்<ph name="END_BOLD" />. தரவு காப்புப் பிரதி எடுக்கப்பட்டிருப்பதை உறுதிசெய்துகொள்ளவும்.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />நிறுவத் தொடங்கிய பின்னர் இதனை ரத்துசெய்ய முடியாது.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">தளம் MIDIயைப் பயன்படுத்துகிறது</translation> <translation id="3088128611727407543">ஆப்ஸ் சுயவிவரம் தயாராகிறது...</translation> <translation id="3088325635286126843">&மறுபெயரிடுக...</translation> -<translation id="3089064280130434511">எனது திரைகளில் சாளரங்களைத் திறந்து வைப்பதிலிருந்து தளங்களைத் தடைசெய்</translation> <translation id="3089137131053189723">தேடல் அழிக்கப்பட்டது</translation> <translation id="3090589793601454425">நகர்த்த வேண்டாம்</translation> <translation id="3090819949319990166">வெளிப்புற crx ஃபைலை <ph name="TEMP_CRX_FILE" />க்கு நகலெடுக்க முடியாது.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">எனது படங்கள்</translation> <translation id="4813512666221746211">நெட்வொர்க் பிழை</translation> <translation id="4814378367953456825">இந்தக் கைரேகைக்கு ஒரு பெயரை உள்ளிடவும்</translation> +<translation id="481574578487123132">இணைக்கப்பட்டுள்ள சாதனங்கள்</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, விவரங்கள்</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 புக்மார்க் நீக்கப்பட்டது}other{{COUNT} புக்மார்க்குகள் நீக்கப்பட்டன}}</translation> <translation id="4819607494758673676">Google Assistant அறிவிப்புகள்</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">விற்பனையாளர் <ph name="VENDOR_ID" /> வழங்கும் USB சாதனங்கள்</translation> <translation id="4829768588131278040">பின்னை அமை</translation> <translation id="4830026649400230050">தகுதிபெறும் பதிவிறக்கங்கள் அனைத்தும் உங்கள் நிறுவனத்தின் <ph name="WEB_DRIVE" /> கணக்கில் சேமிக்கப்படும்.</translation> -<translation id="4830121310592638841">எனது திரைகளில் சாளரங்களைத் திறந்து வைக்க ஒரு தளம் விரும்பும்போது அனுமதி கேள்</translation> <translation id="4830502475412647084">OS புதுப்பிப்பை நிறுவுகிறது</translation> <translation id="4830573902900904548">உங்கள் <ph name="DEVICE_TYPE" /> ஆல் <ph name="NETWORK_NAME" /> மூலம் இணையத்துடன் இணைய முடியவில்லை. வேறு நெட்வொர்க்கைத் தேர்வுசெய்யவும். <ph name="LEARN_MORE_LINK_START" />மேலும் அறிக<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">பிரிண்ட் சேவையகத்தில் ஒரு பிரிண்டர் உள்ளது</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Googleளில் தேடவும் அல்லது URLலை உள்ளிடவும்</translation> <translation id="5565735124758917034">செயலில் உள்ளது</translation> <translation id="5568069709869097550">உள்நுழைய முடியவில்லை</translation> +<translation id="5571066253365925590">புளூடூத் இயக்கப்பட்டது</translation> <translation id="5571092938913434726">மொத்த மீடியாவின் கட்டுப்பாடுகள்</translation> <translation id="5571832155627049070">உங்கள் சுயவிவரத்தைப் பிரத்தியேகமாக்குங்கள்</translation> <translation id="5572851009514199876">Chromeமைத் தொடங்கி உள்நுழையவும். அப்போதுதான் இந்தத் தளத்தை அணுகுவதற்கு உங்களுக்கு அனுமதி உள்ளதா என்பதை Chrome சரிபார்க்க முடியும்.</translation> @@ -4830,6 +4831,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{இணையத்தில் உங்களால் தொடர்ந்து உலாவ முடிய வேண்டுமானால், இந்த ஆப்ஸை அகற்றும்படி உங்கள் நிர்வாகியிடம் தெரிவிக்கவும்.}other{இணையத்தில் உங்களால் தொடர்ந்து உலாவ முடிய வேண்டுமானால், இந்த ஆப்ஸை அகற்றும்படி உங்கள் நிர்வாகியிடம் தெரிவிக்கவும்.}}</translation> <translation id="5997337190805127100">தள அணுகலைப் பற்றி மேலும் அறிக</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />'க்கு <ph name="RESULT_COUNT" /> முடிவுகள் உள்ளன</translation> +<translation id="6002122790816966947">உங்கள் சாதனங்கள்</translation> <translation id="6002210667729577411">குழுவைப் புதிய சாளரத்திற்கு நகர்த்து</translation> <translation id="6002452033851752583">கடவுச்சொல் உங்கள் Google கணக்கிலிருந்து நீக்கப்பட்டது</translation> <translation id="6002458620803359783">விருப்பமான குரல்கள்</translation> @@ -5636,7 +5638,6 @@ <translation id="6833996806551876956">தனியுரிமை சாண்ட்பாக்ஸ் இலவச உபயோகக் காலம்</translation> <translation id="6834652994408928492">சூரியன் மறையும்போது, டார்க் பயன்முறை தானாக இயக்கப்படும்</translation> <translation id="6835762382653651563">உங்கள் <ph name="DEVICE_TYPE" />ஐப் புதுப்பிக்க இணையத்துடன் இணையவும்.</translation> -<translation id="6838034009068684089">எனது திரைகளில் சாளரங்களைத் திறந்து வைக்க ஒரு தளம் விரும்பும்போது அனுமதி கேள் (பரிந்துரைக்கப்படுகிறது)</translation> <translation id="6839225236531462745">சான்றிதழ் நீக்குதல் பிழை</translation> <translation id="6839916869147598086">உள்நுழையும் முறை மாறியுள்ளது</translation> <translation id="6840155290835956714">அனுப்பும் முன் கேள்</translation> @@ -6547,7 +6548,6 @@ <translation id="7775694664330414886">தாவல் பெயரிடப்படாத இந்தக் குழுவிற்கு நகர்த்தப்பட்டது - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">இந்தத் தளத்தின் தாவல்கள் அனைத்தையும் மூடும் வரை <ph name="ORIGIN" /> தளத்தால் <ph name="FOLDERNAME" /> இல் உள்ள ஃபைல்களைப் பார்க்க முடியும்</translation> <translation id="7776701556330691704">குரல்கள் எதுவும் இல்லை</translation> -<translation id="7777284276915203144">Google கடவுச்சொல் நிர்வாகியில் கடவுச்சொற்கள் சேமிக்கப்படுவதற்கு முன்பு உங்கள் சாதனத்தில் அவை என்க்ரிப்ஷன் செய்யப்படுகின்றன</translation> <translation id="7781335840981796660">எல்லா பயனர்களின் கணக்குகளும், அகத் தரவும் அகற்றப்படும்.</translation> <translation id="7782102568078991263">Google இலிருந்து மேலும் பரிந்துரைகள் இல்லை</translation> <translation id="7782717250816686129">உள்நுழையும் திரையில் நிலையான தரவைச் சேமித்து அமர்வினுள் அனுமதிச் சான்றுகளை உள்ளிடு.</translation> @@ -7200,7 +7200,6 @@ <translation id="8428634594422941299">நிராகரி</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> இல் வெளியேற்றப்படுவீர்கள்</translation> <translation id="8431190899827883166">Show taps</translation> -<translation id="8431730749911729314">Google கடவுச்சொல் நிர்வாகியில் கடவுச்சொற்கள் சேமிக்கப்படுவதற்கு முன்பு உங்கள் சாதனத்தில் அவை என்க்ரிப்ஷன் செய்யப்படும்</translation> <translation id="8434480141477525001">NaCl பிழைத்திருத்தப் போர்ட்</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> மூலம் உங்கள் அடையாளத்தைச் சரிபார்க்கவும்</translation> <translation id="8437209419043462667">யு.எஸ்.</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 68c8a58..d9faa97 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1273,6 +1273,7 @@ సహాయ కేంద్రం<ph name="END_LINK" />ను సందర్శించండి.</translation> <translation id="22665427234727190">బ్లూటూత్ పరికరాలను సైట్ యాక్సెస్ చేయాలన్నప్పుడు అనుమతి అడగాలి (సిఫార్సు చేయడమైనది)</translation> <translation id="2266957463645820432">USB ద్వారా IPP (IPPUSB)</translation> +<translation id="2268130516524549846">బ్లూటూత్ నిలిపివేయబడింది</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> డొమైన్లో ఏ పరికరంతోనైనా డేటాను ఇచ్చిపుచ్చుకోవడానికి అనుమతి</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />ఇన్స్టాలేషన్ అనేది <ph name="BEGIN_BOLD" />మీ మొత్తం హార్డ్ డ్రైవ్ను ఫ్యాక్టరీ రీసెట్ చేస్తుంది<ph name="END_BOLD" />. మీ డేటా బ్యాకప్ చేయబడిందని నిర్ధారించుకోండి.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ఇన్స్టాలేషన్ ప్రారంభం అయిన తర్వాత దాన్ని రద్దు చేయలేరు.<ph name="END_PARAGRAPH2" /></translation> @@ -2097,7 +2098,6 @@ <translation id="3088052000289932193">సైట్ MIDIని ఉపయోగిస్తోంది</translation> <translation id="3088128611727407543">యాప్ ప్రొఫైల్ సిద్ధం అవుతోంది...</translation> <translation id="3088325635286126843">&పేరుమార్చు...</translation> -<translation id="3089064280130434511">మీ స్క్రీన్లలో విండోలను తెరవకుండా, ఉంచకుండా ఉండటానికి సైట్లను బ్లాక్ చేయండి</translation> <translation id="3089137131053189723">శోధన తీసివేయబడింది</translation> <translation id="3090589793601454425">తరలించకండి</translation> <translation id="3090819949319990166">బాహ్య crx ఫైల్ను <ph name="TEMP_CRX_FILE" />కు కాపీ చేయడం సాధ్యపడదు.</translation> @@ -3716,6 +3716,7 @@ <translation id="4813136279048157860">నా చిత్రాలు</translation> <translation id="4813512666221746211">నెట్వర్క్ ఎర్రర్</translation> <translation id="4814378367953456825">ఈ వేలి ముద్రకు ఒక పేరు పెట్టండి</translation> +<translation id="481574578487123132">లింక్ చేయబడిన పరికరాలు</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, వివరాలు</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 బుక్మార్క్ తొలగించబడింది}other{{COUNT} బుక్మార్క్లు తొలగించబడ్డాయి}}</translation> <translation id="4819607494758673676">Google Assistant నోటిఫికేషన్లు</translation> @@ -3730,7 +3731,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> నుండి USB పరికరాలు</translation> <translation id="4829768588131278040">PINని సెటప్ చేయి</translation> <translation id="4830026649400230050">అర్హత గల అన్ని డౌన్లోడ్లు మీ సంస్థ <ph name="WEB_DRIVE" /> ఖాతాకు పంపబడతాయి.</translation> -<translation id="4830121310592638841">సైట్ మీ స్క్రీన్లలో విండోలను తెరిచి, ఉంచాలనుకున్నప్పుడు అనుమతి అడగాలి</translation> <translation id="4830502475412647084">OS అప్డేట్ ఇన్స్టాల్ చేయబడుతుంది</translation> <translation id="4830573902900904548"><ph name="NETWORK_NAME" />ను ఉపయోగించి మీ <ph name="DEVICE_TYPE" /> ఇంటర్నెట్కి కనెక్ట్ చేయలేకపోయింది. దయచేసి మరో నెట్వర్క్ను ఎంచుకోండి. <ph name="LEARN_MORE_LINK_START" />మరింత తెలుసుకోండి<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">ప్రింట్ సర్వర్ నుండి 1 ప్రింటర్ కనుగొనబడింది</translation> @@ -4186,7 +4186,7 @@ <translation id="5311304534597152726">ఇలా సైన్ ఇన్ చేస్తున్నారు</translation> <translation id="5311565231560644461">మీ వర్చువల్ రియాలిటీ పరికరాలను, డేటాను ఉపయోగించడానికి సైట్లను అనుమతించవద్దు</translation> <translation id="5315738755890845852">అదనపు వంకర కలుపు: <ph name="ERROR_LINE" /></translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5319359161174645648">Chromeను Google సిఫార్సు చేస్తోంది</translation> <translation id="5319712128756744240">కొత్త పరికరాన్ని పెయిర్ చేయండి</translation> <translation id="5320135788267874712">కొత్త పరికరం పేరు</translation> @@ -4431,6 +4431,7 @@ <translation id="5563234215388768762">Googleలో వెతకండి లేదా URLను టైప్ చేయండి</translation> <translation id="5565735124758917034">సక్రియం</translation> <translation id="5568069709869097550">సైన్ ఇన్ చేయడం సాధ్యపడలేదు</translation> +<translation id="5571066253365925590">బ్లూటూత్ ప్రారంభించబడింది</translation> <translation id="5571092938913434726">గ్లోబల్ మీడియా నియంత్రణలు</translation> <translation id="5571832155627049070">మీ ప్రొఫైల్ను తగినట్టుగా మార్చుకోండి</translation> <translation id="5572851009514199876">దయచేసి Chromeను ప్రారంభించి, దానికి సైన్ ఇన్ చేయండి, అప్పుడు ఈ సైట్ను యాక్సెస్ చేయడానికి మీకు అనుమతి ఉందో లేదో Chrome తనిఖీ చేయగలదు.</translation> @@ -4828,6 +4829,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{వెబ్ను బ్రౌజ్ చేస్తూనే ఉండడాన్ని నిర్ధారించడానికి, మీ నిర్వాహకుడిని ఈ అప్లికేషన్ను తీసివేయమని కోరండి.}other{వెబ్ను బ్రౌజ్ చేస్తూనే ఉండడాన్ని నిర్ధారించడానికి, మీ నిర్వాహకుడిని ఈ అప్లికేషన్లను తీసివేయమని కోరండి.}}</translation> <translation id="5997337190805127100">సైట్ యాక్సెస్ గురించి మరింత తెలుసుకోండి</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' అనే దానికి <ph name="RESULT_COUNT" /> ఫలితాలు లభించాయి</translation> +<translation id="6002122790816966947">మీ పరికరాలు</translation> <translation id="6002210667729577411">గ్రూప్ను కొత్త విండోకు తరలించు</translation> <translation id="6002452033851752583">మీ Google ఖాతా నుండి పాస్వర్డ్ తొలగించబడింది</translation> <translation id="6002458620803359783">ప్రాధాన్య వాయిస్లు</translation> @@ -5634,7 +5636,6 @@ <translation id="6833996806551876956">గోప్యతా శాండ్బాక్స్ ట్రయల్</translation> <translation id="6834652994408928492">సూర్యాస్తమయ సమయానికి డార్క్ మోడ్ ఆటోమేటిక్గా ఆన్ అవుతుంది</translation> <translation id="6835762382653651563">దయచేసి మీ <ph name="DEVICE_TYPE" />ని అప్డేట్ చేయడానికి ఇంటర్నెట్కి కనెక్ట్ చేయండి.</translation> -<translation id="6838034009068684089">సైట్ మీ స్క్రీన్లలో విండోలను తెరిచి, ఉంచాలనుకున్నప్పుడు అనుమతి అడగాలి (సిఫార్సు చేయబడినది)</translation> <translation id="6839225236531462745">ప్రమాణపత్రం తొలగింపు లోపం</translation> <translation id="6839916869147598086">సైన్-ఇన్ మార్చబడింది</translation> <translation id="6840155290835956714">పంపే ముందు అడగాలి</translation> @@ -6420,7 +6421,7 @@ <translation id="7654941827281939388">ఈ ఖాతా ఇప్పటికే ఈ కంప్యూటర్లో ఉపయోగించబడుతోంది.</translation> <translation id="7655411746932645568">సీరియల్ పోర్ట్లకు కనెక్ట్ చేయడానికి సైట్లు అడగవచ్చు</translation> <translation id="7657218410916651670">మీరు సైన్ ఇన్ చేసినప్పుడు, <ph name="BEGIN_LINK_GOOGLE" />ఇతర రకాల యాక్టివిటీ<ph name="END_LINK_GOOGLE" /> మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. మీరు వాటిని ఎప్పుడైనా తొలగించవచ్చు.</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7659154729610375585">ఏదేమైనా అజ్ఞాత మోడ్ నుండి నిష్క్రమించాలా?</translation> <translation id="7659297516559011665">ఈ పరికరంలో ఉన్న పాస్వర్డ్లు మాత్రమే</translation> <translation id="7659584679870740384">ఈ పరికరాన్ని ఉపయోగించడానికి మీకు అధికారం లేదు. దయచేసి సైన్-ఇన్ అనుమతి కోసం నిర్వాహకుడిని సంప్రదించండి.</translation> @@ -6545,7 +6546,6 @@ <translation id="7775694664330414886">పేరులేని గ్రూప్కు ట్యాబ్ తరలించబడింది - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">మీరు ఈ సైట్లోని అన్ని ట్యాబ్లను మూసివేసే వరకు <ph name="ORIGIN" />, <ph name="FOLDERNAME" />లో ఉన్న ఫైల్స్ను చూడగలదు</translation> <translation id="7776701556330691704">వాయిస్లు ఏవీ కనుగొనబడలేదు</translation> -<translation id="7777284276915203144">మీ పాస్వర్డ్ Google పాస్వర్డ్ మేనేజర్లో సేవ్ అవ్వడానికంటే ముందు అది మీ పరికరంలో ఎన్క్రిప్ట్ చేయబడుతుంది</translation> <translation id="7781335840981796660">అన్ని వినియోగదారు ఖాతాలు మరియు స్థానిక డేటా తీసివేయబడతాయి.</translation> <translation id="7782102568078991263">ఇక Google నుండి సూచనలు లేవు</translation> <translation id="7782717250816686129">లాగిన్ స్క్రీన్లో డేటాను నిరంతరం సేవ్ చేయండి, సెషన్లోకి ఆధారాలను ఇంజెక్ట్ చేయండి.</translation> @@ -7194,7 +7194,6 @@ <translation id="8428634594422941299">అర్థమైంది</translation> <translation id="84297032718407999">మీరు <ph name="LOGOUT_TIME_LEFT" />లో సైన్ అవుట్ అవుతారు</translation> <translation id="8431190899827883166">నొక్కినవి చూపు</translation> -<translation id="8431730749911729314">పాస్వర్డ్లు Google పాస్వర్డ్ మేనేజర్లో సేవ్ అవ్వడానికంటే ముందు వాటిని మీ పరికరంలో ఎన్క్రిప్ట్ చేయండి</translation> <translation id="8434480141477525001">NaCl డీబగ్ పోర్ట్</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> ద్వారా మీ గుర్తింపుని ధృవీకరించండి</translation> <translation id="8437209419043462667">యుఎస్</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 1fce9ceb..a5252852 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -1258,6 +1258,7 @@ <translation id="2263679799334060788">ความคิดเห็นของคุณช่วยปรับปรุง Google Cast ซึ่งเป็นประโยชน์สำหรับเรา หากต้องการความช่วยเหลือในการแก้ปัญหาที่เกิดขึ้นกับการแคสต์ โปรดไปที่<ph name="BEGIN_LINK" />ศูนย์ช่วยเหลือ<ph name="END_LINK" /></translation> <translation id="22665427234727190">ถามเมื่อเว็บไซต์ต้องการเข้าถึงอุปกรณ์บลูทูธ (แนะนำ)</translation> <translation id="2266957463645820432">IPP ผ่าน USB (IPPUSB)</translation> +<translation id="2268130516524549846">ปิดใช้งานบลูทูธแล้ว</translation> <translation id="2270450558902169558">แลกเปลี่ยนข้อมูลกับอุปกรณ์ในโดเมน <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />การติดตั้ง<ph name="BEGIN_BOLD" />จะลบข้อมูลทั้งหมดในฮาร์ดไดรฟ์<ph name="END_BOLD" /> โปรดตรวจสอบว่าได้สำรองข้อมูลไว้แล้ว<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />เมื่อเริ่มการติดตั้งแล้วจะยกเลิกไม่ได้<ph name="END_PARAGRAPH2" /></translation> @@ -2082,7 +2083,6 @@ <translation id="3088052000289932193">เว็บไซต์กำลังใช้ MIDI</translation> <translation id="3088128611727407543">กำลังเตรียมโปรไฟล์แอป...</translation> <translation id="3088325635286126843">&เปลี่ยนชื่อ...</translation> -<translation id="3089064280130434511">บล็อกเว็บไซต์ไม่ให้เปิดและวางหน้าต่างบนหน้าจอ</translation> <translation id="3089137131053189723">ล้างการค้นหาแล้ว</translation> <translation id="3090589793601454425">ไม่ต้องย้าย</translation> <translation id="3090819949319990166">ไม่สามารถคัดลอกไฟล์ crx ภายนอกไปยัง <ph name="TEMP_CRX_FILE" /></translation> @@ -3700,6 +3700,7 @@ <translation id="4813136279048157860">รูปภาพของฉัน</translation> <translation id="4813512666221746211">ข้อผิดพลาดของเครือข่าย</translation> <translation id="4814378367953456825">ป้อนชื่อให้ลายนิ้วมือนี้</translation> +<translation id="481574578487123132">อุปกรณ์ที่ลิงก์</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, รายละเอียด</translation> <translation id="4816336393325437908">{COUNT,plural, =1{ลบบุ๊กมาร์ก 1 รายการแล้ว}other{ลบบุ๊กมาร์ก {COUNT} รายการแล้ว}}</translation> <translation id="4819607494758673676">การแจ้งเตือนของ Google Assistant</translation> @@ -3714,7 +3715,6 @@ <translation id="482952334869563894">อุปกรณ์ USB จากผู้ให้บริการ <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">ตั้งค่า PIN</translation> <translation id="4830026649400230050">ระบบจะกำหนดเส้นทางไฟล์ดาวน์โหลดที่มีสิทธิ์ทั้งหมดไปยังบัญชี <ph name="WEB_DRIVE" /> ขององค์กร</translation> -<translation id="4830121310592638841">ถามเมื่อเว็บไซต์ต้องการเปิดและวางหน้าต่างบนหน้าจอ</translation> <translation id="4830502475412647084">กำลังติดตั้งอัปเดตระบบปฏิบัติการ</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> ของคุณไม่สามารถเชื่อมต่ออินเทอร์เน็ตโดยใช้ <ph name="NETWORK_NAME" /> โปรดเลือกเครือข่ายอื่น <ph name="LEARN_MORE_LINK_START" />ดูข้อมูลเพิ่มเติม<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">พบเครื่องพิมพ์ 1 เครื่องจากเซิร์ฟเวอร์การพิมพ์</translation> @@ -4415,6 +4415,7 @@ <translation id="5563234215388768762">ค้นหาด้วย Google หรือพิมพ์ URL</translation> <translation id="5565735124758917034">ใช้งานอยู่</translation> <translation id="5568069709869097550">ไม่สามารถลงชื่อเข้าใช้</translation> +<translation id="5571066253365925590">เปิดใช้งานบลูทูธแล้ว</translation> <translation id="5571092938913434726">การควบคุมสื่อส่วนกลาง</translation> <translation id="5571832155627049070">กำหนดค่าโปรไฟล์ของคุณ</translation> <translation id="5572851009514199876">โปรดเปิดและลงชื่อเข้าใช้ Chrome เพื่อให้ Chrome ตรวจสอบได้ว่าคุณได้รับอนุญาตให้เข้าถึงไซต์นี้หรือไม่</translation> @@ -4812,6 +4813,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{โปรดขอให้ผู้ดูแลระบบนำแอปพลิเคชันนี้ออกเพื่อให้คุณท่องเว็บได้ต่อไป}other{โปรดขอให้ผู้ดูแลระบบนำแอปพลิเคชันนี้ออกเพื่อให้คุณท่องเว็บได้ต่อไป}}</translation> <translation id="5997337190805127100">ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึงเว็บไซต์</translation> <translation id="6000758707621254961">มีผลการค้นหา "<ph name="SEARCH_TEXT" />" <ph name="RESULT_COUNT" /> รายการ</translation> +<translation id="6002122790816966947">อุปกรณ์ของคุณ</translation> <translation id="6002210667729577411">ย้ายกลุ่มไปยังหน้าต่างใหม่</translation> <translation id="6002452033851752583">ลบรหัสผ่านจากบัญชี Google ของคุณแล้ว</translation> <translation id="6002458620803359783">เสียงที่ต้องการ</translation> @@ -5618,7 +5620,6 @@ <translation id="6833996806551876956">ช่วงทดลองใช้ Privacy Sandbox</translation> <translation id="6834652994408928492">โหมดมืดจะเปิดโดยอัตโนมัติเมื่อพระอาทิตย์ตก</translation> <translation id="6835762382653651563">โปรดเชื่อมต่ออินเทอร์เน็ตเพื่ออัปเดต <ph name="DEVICE_TYPE" /></translation> -<translation id="6838034009068684089">ถามเมื่อเว็บไซต์ต้องการเปิดและวางหน้าต่างบนหน้าจอ (แนะนำ)</translation> <translation id="6839225236531462745">ข้อผิดพลาดในการนำออกใบรับรอง</translation> <translation id="6839916869147598086">มีการเปลี่ยนแปลงการลงชื่อเข้าใช้</translation> <translation id="6840155290835956714">ถามก่อนที่จะส่ง</translation> @@ -6528,7 +6529,6 @@ <translation id="7775694664330414886">แท็บถูกย้ายไปยังกลุ่มที่ไม่มีชื่อ - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> จะยังดูไฟล์ใน <ph name="FOLDERNAME" /> ได้อยู่จนกว่าคุณจะปิดทุกแท็บของเว็บไซต์นี้</translation> <translation id="7776701556330691704">ไม่พบเสียง</translation> -<translation id="7777284276915203144">ระบบจะเข้ารหัสให้กับรหัสผ่านในอุปกรณ์ก่อนบันทึกลงในเครื่องมือจัดการรหัสผ่านของ Google</translation> <translation id="7781335840981796660">บัญชีผู้ใช้ทั้งหมดและข้อมูลในเครื่องจะถูกลบ</translation> <translation id="7782102568078991263">ไม่มีคำแนะนำเพิ่มเติมจาก Google</translation> <translation id="7782717250816686129">บันทึกข้อมูลที่ใช้ตลอดในหน้าจอการเข้าสู่ระบบ และแทรกข้อมูลเข้าสู่ระบบลงในเซสชัน</translation> @@ -7180,7 +7180,6 @@ <translation id="8428634594422941299">รับทราบ</translation> <translation id="84297032718407999">คุณจะออกจากระบบใน <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">แสดงการแตะ</translation> -<translation id="8431730749911729314">เข้ารหัสให้กับรหัสผ่านในอุปกรณ์ก่อนบันทึกลงในเครื่องมือจัดการรหัสผ่านของ Google</translation> <translation id="8434480141477525001">พอร์ตแก้ปัญหา NaCl</translation> <translation id="8435395510592618362">ยืนยันตัวตนของคุณกับ <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">สหรัฐอเมริกา</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 30417b6..fcbed70 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -1258,6 +1258,7 @@ <translation id="2263679799334060788">Geri bildirimleriniz Google Cast'i iyileştirmemize yardımcı olacağından bizim için çok önemlidir. Yayınlamayla ilgili sorunların giderilmesinde yardım almak için lütfen <ph name="BEGIN_LINK" />yardım merkezine<ph name="END_LINK" /> bakın.</translation> <translation id="22665427234727190">Bir site HID cihazlarına erişmek istediğinde sor (önerilen)</translation> <translation id="2266957463645820432">USB üzerinden IPP (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth devre dışı</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> alan adındaki herhangi bir cihazla veri alışverişi</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Yükleme işlemi <ph name="BEGIN_BOLD" />sabit diskinizin tamamını silecek<ph name="END_BOLD" />. Verilerinizi yedeklemeyi unutmayın.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Yükleme işlemi, başladıktan sonra iptal edilemez.<ph name="END_PARAGRAPH2" /></translation> @@ -2081,7 +2082,6 @@ <translation id="3088052000289932193">Sitede MIDI işlevi kullanılıyor</translation> <translation id="3088128611727407543">Uygulama profili hazırlanıyor...</translation> <translation id="3088325635286126843">&Yeniden adlandır…</translation> -<translation id="3089064280130434511">Sitelerin ekranlarınızda pencereler açıp yerleştirmesini engelleyin</translation> <translation id="3089137131053189723">Arama temizlendi</translation> <translation id="3090589793601454425">Hareket etme</translation> <translation id="3090819949319990166">Harici crx dosyası <ph name="TEMP_CRX_FILE" /> hedefine kopyalanamıyor.</translation> @@ -3699,6 +3699,7 @@ <translation id="4813136279048157860">Görsellerim</translation> <translation id="4813512666221746211">Ağ hatası</translation> <translation id="4814378367953456825">Bu parmak izi için bir ad girin</translation> +<translation id="481574578487123132">Bağlı cihazlar</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Ayrıntılar</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 yer işareti silindi}other{{COUNT} yer işareti silindi}}</translation> <translation id="4819607494758673676">Google Asistan Bildirimleri</translation> @@ -3713,7 +3714,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> tarafından sağlanan USB cihazlar</translation> <translation id="4829768588131278040">PIN ayarla</translation> <translation id="4830026649400230050">Tüm uygun indirmeler, kuruluşunuzun <ph name="WEB_DRIVE" /> hesabına yönlendirilir.</translation> -<translation id="4830121310592638841">Bir site ekranlarımda pencereler açıp yerleştirmek istediğinde sor</translation> <translation id="4830502475412647084">OS güncellemesini yükleyin</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> cihazınız <ph name="NETWORK_NAME" /> ile İnternet'e bağlanamıyor. Lütfen başka bir ağ seçin. <ph name="LEARN_MORE_LINK_START" />Daha fazla bilgi edinin<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Yazdırma sunucusunda 1 yazıcı bulundu</translation> @@ -4414,6 +4414,7 @@ <translation id="5563234215388768762">Google'da arama yapın veya bir URL yazın</translation> <translation id="5565735124758917034">Etkin</translation> <translation id="5568069709869097550">Oturum açılamıyor</translation> +<translation id="5571066253365925590">Bluetooth etkin</translation> <translation id="5571092938913434726">Genel Medya Denetimleri</translation> <translation id="5571832155627049070">Profilinizi özelleştirin</translation> <translation id="5572851009514199876">Chrome'un bu siteye erişmenize izin verilip verilmediğini kontrol edebilmesi için lütfen Chrome'u başlatıp oturum açın.</translation> @@ -4812,6 +4813,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Web'e göz atmaya devam edebildiğinizden emin olmak için yöneticinizden bu uygulamayı kaldırmasını isteyin.}other{Web'e göz atmaya devam edebildiğinizden emin olmak için yöneticinizden bu uygulamaları kaldırmasını isteyin.}}</translation> <translation id="5997337190805127100">Site Erişimi Hakkında Daha Fazla Bilgi</translation> <translation id="6000758707621254961">"<ph name="SEARCH_TEXT" />" için bulunan <ph name="RESULT_COUNT" /> sonuç gösteriliyor</translation> +<translation id="6002122790816966947">Cihazlarınız</translation> <translation id="6002210667729577411">Grubu yeni pencereye taşı</translation> <translation id="6002452033851752583">Şifre Google Hesabınızdan silindi</translation> <translation id="6002458620803359783">Tercih Edilen Sesler</translation> @@ -5618,7 +5620,6 @@ <translation id="6833996806551876956">Privacy Sandbox denemesi</translation> <translation id="6834652994408928492">Koyu mod, güneş battığında otomatik olarak açılır</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" /> cihazınızı güncellemek için lütfen İnternet'e bağlanın.</translation> -<translation id="6838034009068684089">Bir site ekranlarımda pencereler açıp yerleştirmek istediğinde sor (önerilir)</translation> <translation id="6839225236531462745">Sertifika Silme Hatası</translation> <translation id="6839916869147598086">Oturum açma değişti</translation> <translation id="6840155290835956714">Göndermeden önce sor</translation> @@ -6529,7 +6530,6 @@ <translation id="7775694664330414886">Sekme, adsız gruba taşındı - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" />, siz bu site için tüm sekmeleri kapatana kadar <ph name="FOLDERNAME" /> klasöründeki dosyaları görüntüleyebilecek</translation> <translation id="7776701556330691704">Hiçbir ses bulunamadı</translation> -<translation id="7777284276915203144">Şifreleriniz Google Şifre Yöneticisi'ne kaydedilmeden önce cihazınızda şifrelenir</translation> <translation id="7781335840981796660">Tüm kullanıcı hesapları ve yerel veriler kaldırılır.</translation> <translation id="7782102568078991263">Google'dan başka öneri yok</translation> <translation id="7782717250816686129">Kalıcı verileri giriş ekranında depolama ve kimlik bilgilerini oturuma ekleme.</translation> @@ -7180,7 +7180,6 @@ <translation id="8428634594422941299">Anladım!</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> içinde çıkış yapacaksınız</translation> <translation id="8431190899827883166">Dokunmaları göster</translation> -<translation id="8431730749911729314">Google Şifre Yöneticisi'ne kaydedilmeden önce şifrelerinizi cihazınızda şifreleyin</translation> <translation id="8434480141477525001">NaCl Hata Ayıklama Bağlantı Noktası</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> ile kimliğinizi doğrulayın</translation> <translation id="8437209419043462667">ABD</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 5d9bf59..7e0d7ff 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -1277,6 +1277,7 @@ довідковий центр<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Запитувати, коли сайт хоче отримати доступ до пристроїв Bluetooth (рекомендовано)</translation> <translation id="2266957463645820432">IPP через USB (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth вимкнено</translation> <translation id="2270450558902169558">Обмінюватися даними з будь-яким пристроєм у домені <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Під час встановлення <ph name="BEGIN_BOLD" />всі дані жорсткого диска буде видалено<ph name="END_BOLD" />. Переконайтеся, що ви створили резервну копію цих даних.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Коли встановлення розпочнеться, його не можна буде скасувати.<ph name="END_PARAGRAPH2" /></translation> @@ -2101,7 +2102,6 @@ <translation id="3088052000289932193">Сайт використовує MIDI</translation> <translation id="3088128611727407543">Готується профіль додатка…</translation> <translation id="3088325635286126843">&Перейменувати...</translation> -<translation id="3089064280130434511">Забороняти сайтам відкривати й розміщувати вікна на ваших екранах</translation> <translation id="3089137131053189723">Пошук очищено</translation> <translation id="3090589793601454425">Не переносити</translation> <translation id="3090819949319990166">Не вдається скопіювати зовнішній файл .crx у файл <ph name="TEMP_CRX_FILE" />.</translation> @@ -3230,6 +3230,7 @@ <translation id="4275830172053184480">Перезапустіть пристрій</translation> <translation id="4278390842282768270">Дозволено</translation> <translation id="4279129444466079448">Максимальна кількість профілів eSIM-карти на цьому пристрої – <ph name="PROFILE_LIMIT" />. Щоб додати новий, видаліть якийсь із наявних.</translation> +<translation id="4280325816108262082">Пристрій відключиться автоматично, якщо його вимкнути чи не використовувати</translation> <translation id="4281844954008187215">Умови використання</translation> <translation id="4282196459431406533">Smart Lock увімкнено</translation> <translation id="4284755288573763878">Вимкнути посилену безпеку?</translation> @@ -3719,6 +3720,7 @@ <translation id="4813136279048157860">Мої зображення</translation> <translation id="4813512666221746211">Помилка мережі</translation> <translation id="4814378367953456825">Введіть назву цього відбитка пальця</translation> +<translation id="481574578487123132">Зв’язані пристрої</translation> <translation id="4816097470512964351">"<ph name="DEVICE" />", дeталі</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Видалено 1 закладку}one{Видалено {COUNT} закладку}few{Видалено {COUNT} закладки}many{Видалено {COUNT} закладок}other{Видалено {COUNT} закладки}}</translation> <translation id="4819607494758673676">Сповіщення Google Асистента</translation> @@ -3733,7 +3735,6 @@ <translation id="482952334869563894">Пристрої USB від постачальника <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Налаштувати PIN-код</translation> <translation id="4830026649400230050">Усі дозволені завантажені файли спрямовуються в обліковий запис організації в сервісі <ph name="WEB_DRIVE" />.</translation> -<translation id="4830121310592638841">Запитувати, коли сайт хоче відкрити й розмістити вікна на ваших екранах</translation> <translation id="4830502475412647084">Установлюється оновлення ОС</translation> <translation id="4830573902900904548">Ваш <ph name="DEVICE_TYPE" /> не може під’єднатися до Інтернету через мережу "<ph name="NETWORK_NAME" />". Виберіть іншу. <ph name="LEARN_MORE_LINK_START" />Докладніше<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">На сервері для друку знайдено 1 принтер</translation> @@ -4350,6 +4351,7 @@ <translation id="5490721031479690399">Відключити пристрій Bluetooth</translation> <translation id="5490798133083738649">Надати Linux доступ до мікрофона</translation> <translation id="549211519852037402">Бежево-білий</translation> +<translation id="5492637351392383067">Шифрування на пристрої</translation> <translation id="5493792505296048976">екран увімкнено</translation> <translation id="5494016731375030300">Нещодавно закриті вкладки</translation> <translation id="5494362494988149300">Відкрити після &завантаження</translation> @@ -4433,6 +4435,7 @@ <translation id="5563234215388768762">Шукайте в Google або введіть URL-адресу</translation> <translation id="5565735124758917034">Активний клієнт</translation> <translation id="5568069709869097550">Не вдалося ввійти</translation> +<translation id="5571066253365925590">Bluetooth увімкнено</translation> <translation id="5571092938913434726">Загальні елементи керування медіа</translation> <translation id="5571832155627049070">Налаштуйте свій профіль</translation> <translation id="5572851009514199876">Увійдіть в обліковий запис Chrome, щоб веб-переглядач міг перевірити, чи ви маєте дозвіл відвідувати цей сайт.</translation> @@ -4830,6 +4833,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити цей додаток.}one{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}few{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}many{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}other{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}}</translation> <translation id="5997337190805127100">Докладніше про доступ до сайтів</translation> <translation id="6000758707621254961">Результатів для запиту "<ph name="SEARCH_TEXT" />": <ph name="RESULT_COUNT" /></translation> +<translation id="6002122790816966947">Ваші пристрої</translation> <translation id="6002210667729577411">Перенести групу в нове вікно</translation> <translation id="6002452033851752583">Пароль видалено з облікового запису Google</translation> <translation id="6002458620803359783">Рекомендовані голоси</translation> @@ -5636,7 +5640,6 @@ <translation id="6833996806551876956">Пробна версія Privacy Sandbox</translation> <translation id="6834652994408928492">Темний режим увімкнеться автоматично після заходу сонця</translation> <translation id="6835762382653651563">Щоб оновити свій <ph name="DEVICE_TYPE" />, під’єднайтеся до Інтернету.</translation> -<translation id="6838034009068684089">Запитувати, коли сайт хоче відкрити й розмістити вікна на ваших екранах (рекомендовано)</translation> <translation id="6839225236531462745">Помилка видалення сертифіката</translation> <translation id="6839916869147598086">Спосіб входу в обліковий запис змінено</translation> <translation id="6840155290835956714">Запитувати, перш ніж надсилати</translation> @@ -7991,6 +7994,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> не може відкрити файли в цій папці, оскільки вона містить системні файли</translation> <translation id="950307215746360464">Посібник із налаштування</translation> <translation id="951991426597076286">Відхилити</translation> +<translation id="952471655966876828">Пристрій підключиться автоматично, якщо його ввімкнути й використовувати</translation> <translation id="953434574221655299">Можуть знати, коли ви активно використовуєте пристрій</translation> <translation id="956500788634395331">Пристрій захищено від потенційно шкідливих розширень</translation> <translation id="957960681186851048">Цей сайт намагався автоматично завантажити декілька файлів</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 0029cc7..3ee8edc 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -240,6 +240,7 @@ <translation id="1235458158152011030">معلوم نیٹ ورکس</translation> <translation id="123578888592755962">ڈسک بھری ہوئی ہے</translation> <translation id="1235924639474699896">{COUNT,plural, =1{ٹیکسٹ}other{# ٹیکسٹس}}</translation> +<translation id="1236009322878349843">فون میں ترمیم کریں</translation> <translation id="1239594683407221485">فائلز ایپ میں آلے کے مواد کا پتہ لگائیں۔</translation> <translation id="1241066500170667906"><ph name="EXPERIMENT_NAME" /> کے لیے تجربے کی حالت منتخب کریں</translation> <translation id="124116460088058876">مزید زبانیں</translation> @@ -1259,6 +1260,7 @@ <translation id="2263679799334060788">آپ کے تاثرات سے ہمیں Google Cast کو بہتر بنانے میں مدد ملتی ہے اور یہ قابل ستائش ہے۔ کاسٹ سے متعلق مسائل کو حل کرنے کیلئے براہ کرم <ph name="BEGIN_LINK" /> مرکز امداد<ph name="END_LINK" /> سے رجوع کریں۔</translation> <translation id="22665427234727190">جب کوئی سائٹ بلوٹوتھ آلات تک رسائی حاصل کرنا چاہے تو پوچھیں (تجویز کردہ)</translation> <translation id="2266957463645820432">IPP اوور USB (IPPUSB)</translation> +<translation id="2268130516524549846">بلوٹوتھ غیر فعال کر دیا گیا</translation> <translation id="2270450558902169558">ڈومین میں موجود کسی بھی آلہ کے ساتھ ڈیٹا کا تبادلہ کریں: <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />انسٹالیشن <ph name="BEGIN_BOLD" />آپ کی ہارڈ ڈرائیو کو مکمل طور پر مٹا دے گی<ph name="END_BOLD" />۔ یقینی بنائیں کہ آپ کے ڈیٹا کا بیک اپ لیا جا چکا ہے۔<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ایک بار انسٹالیشن شروع ہو جانے کے بعد اسے منسوخ نہیں کیا جا سکتا۔<ph name="END_PARAGRAPH2" /></translation> @@ -1941,6 +1943,7 @@ <translation id="2939908794993783865">اضافی غیر فعال سائٹس</translation> <translation id="2939938020978911855">دستیاب بلوٹوتھ آلات دکھائیں</translation> <translation id="2941112035454246133">کم</translation> +<translation id="2941696810925320401">سائٹس عام طور پر اضافی دستاویزات یا مکمل اسکرین کا مواد دکھانے کے لیے آپ کی اسکرینز پر ونڈوز کو کھولتی اور رکھتی ہیں</translation> <translation id="2942279350258725020">Android پیغامات</translation> <translation id="2942560570858569904">منتظر...</translation> <translation id="2942581856830209953">اس صفحے کو حسب ضرورت بنائیں</translation> @@ -2082,7 +2085,6 @@ <translation id="3088052000289932193">سائٹ MIDI استعمال کر رہی ہے</translation> <translation id="3088128611727407543">ایپ کی پروفائل تیار ہو رہی ہے...</translation> <translation id="3088325635286126843">&نام بدلیں…</translation> -<translation id="3089064280130434511">اپنی اسکرینز پر ونڈوز کھولنے اور رکھنے سے سائٹس کو مسدود کریں</translation> <translation id="3089137131053189723">تلاش کو صاف کر دیا گیا</translation> <translation id="3090589793601454425">منتقل نہ کریں</translation> <translation id="3090819949319990166">خارجی crx فائل کو <ph name="TEMP_CRX_FILE" /> پر کاپی نہیں کیا جا سکتا ہے۔</translation> @@ -2094,6 +2096,7 @@ <translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 ممکنہ طور پر نقصان دہ ایکسٹینشن آف ہے۔ آپ اسے ہٹا بھی سکتے ہیں۔}other{{NUM_EXTENSIONS} ممکنہ طور پر نقصان دہ ایکسٹینشنز آف ہیں۔ آپ انہیں ہٹا بھی سکتے ہیں۔}}</translation> <translation id="3101126716313987672">مدھم روشنی</translation> <translation id="3101709781009526431">تاریخ اور وقت</translation> +<translation id="3103451787721578293">براہ کرم اس ڈیٹا کو اپ لوڈ کرنے کی وجہ درج کریں:</translation> <translation id="3103941660000130485">Linux اپ گریڈ کرنے میں خرابی</translation> <translation id="3105796011181310544">Google پر واپس جائیں؟</translation> <translation id="310671807099593501">سائٹ بلوٹوتھ استعمال کر رہی ہے</translation> @@ -2620,6 +2623,7 @@ <translation id="3670113805793654926">کسی بھی وینڈر کے آلات</translation> <translation id="3670229581627177274">بلوٹوتھ آن کریں</translation> <translation id="3672681487849735243">ایک فیکٹری کی خرابی کا پتہ لگا ہے</translation> +<translation id="3673097791729989571">سائن ان کی میزبانی <ph name="SAML_DOMAIN" /> کے ذریعے کی گئی</translation> <translation id="367645871420407123">خالی چھوڑیں اگر آپ root پاس ورڈ کو ڈیفالٹ ٹیسٹ تصویر کی قدر میں سیٹ کرنا چاہتے ہیں۔</translation> <translation id="3677106374019847299">حسب ضرورت فراہم کنندہ درج کریں</translation> <translation id="3677911431265050325">موبائل سائٹ کی درخواست کریں</translation> @@ -3403,6 +3407,7 @@ <translation id="4481467543947557978">سروس ورکر</translation> <translation id="4481530544597605423">جوڑا ختم کیے ہوئے آلات</translation> <translation id="4482990632723642375">حال ہی میں بند کیا گیا ٹیب</translation> +<translation id="4484922932728109422">سائٹس کو اجازت نہ دیں کہ وہ آپ کی اسکرینز کے بارے میں معلومات کو ونڈوز کھولنے اور رکھنے کے لیے استعمال کریں</translation> <translation id="4487489714832036847">Chromebooks روایتی سافٹ ویئر کی بجائے ایپس کا استعمال کرتا ہے۔ پروڈکٹیوٹی، تفریح اور بہت کچھ کیلئے ایپس حاصل کریں۔</translation> <translation id="4488257340342212116">آپ کا کیمرا استعمال کرنے کی اجازت ہے</translation> <translation id="4488502501195719518">سبھی ڈیٹا صاف کریں؟</translation> @@ -3485,6 +3490,7 @@ <translation id="4565917129334815774">سسٹم لاگز اسٹور کریں</translation> <translation id="4566417217121906555">مائیکروفون کو خاموش کریں</translation> <translation id="456717285308019641">ترجمہ کرنے کیلئے صفحے کی زبان</translation> +<translation id="4567512141633030272">سائن ان کا اختیار غلط ہے؟</translation> <translation id="4567533462991917415">آپ سیٹ اپ کے بعد کبھی بھی مزید لوگوں کو شامل کر سکتے ہیں۔ ہر شخص اپنے اکاؤنٹ کو ذاتی نوعیت کا بنا اور ڈیٹا کو نجی رکھ سکتا ہے۔</translation> <translation id="4567772783389002344">لفظ شامل کریں</translation> <translation id="4568025708905928793">سیکیورٹی کلید کی درخواست کی جا رہی ہے</translation> @@ -3700,6 +3706,7 @@ <translation id="4813136279048157860">میری تصاویر</translation> <translation id="4813512666221746211">نیٹ ورک کی خرابی</translation> <translation id="4814378367953456825">اس فنگر پرنٹ کے لئے ایک نام درج کریں</translation> +<translation id="481574578487123132">لنک کردہ آلات</translation> <translation id="4816097470512964351"><ph name="DEVICE" />، تفصیلات</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 بُک مارک حذف کیا گیا}other{{COUNT} بُک مارکس حذف کئے گئے}}</translation> <translation id="4819607494758673676">Google اسسٹنٹ کی اطلاعات</translation> @@ -3714,7 +3721,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> وینڈر کی جانب سے USB آلات</translation> <translation id="4829768588131278040">PIN ترتیب دیں</translation> <translation id="4830026649400230050">سبھی اہل ڈاؤن لوڈز آپ کی تنظیم کے <ph name="WEB_DRIVE" /> اکاؤنٹ میں محفوظ ہوتے ہیں۔</translation> -<translation id="4830121310592638841">جب کوئی سائٹ ونڈوز کھولنا اور آپ کی اسکرین پر رکھنا چاہے تو پوچھیں</translation> <translation id="4830502475412647084">OS اپ ڈیٹ انسٹال کیا جا رہا ہے</translation> <translation id="4830573902900904548"><ph name="NETWORK_NAME" /> کا استعمال کرتے ہوئے آپ کا <ph name="DEVICE_TYPE" /> انٹرنیٹ سے منسلک ہونے سے قاصر ہے۔ براہ کرم کوئی دوسرا نیٹ ورک منتخب کریں۔<ph name="LEARN_MORE_LINK_START" />مزید جانیں<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">پرنٹ سرور سے 1 پرنٹر ملا</translation> @@ -3730,6 +3736,7 @@ <translation id="4841741146571978176">مطلوبہ ورچوئل مشین موجود نہیں ہے۔ براہ کرم جاری رکھنے کیلئے <ph name="VM_TYPE" /> سیٹ اپ کرنے کی کوشش کریں</translation> <translation id="4842976633412754305">یہ صفحہ غیر توثیق کردہ ذرائع سے اسکرپٹس لوڈ کرنے کی کوشش کر رہا ہے۔</translation> <translation id="4844333629810439236">دوسرے کی بورڈز</translation> +<translation id="4844633725025837809">اضافی حفاظت کے لیے، پاس ورڈز کو Google پاس ورڈ مینیجر میں محفوظ کرنے سے پہلے اپنے آلے پر مرموز کریں</translation> <translation id="4846680374085650406">اس ترتیب کیلئے آپ منتظم کی تجویز کی پیروی کر رہے ہیں۔</translation> <translation id="4847902821209177679"><ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" /> منتخب کیا گیا، <ph name="TOPIC_SOURCE" /> البمز منتخب کرنے کے لیے Enter دبائیں</translation> <translation id="4848191975108266266">Google اسسٹنٹ "Ok Google"</translation> @@ -3871,6 +3878,7 @@ <translation id="499165176004408815">زیادہ تضاد کی وضع استعمال کریں</translation> <translation id="4992458225095111526">پاور واش کی توثیق کریں</translation> <translation id="4992473555164495036">آپ کے منتظم نے اندراج کے دستیاب طریقوں کو محدود کیا ہوا ہے۔</translation> +<translation id="4992984395680162305">ان آلات کو QR کوڈ اسکین کر کے لنک کیا گیا۔</translation> <translation id="4994474651455208930">سائٹس کو پروٹوکولز کیلئے ڈیفالٹ ہینڈلرز بننے کیلئے پوچھنے کی اجازت دیں</translation> <translation id="4994754230098574403">ترتیب دیا جا رہا ہے</translation> <translation id="4995131849631312693"><ph name="BEGIN_PARAGRAPH1" />اندراج کرنے سے پہلے آپ کو TPM صاف کرنے کی ضرورت ہے تاکہ <ph name="DEVICE_OS" /> آلے کی ملکیت لے سکے۔<ph name="END_PARAGRAPH1" /> @@ -3991,6 +3999,7 @@ <translation id="5123433949759960244">باسکٹ بال</translation> <translation id="5125751979347152379">غلط URL۔</translation> <translation id="5126611267288187364">تبدیلیاں دیکھیں</translation> +<translation id="5127242257756472928">ونڈوز کھولنے اور رکھنے کے لیے آپ کی اسکرینز کے بارے میں معلومات کا استعمال کرنے کی اجازت نہیں ہے</translation> <translation id="5127620150973591153">محفوظ کنکشن ID: <ph name="TOKEN" /></translation> <translation id="5127805178023152808">Sync آف ہے</translation> <translation id="5127881134400491887">نیٹ ورک کنکشنز کا نظم کریں</translation> @@ -4103,6 +4112,7 @@ <translation id="5243522832766285132">براہ کرم کچھ دیر میں دوبارہ کوشش کریں</translation> <translation id="5244474230056479698"><ph name="EMAIL" /> میں مطابقت پذیری کی جا رہی ہے</translation> <translation id="5245610266855777041">اسکول کے اکاؤنٹ کے ساتھ شروع کریں</translation> +<translation id="5246036036039717045">ان آلات کو سیکیورٹی کلیدوں کے طور پر استعمال کیا جا سکتا ہے کیونکہ آپ ان پر Chrome میں سائن ان ہیں۔</translation> <translation id="5246282308050205996"><ph name="APP_NAME" /> کریش ہوگیا ہے۔ ایپ کو دوبارہ شروع کرنے کیلئے اس غبارہ پر کلک کریں۔</translation> <translation id="5247051749037287028">ڈسپلے نام (اختیاری)</translation> <translation id="5249624017678798539">ڈاؤن لوڈ مکمل ہونے سے پہلے براؤزر کریش ہو گیا۔</translation> @@ -4414,6 +4424,7 @@ <translation id="5563234215388768762">Google پر تلاش کریں یا URL ٹائپ کریں</translation> <translation id="5565735124758917034">فعال</translation> <translation id="5568069709869097550">سائن نہیں کیا جا سکتا ہے</translation> +<translation id="5571066253365925590">بلوٹوتھ فعال ہے</translation> <translation id="5571092938913434726">گلوبل میڈیا کنٹرولز</translation> <translation id="5571832155627049070">اپنی پروفائل حسب ضرورت بنائیں</translation> <translation id="5572851009514199876">براہ کرم شروع کریں اور Chrome میں سائن ان کریں تاکہ Chrome یہ چیک کر سکے کہ آیا آپ کو اس سائٹ تک رسائی کی اجازت ہے۔</translation> @@ -4589,6 +4600,7 @@ <translation id="5757375109985023827">پیش منظر دیکھنے کیلئے ٹیب منتخب کریں</translation> <translation id="5758631781033351321">آپ اپنی پڑھنے کی فہرست یہاں پائیں گے</translation> <translation id="5759728514498647443">وہ دستاویزات جنہیں آپ <ph name="APP_NAME" /> کے ذریعے پرنٹ کرنے کیلئے بھیجتے ہیں ان کو <ph name="APP_NAME" /> پڑھ سکتی ہے۔</translation> +<translation id="5762787084360227629">Google اکاؤنٹ کی معلومات درج کریں</translation> <translation id="5763751966069581670">کوئی USB آلہ نہیں ملا</translation> <translation id="5764483294734785780">آڈیو &محفوظ کریں بطور…</translation> <translation id="57646104491463491">ترمیم کیے جانے کی تاریخ۔</translation> @@ -4811,6 +4823,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ویب کی براؤزنگ جاری رکھنے کو یقینی بنانے کے لیے، اپنے منتظم سے اس ایپلیکیشن کو ہٹانے کا مطالبہ کریں۔}other{ویب کی براؤزنگ جاری رکھنے کو یقینی بنانے کے لیے، اپنے منتظم سے ان ایپلیکیشنز کو ہٹانے کا مطالبہ کریں۔}}</translation> <translation id="5997337190805127100">سائٹ تک رسائی کے بارے میں مزید جانیں</translation> <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' کے <ph name="RESULT_COUNT" /> نتائج</translation> +<translation id="6002122790816966947">آپ کے آلات</translation> <translation id="6002210667729577411">گروپ کو نئی ونڈو میں منتقل کریں</translation> <translation id="6002452033851752583">پاس ورڈ آپ کے Google اکاؤنٹ سے ہٹایا گیا</translation> <translation id="6002458620803359783">ترجیحی آوازیں</translation> @@ -5617,7 +5630,6 @@ <translation id="6833996806551876956">رازداری سینڈ باکس کا ٹرائل</translation> <translation id="6834652994408928492">غروب آفتاب کے وقت تاریک وضع خودکار طور پر آن ہو جائے گی</translation> <translation id="6835762382653651563">براہ کرم اپنا <ph name="DEVICE_TYPE" /> اپ ڈیٹ کرنے کیلئے انٹرنیٹ سے منسلک ہوں۔</translation> -<translation id="6838034009068684089">جب کوئی سائٹ ونڈوز کھولنا اور آپ کی اسکرین پر رکھنا چاہے تو پوچھیں (تجاویز کردہ)</translation> <translation id="6839225236531462745">سرٹیفکیٹ حذف کرنے میں خرابی</translation> <translation id="6839916869147598086">سائن ان تبدیل ہو چکا ہے</translation> <translation id="6840155290835956714">بھیجنے سے پہلے پوچھیں</translation> @@ -5734,6 +5746,7 @@ <translation id="6965382102122355670">ٹھیک ہے</translation> <translation id="6965648386495488594">پورٹ</translation> <translation id="6965978654500191972">آلہ</translation> +<translation id="6966370001499648704">کنٹرول کریں کہ آپ کون سے فونز کو سیکیورٹی کلیدوں کے طور پر استعمال کرتے ہیں</translation> <translation id="6967430741871315905">یہ چیک کرنے سے قاصر ہے کہ آیا آلہ پر VM چلانے کی اجازت ہے</translation> <translation id="696780070563539690">سائٹس کوکیز کے ذریعے مختلف سائٹس پر، مثال کے طور پر، اشتہارات کو ذاتی نوعیت کا بنانے کے لیے، آپ کی براؤزنگ کی سرگرمی نہیں دیکھ سکتی ہیں</translation> <translation id="6968288415730398122">اسکرین لاک کنفیگر کرنے کیلئے اپنا پاس ورڈ درج کریں</translation> @@ -5908,6 +5921,7 @@ <translation id="7135729336746831607">بلوٹوتھ آن کریں؟</translation> <translation id="7136694880210472378">ڈیفالٹ بنائیں</translation> <translation id="7136993520339022828">ایک خرابی ہے۔ براہ کرم دیگر تصاویر کا انتخاب کر کے دوبارہ کوشش کریں۔</translation> +<translation id="7137472406312798422">سائٹس ونڈوز کھولنے اور رکھنے کے لیے آپ کی اسکرینز کے بارے میں معلومات کا استعمال کرنے کے لیے پوچھ سکتی ہیں</translation> <translation id="7138515695467025690">آف ہے / غروب آفتاب پر خودکار طور پر آن ہو جائے گی</translation> <translation id="7138678301420049075">دوسرا</translation> <translation id="7139627972753429585"><ph name="APP_NAME" /> ایپ آپ کا مائیکروفون استعمال کر رہی ہے</translation> @@ -6528,7 +6542,6 @@ <translation id="7775694664330414886">ٹیب کو بغیر نام والے گروپ میں منتقل کر دیا گیا - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">اس سائٹ کے لیے آپ کے سبھی ٹیبز کو بند کرنے تک <ph name="ORIGIN" /> <ph name="FOLDERNAME" /> میں فائلز دیکھ سکے گا</translation> <translation id="7776701556330691704">کوئی آواز نہیں ملی</translation> -<translation id="7777284276915203144">آپ کا پاس ورڈ Google پاس ورڈ مینیجر میں محفوظ ہونے سے پہلے آپ کے آلے پر مرموز ہو جاتا ہے</translation> <translation id="7781335840981796660">سبھی صارف اکاؤنٹس اور مقامی ڈیٹا کو ہٹا دیا جائے گا۔</translation> <translation id="7782102568078991263">Google کی جانب سے مزید کوئی مشورے نہیں ہیں</translation> <translation id="7782717250816686129">لاگ ان اسکرین پر مستقل ڈیٹا اسٹور کریں اور سیشن میں اسناد داخل کریں۔</translation> @@ -6795,6 +6808,7 @@ <translation id="8028803902702117856">ڈاؤن لوڈ جاری ہے <ph name="SIZE" />، <ph name="FILE_NAME" /></translation> <translation id="8028993641010258682">سائز</translation> <translation id="8029492516535178472"><ph name="WINDOW_TITLE" /> - اجازت کی درخواست کی گئی، جواب دینے کے ليے ⌘ + Option + اوپر تیر کا نشان دبائیں</translation> +<translation id="8029539783236818164">ونڈوز کھولنے اور رکھنے کے لیے آپ کی اسکرینز کے بارے میں معلومات کا استعمال کرنے کی اجازت ہے</translation> <translation id="8030169304546394654">منقطع</translation> <translation id="8030852056903932865">منظوری دیں</translation> <translation id="8032244173881942855">ٹیب کاسٹ کرنے سے قاصر۔</translation> @@ -6807,6 +6821,7 @@ <translation id="8038399858950372766"><ph name="DEVICE_COUNT" /> میں سے <ph name="DEVICE_INDEX" /> آلہ، <ph name="DEVICE_NAME" /> نام والا کی بورڈ</translation> <translation id="8041089156583427627">تاثرات بھیجیں</translation> <translation id="8042142357103597104">متن کا دھندلا پن</translation> +<translation id="8042331986490021244">آپ کے پاس ورڈز Google پاس ورڈ مینیجر میں محفوظ ہونے سے پہلے آپ کے آلے پر مرموز ہو جاتے ہیں</translation> <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> جواب نہیں دے رہی ہے۔</translation> <translation id="8044899503464538266">سست</translation> <translation id="8045253504249021590">مطابقت پذیری کو Google ڈیش بورڈ کے ذریعے روک دیا گیا ہے۔</translation> @@ -7180,7 +7195,6 @@ <translation id="8428634594422941299">سمجھ آ گئی</translation> <translation id="84297032718407999">آپ <ph name="LOGOUT_TIME_LEFT" /> میں سائن آؤٹ ہو جائیں گے</translation> <translation id="8431190899827883166">تھپتھپاہٹیں دکھائیں</translation> -<translation id="8431730749911729314">Google پاس ورڈ مینیجر میں محفوظ ہونے سے پہلے اپنے آلے پر پاس ورڈز کو مرموز کریں</translation> <translation id="8434480141477525001">NaCl ڈیبگ پورٹ</translation> <translation id="8435395510592618362"><ph name="APP_NAME" /> کے ساتھ اپنی شناخت کی توثیق کریں</translation> <translation id="8437209419043462667">US</translation> @@ -7566,6 +7580,7 @@ <translation id="8838234842677265403"><ph name="WEB_DRIVE_MESSAGE" /> (<ph name="SUPPORT_INFO" />)</translation> <translation id="8838601485495657486">دھندلا</translation> <translation id="8838770651474809439">ہیمبرگر</translation> +<translation id="8838778928843281408">فونز کا نظم کریں</translation> <translation id="883911313571074303">تصویر کی تشریح کریں</translation> <translation id="8841843049738266382">اجازت یافتہ فہرست کے صارفین کو پڑھیں اور تبدیل کریں</translation> <translation id="8842594465773264717">اس فنگر پرنٹ کو حذف کریں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 8255dda..251acffa 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -1261,6 +1261,7 @@ yordam markaziga<ph name="END_LINK" /> tashrif buyuring.</translation> <translation id="22665427234727190">Sayt Bluetooth qurilmalardan foydalanishi oldidan ruxsat olsin (tavsiya etiladi)</translation> <translation id="2266957463645820432">USB orqali IPP (IPPUSB)</translation> +<translation id="2268130516524549846">Bluetooth o‘chirildi</translation> <translation id="2270450558902169558"><ph name="DOMAIN" /> domenidagi har qanday qurilmalar o‘rtasida ma’lumot almashish</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Oʻrnatishda <ph name="BEGIN_BOLD" />qattiq diskdagi barcha maʼlumotlar oʻchirib tashlanadi<ph name="END_BOLD" />. Maʼlumotlaringizni zaxiralang.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Oʻrnatish boshlanganidan keyin uni bekor qilish imkonsiz.<ph name="END_PARAGRAPH2" /></translation> @@ -2085,7 +2086,6 @@ <translation id="3088052000289932193">Saytda MIDI ishlatilmoqda</translation> <translation id="3088128611727407543">Ilova profili tayyorlanmoqda...</translation> <translation id="3088325635286126843">&Qayta nomlash...</translation> -<translation id="3089064280130434511">Saytlarning ekranlarda oynalar ochishi va joylashtirishini taqiqlash</translation> <translation id="3089137131053189723">Qidiruv tozalandi</translation> <translation id="3090589793601454425">Olinmasin</translation> <translation id="3090819949319990166">Tashqi CRX faylni <ph name="TEMP_CRX_FILE" /> jildiga nusxalab bo‘lmadi.</translation> @@ -3704,6 +3704,7 @@ <translation id="4813136279048157860">Rasmlarim</translation> <translation id="4813512666221746211">Tarmoq xatoligi</translation> <translation id="4814378367953456825">Bu barmoq izini nomlang</translation> +<translation id="481574578487123132">Ulangan qurilmalar</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Batafsil</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 ta bukmark oʻchirib tashlandi}other{{COUNT} ta bukmark oʻchirib tashlandi}}</translation> <translation id="4819607494758673676">Google Assistent bildirishnomalari</translation> @@ -3718,7 +3719,6 @@ <translation id="482952334869563894"><ph name="VENDOR_ID" /> ishlab chiqargan USB qurilmalar</translation> <translation id="4829768588131278040">PIN kod o‘rnatish</translation> <translation id="4830026649400230050">Barcha tegishli yuklanmalar tashkilotning <ph name="WEB_DRIVE" /> hisobiga saqlanadi.</translation> -<translation id="4830121310592638841">Saytlar ekranlarda oynalar ochish va joylashtirishdan oldin ruxsat olsin</translation> <translation id="4830502475412647084">OS yangilanishi o‘rnatilmoqda</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> qurilmasi <ph name="NETWORK_NAME" /> tarmog‘i orqali internetga ulana olmayapti. Boshqa tarmoqni tanlang. <ph name="LEARN_MORE_LINK_START" />Batafsil<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Bosma serverda 1 ta printer topildi</translation> @@ -4419,6 +4419,7 @@ <translation id="5563234215388768762">Qidiring yoki veb-sahifa manzilini kiriting</translation> <translation id="5565735124758917034">Faol</translation> <translation id="5568069709869097550">Kirish amalga oshmadi</translation> +<translation id="5571066253365925590">Bluetooth yoniq</translation> <translation id="5571092938913434726">Global media boshqaruv elementlari</translation> <translation id="5571832155627049070">Profilingizni moslang</translation> <translation id="5572851009514199876">Chrome brauzerini ishga tushiring va hisobingizga kiring. Shundan keyin Chrome bu saytga ruxsat berilganini tekshira oladi.</translation> @@ -4816,6 +4817,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Initernetda ishlashda davom etish uchun administratordan bu ilovani olib tashlashni so‘rang.}other{Initernetda ishlashda davom etish uchun administratordan bu ilovalarni olib tashlashni so‘rang.}}</translation> <translation id="5997337190805127100">Saytga ruxsat haqida batafsil axborot</translation> <translation id="6000758707621254961">“<ph name="SEARCH_TEXT" />” uchun <ph name="RESULT_COUNT" /> ta natija</translation> +<translation id="6002122790816966947">Qurilmalaringiz</translation> <translation id="6002210667729577411">Guruhni yangi oynaga olish</translation> <translation id="6002452033851752583">Parol Google hisobingizdan oʻchirib tashlandi</translation> <translation id="6002458620803359783">Afzal ovozlar</translation> @@ -5623,7 +5625,6 @@ <translation id="6833996806551876956">Privacy Sandbox sinov versiyasi</translation> <translation id="6834652994408928492">Tungi rejim quyosh botishi bilan avtomatik yoqiladi</translation> <translation id="6835762382653651563"><ph name="DEVICE_TYPE" /> qurilmasini yangilash uchun Internetga ulaning.</translation> -<translation id="6838034009068684089">Saytlar ekranlarda oynalar ochish va joylashtirishdan oldin ruxsat olsin (tavsiya etiladi)</translation> <translation id="6839225236531462745">Sertifikatni o‘chirishda xatolik</translation> <translation id="6839916869147598086">Hisobga kirish usuli oʻzgardi</translation> <translation id="6840155290835956714">Yuborishdan oldin so‘ralsin</translation> @@ -6534,7 +6535,6 @@ <translation id="7775694664330414886">Varaq nomsiz guruhga olindi – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">Bu sayt uchun varaqlar yopilmasa, <ph name="ORIGIN" /> sayti <ph name="FOLDERNAME" /> jildidagi barcha fayllarni ocha oladi</translation> <translation id="7776701556330691704">Ovoz namunalari topilmadi</translation> -<translation id="7777284276915203144">Parolingiz Google Parollar menejeriga saqlanishidan oldin qurilmangizda shifrlangan</translation> <translation id="7781335840981796660">Barcha hisoblar va mahalliy ma’lumotlar o‘chib ketadi.</translation> <translation id="7782102568078991263">Google‘dan boshqa takliflar yo‘q</translation> <translation id="7782717250816686129">Doimiy maʼlumotlarni kirish ekranida saqlash va hisob maʼlumotlarini seansga kiritish.</translation> @@ -7185,7 +7185,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" />dan keyin tizimdan chiqasiz</translation> <translation id="8431190899827883166">Vizual teginish</translation> -<translation id="8431730749911729314">Parollarni Google Parollar menejeriga saqlashdan oldin qurilmangizda shifrlang</translation> <translation id="8434480141477525001">NaCl nosozliklarni ko‘rib chiqish porti</translation> <translation id="8435395510592618362">Shaxsingizni <ph name="APP_NAME" /> orqali tasdiqlang</translation> <translation id="8437209419043462667">Ingliz (AQSH)</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index af8462e..d9de1995 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1274,6 +1274,7 @@ trung tâm trợ giúp<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Hỏi khi một trang web muốn truy cập vào các thiết bị Bluetooth (khuyên dùng)</translation> <translation id="2266957463645820432">IPP qua USB (IPPUSB)</translation> +<translation id="2268130516524549846">Đã tắt bluetooth</translation> <translation id="2270450558902169558">Trao đổi dữ liệu với bất kỳ thiết bị nào trong miền <ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Quá trình cài đặt <ph name="BEGIN_BOLD" />sẽ xóa toàn bộ ổ đĩa cứng của bạn<ph name="END_BOLD" />. Hãy đảm bảo dữ liệu của bạn đã được sao lưu.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Quá trình cài đặt không thể hủy được một khi đã bắt đầu.<ph name="END_PARAGRAPH2" /></translation> @@ -2098,7 +2099,6 @@ <translation id="3088052000289932193">Trang web này đang sử dụng MIDI</translation> <translation id="3088128611727407543">Đang chuẩn bị cấu hình cho ứng dụng...</translation> <translation id="3088325635286126843">Đổ&i tên...</translation> -<translation id="3089064280130434511">Không cho các trang web mở và đặt các cửa sổ trên màn hình của bạn</translation> <translation id="3089137131053189723">Đã xóa nội dung tìm kiếm</translation> <translation id="3090589793601454425">Không di chuyển</translation> <translation id="3090819949319990166">Không thể sao chép tệp crx bên ngoài sang <ph name="TEMP_CRX_FILE" />.</translation> @@ -3717,6 +3717,7 @@ <translation id="4813136279048157860">Hình ảnh của tôi</translation> <translation id="4813512666221746211">Lỗi mạng</translation> <translation id="4814378367953456825">Nhập tên cho vân tay này</translation> +<translation id="481574578487123132">Thiết bị đã liên kết</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Thông tin chi tiết</translation> <translation id="4816336393325437908">{COUNT,plural, =1{Đã xóa 1 dấu trang}other{Đã xóa {COUNT} dấu trang}}</translation> <translation id="4819607494758673676">Thông báo của Trợ lý Google</translation> @@ -3731,7 +3732,6 @@ <translation id="482952334869563894">Các thiết bị USB của nhà cung cấp <ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Thiết lập mã PIN</translation> <translation id="4830026649400230050">Hệ thống sẽ chuyển tất cả tệp tải xuống đủ điều kiện đến tài khoản <ph name="WEB_DRIVE" /> của tổ chức bạn.</translation> -<translation id="4830121310592638841">Hỏi khi có một trang web muốn mở và đặt các cửa sổ trên màn hình của bạn</translation> <translation id="4830502475412647084">Đang cài đặt bản cập nhật hệ điều hành</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> của bạn không thể kết nối Internet bằng cách sử dụng <ph name="NETWORK_NAME" />. Vui lòng chọn mạng khác. <ph name="LEARN_MORE_LINK_START" />Tìm hiểu thêm<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Tìm thấy 1 máy in trên máy chủ máy in</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Tìm kiếm trên Google hoặc nhập một URL</translation> <translation id="5565735124758917034">Đang hoạt động</translation> <translation id="5568069709869097550">Không thể đăng nhập</translation> +<translation id="5571066253365925590">Đã bật bluetooth</translation> <translation id="5571092938913434726">Global Media Controls</translation> <translation id="5571832155627049070">Tùy chỉnh hồ sơ của bạn</translation> <translation id="5572851009514199876">Vui lòng khởi động và đăng nhập vào Chrome để Chrome có thể kiểm tra xem bạn có được phép truy cập trang web này không.</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Để đảm bảo có thể tiếp tục duyệt web, hãy yêu cầu quản trị viên xóa ứng dụng này.}other{Để đảm bảo có thể tiếp tục duyệt web, hãy yêu cầu quản trị viên xóa những ứng dụng này.}}</translation> <translation id="5997337190805127100">Tìm hiểu thêm về quyền truy cập vào trang web</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> kết quả cho '<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">Thiết bị của bạn</translation> <translation id="6002210667729577411">Di chuyển nhóm sang cửa sổ mới</translation> <translation id="6002452033851752583">Đã xóa mật khẩu khỏi Tài khoản Google của bạn</translation> <translation id="6002458620803359783">Giọng nói ưu tiên</translation> @@ -5635,7 +5637,6 @@ <translation id="6833996806551876956">Dùng thử hộp cát bảo vệ quyền riêng tư</translation> <translation id="6834652994408928492">Chế độ tối sẽ tự động bật vào buổi tối</translation> <translation id="6835762382653651563">Vui lòng kết nối Internet để cập nhật <ph name="DEVICE_TYPE" /> của bạn.</translation> -<translation id="6838034009068684089">Hỏi khi có một trang web muốn mở và đặt các cửa sổ trên màn hình của bạn (khuyên dùng)</translation> <translation id="6839225236531462745">Lỗi xóa chứng chỉ</translation> <translation id="6839916869147598086">Quy trình đăng nhập đã thay đổi</translation> <translation id="6840155290835956714">Hỏi trước khi gửi</translation> @@ -6546,7 +6547,6 @@ <translation id="7775694664330414886">Đã di chuyển thẻ sang nhóm chưa có tên – <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340"><ph name="ORIGIN" /> có thể xem các tệp trong <ph name="FOLDERNAME" /> cho đến khi bạn đóng tất cả các thẻ cho trang web này</translation> <translation id="7776701556330691704">Không tìm thấy giọng nói nào</translation> -<translation id="7777284276915203144">Mật khẩu của bạn được mã hoá trên thiết bị trước khi lưu vào Trình quản lý mật khẩu của Google</translation> <translation id="7781335840981796660">Tất cả tài khoản người dùng và dữ liệu trên máy đều sẽ bị xóa.</translation> <translation id="7782102568078991263">Không có đề xuất nào khác từ Google</translation> <translation id="7782717250816686129">Lưu trữ dữ liệu liên tục trên màn hình đăng nhập và đưa thông tin xác thực vào phiên.</translation> @@ -7199,7 +7199,6 @@ <translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Bạn sẽ bị đăng xuất sau <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Hiển thị điểm khi nhấn</translation> -<translation id="8431730749911729314">Mã hoá mật khẩu trên thiết bị của bạn trước khi lưu vào Trình quản lý mật khẩu của Google</translation> <translation id="8434480141477525001">Cổng gỡ lỗi NaCl</translation> <translation id="8435395510592618362">Xác minh danh tính của bạn bằng <ph name="APP_NAME" /></translation> <translation id="8437209419043462667">Hoa Kỳ</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 6c32873..d97b81e 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -1256,6 +1256,7 @@ <translation id="2263679799334060788">非常感谢您的反馈!这对我们改进 Google Cast 很有帮助。如需获取与排查投射问题有关的帮助,请参阅<ph name="BEGIN_LINK" />帮助中心<ph name="END_LINK" />。</translation> <translation id="22665427234727190">在网站想访问蓝牙设备时询问您(推荐)</translation> <translation id="2266957463645820432">USB 型 IPP (IPPUSB)</translation> +<translation id="2268130516524549846">蓝牙已停用</translation> <translation id="2270450558902169558">与网域 <ph name="DOMAIN" /> 中的任何设备交换数据</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />安装流程<ph name="BEGIN_BOLD" />会清除您的整个硬盘中的数据<ph name="END_BOLD" />。请确保已备份您的数据。<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />安装流程一旦开始就无法取消。<ph name="END_PARAGRAPH2" /></translation> @@ -2079,7 +2080,6 @@ <translation id="3088052000289932193">此网站正在使用 MIDI</translation> <translation id="3088128611727407543">正在准备应用配置文件…</translation> <translation id="3088325635286126843">重命名(&R)...</translation> -<translation id="3089064280130434511">禁止网站在您的屏幕上打开和放置窗口</translation> <translation id="3089137131053189723">搜索记录已清除</translation> <translation id="3090589793601454425">不移动</translation> <translation id="3090819949319990166">无法将外部 crx 文件复制到 <ph name="TEMP_CRX_FILE" />。</translation> @@ -3207,6 +3207,7 @@ <translation id="4275830172053184480">重启您的设备</translation> <translation id="4278390842282768270">允许</translation> <translation id="4279129444466079448">您最多可以在此设备上安装 <ph name="PROFILE_LIMIT" /> 个 SIM 卡配置文件。若要再添加一个配置文件,请先移除一个现有的配置文件。</translation> +<translation id="4280325816108262082">已关闭或未被使用时,设备会自动断开连接</translation> <translation id="4281844954008187215">服务条款</translation> <translation id="4282196459431406533">Smart Lock 已开启</translation> <translation id="4284755288573763878">关闭“增强型安全浏览”功能?</translation> @@ -3695,6 +3696,7 @@ <translation id="4813136279048157860">我的图片</translation> <translation id="4813512666221746211">网络错误</translation> <translation id="4814378367953456825">请为此指纹输入一个名称</translation> +<translation id="481574578487123132">已关联的设备</translation> <translation id="4816097470512964351">设备名称为“<ph name="DEVICE" />”,详细信息</translation> <translation id="4816336393325437908">{COUNT,plural, =1{已删除 1 个书签}other{已删除 {COUNT} 个书签}}</translation> <translation id="4819607494758673676">Google 助理通知</translation> @@ -3709,7 +3711,6 @@ <translation id="482952334869563894">由供应商 <ph name="VENDOR_ID" /> 提供的 USB 设备</translation> <translation id="4829768588131278040">设置 PIN 码</translation> <translation id="4830026649400230050">所有符合条件的下载内容都会被发送到贵单位的“<ph name="WEB_DRIVE" />”帐号。</translation> -<translation id="4830121310592638841">在网站想在您的屏幕上打开和放置窗口时询问您</translation> <translation id="4830502475412647084">正在安装操作系统更新</translation> <translation id="4830573902900904548">您的<ph name="DEVICE_TYPE" />无法通过<ph name="NETWORK_NAME" />连接到互联网,请选择其他网络。<ph name="LEARN_MORE_LINK_START" />了解详情<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">通过打印服务器找到了 1 台打印机</translation> @@ -4326,6 +4327,7 @@ <translation id="5490721031479690399">断开蓝牙设备</translation> <translation id="5490798133083738649">允许 Linux 使用您的麦克风</translation> <translation id="549211519852037402">米黄色和白色</translation> +<translation id="5492637351392383067">设备上加密</translation> <translation id="5493792505296048976">已开启屏幕</translation> <translation id="5494016731375030300">最近关闭的标签页</translation> <translation id="5494362494988149300">完成后打开(&D)</translation> @@ -4409,6 +4411,7 @@ <translation id="5563234215388768762">在 Google 上搜索,或者输入一个网址</translation> <translation id="5565735124758917034">主动</translation> <translation id="5568069709869097550">无法登录</translation> +<translation id="5571066253365925590">蓝牙已启用</translation> <translation id="5571092938913434726">全局媒体控件</translation> <translation id="5571832155627049070">自定义您的个人资料</translation> <translation id="5572851009514199876">请启动并登录 Chrome,以便 Chrome 能够检查您是否可以访问此网站。</translation> @@ -4806,6 +4809,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{为确保您能够继续浏览网页,请让您的管理员卸载这款应用。}other{为确保您能够继续浏览网页,请让您的管理员卸载这些应用。}}</translation> <translation id="5997337190805127100">详细了解网站访问权限</translation> <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> 个与“<ph name="SEARCH_TEXT" />”相符的搜索结果</translation> +<translation id="6002122790816966947">您的设备</translation> <translation id="6002210667729577411">将标签页组移至新窗口</translation> <translation id="6002452033851752583">密码已从您的 Google 帐号中删除</translation> <translation id="6002458620803359783">首选语音</translation> @@ -5612,7 +5616,6 @@ <translation id="6833996806551876956">隐私沙盒试用</translation> <translation id="6834652994408928492">深色模式将在日落时自动开启</translation> <translation id="6835762382653651563">请连接到互联网,以便更新您的<ph name="DEVICE_TYPE" />。</translation> -<translation id="6838034009068684089">在网站想在您的屏幕上打开和放置窗口时询问您(推荐)</translation> <translation id="6839225236531462745">证书删除错误</translation> <translation id="6839916869147598086">登录发生变化</translation> <translation id="6840155290835956714">发送前先询问</translation> @@ -7963,6 +7966,7 @@ <translation id="947667444780368238"><ph name="ORIGIN" /> 无法打开此文件夹内的文件,因为此文件夹含有系统文件</translation> <translation id="950307215746360464">设置指南</translation> <translation id="951991426597076286">拒绝</translation> +<translation id="952471655966876828">已开启且正被使用时,设备会自动连接</translation> <translation id="953434574221655299">允许以下网站了解您何时在主动使用设备</translation> <translation id="956500788634395331">系统会保护您免受可能有害的扩展程序的威胁</translation> <translation id="957960681186851048">此网站试图自动下载多个文件</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index f1716d7e..3746862 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -1273,6 +1273,7 @@ 說明中心<ph name="END_LINK" />的說明。</translation> <translation id="22665427234727190">在網站要求存取藍牙裝置時詢問您 (建議)</translation> <translation id="2266957463645820432">透過 USB 的 IPP (IPPUSB)</translation> +<translation id="2268130516524549846">藍牙已停用</translation> <translation id="2270450558902169558">與網域 <ph name="DOMAIN" /> 中的任何裝置交換數據</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />安裝程序<ph name="BEGIN_BOLD" />會清除整個硬碟的資料<ph name="END_BOLD" />。請確保已將資料備份。<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />安裝程序開始後就無法取消。<ph name="END_PARAGRAPH2" /></translation> @@ -2097,7 +2098,6 @@ <translation id="3088052000289932193">網站正在使用 MIDI 裝置</translation> <translation id="3088128611727407543">正在準備應用程式設定檔…</translation> <translation id="3088325635286126843">重新命名(&R)…</translation> -<translation id="3089064280130434511">禁止網站在您的螢幕上開啟並放置視窗</translation> <translation id="3089137131053189723">已清除搜尋</translation> <translation id="3090589793601454425">不要移動</translation> <translation id="3090819949319990166">無法將外部 crx 檔案複製到 <ph name="TEMP_CRX_FILE" />。</translation> @@ -3226,7 +3226,7 @@ <translation id="4275830172053184480">重新啟動裝置</translation> <translation id="4278390842282768270">已允許</translation> <translation id="4279129444466079448">您在此裝置上最多可安裝 <ph name="PROFILE_LIMIT" /> 個 eSIM 卡設定檔。如要新增其他設定檔,請先移除現有的設定檔。</translation> -<translation id="4280325816108262082">裝置關閉或處於閒置狀態時,會自動中斷連線</translation> +<translation id="4280325816108262082">當裝置關閉或處於閒置狀態時,裝置將會自動中斷連線</translation> <translation id="4281844954008187215">服務條款</translation> <translation id="4282196459431406533">Smart Lock 已啟用</translation> <translation id="4284755288573763878">要關閉「強化安全瀏覽」功能嗎?</translation> @@ -3716,6 +3716,7 @@ <translation id="4813136279048157860">我的圖片</translation> <translation id="4813512666221746211">網絡錯誤</translation> <translation id="4814378367953456825">請輸入此指紋的名稱</translation> +<translation id="481574578487123132">連結的裝置</translation> <translation id="4816097470512964351"><ph name="DEVICE" />,詳情</translation> <translation id="4816336393325437908">{COUNT,plural, =1{已刪除 1 個書籤}other{已刪除 {COUNT} 個書籤}}</translation> <translation id="4819607494758673676">「Google 助理」通知</translation> @@ -3730,7 +3731,6 @@ <translation id="482952334869563894">來自供應商 <ph name="VENDOR_ID" /> 的 USB 裝置</translation> <translation id="4829768588131278040">設定 PIN</translation> <translation id="4830026649400230050">所有符合資格的下載項目都會導向至您機構的「<ph name="WEB_DRIVE" />」帳戶。</translation> -<translation id="4830121310592638841">在網站要求在您的螢幕上開啟並放置視窗時詢問您</translation> <translation id="4830502475412647084">正在安裝作業系統更新</translation> <translation id="4830573902900904548"><ph name="DEVICE_TYPE" /> 無法透過 <ph name="NETWORK_NAME" /> 連線至互聯網,請選擇其他網絡。<ph name="LEARN_MORE_LINK_START" />瞭解詳情<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">在列印伺服器中找到 1 部打印機</translation> @@ -4348,7 +4348,7 @@ <translation id="5490721031479690399">解除連結藍牙裝置</translation> <translation id="5490798133083738649">允許 Linux 存取您的麥克風</translation> <translation id="549211519852037402">米色和白色</translation> -<translation id="5492637351392383067">裝置端加密</translation> +<translation id="5492637351392383067">在裝置上加密</translation> <translation id="5493792505296048976">螢幕已開啟</translation> <translation id="5494016731375030300">最近關閉的分頁</translation> <translation id="5494362494988149300">下載完成時自動開啟檔案(&D)</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">搜尋 Google 或輸入網址</translation> <translation id="5565735124758917034">啟用</translation> <translation id="5568069709869097550">無法登入</translation> +<translation id="5571066253365925590">藍牙已啟用</translation> <translation id="5571092938913434726">全域媒體控制項</translation> <translation id="5571832155627049070">自訂你的設定檔</translation> <translation id="5572851009514199876">請啟動 Chrome 並登入帳戶,讓 Chrome 確認您是否擁有此網站的存取權。</translation> @@ -4829,6 +4830,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{為確保您可以繼續瀏覽網絡,請要求您的管理員移除此應用程式。}other{為確保您可以繼續瀏覽網絡,請要求您的管理員移除這些應用程式。}}</translation> <translation id="5997337190805127100">瞭解詳情網站存取權</translation> <translation id="6000758707621254961">有 <ph name="RESULT_COUNT" /> 個同「<ph name="SEARCH_TEXT" />」相關嘅搜尋結果</translation> +<translation id="6002122790816966947">您的裝置</translation> <translation id="6002210667729577411">將群組移至新視窗</translation> <translation id="6002452033851752583">密碼已從您的 Google 帳戶中刪除</translation> <translation id="6002458620803359783">偏好的聲音</translation> @@ -5635,7 +5637,6 @@ <translation id="6833996806551876956">私隱沙箱試用</translation> <translation id="6834652994408928492">「暗光模式」將會在日落時自動開啟</translation> <translation id="6835762382653651563">請連接互聯網以更新 <ph name="DEVICE_TYPE" />。</translation> -<translation id="6838034009068684089">在網站要求在您的螢幕上開啟並放置視窗時詢問您 (建議)</translation> <translation id="6839225236531462745">憑證刪除錯誤</translation> <translation id="6839916869147598086">登入方式已變更</translation> <translation id="6840155290835956714">傳送前先詢問</translation> @@ -6546,7 +6547,6 @@ <translation id="7775694664330414886">分頁移咗去包含「<ph name="GROUP_CONTENTS" />」嘅未命名群組</translation> <translation id="7776156998370251340">在您關閉此網站的所有分頁前,<ph name="ORIGIN" /> 都能查看「<ph name="FOLDERNAME" />」中的檔案</translation> <translation id="7776701556330691704">找不到語音</translation> -<translation id="7777284276915203144">你的密碼在儲存至 Google 密碼管理員之前,已在裝置上加密</translation> <translation id="7781335840981796660">系統將移除所有使用者帳戶和本機數據。</translation> <translation id="7782102568078991263">沒有來自 Google 的建議</translation> <translation id="7782717250816686129">儲存登入畫面中的永久資料,並在工作階段中插入憑證。</translation> @@ -7199,7 +7199,6 @@ <translation id="8428634594422941299">知道了</translation> <translation id="84297032718407999">您將於 <ph name="LOGOUT_TIME_LEFT" />後登出</translation> <translation id="8431190899827883166">顯示輕按選項</translation> -<translation id="8431730749911729314">系統會先在裝置上將你的密碼加密,再儲存至 Google 密碼管理員</translation> <translation id="8434480141477525001">NaCl 偵錯連接埠</translation> <translation id="8435395510592618362">透過 <ph name="APP_NAME" /> 驗證身分</translation> <translation id="8437209419043462667">美式鍵盤</translation> @@ -7989,7 +7988,7 @@ <translation id="947667444780368238">由於資料夾中包含系統檔案,<ph name="ORIGIN" /> 無法開啟此資料夾中的檔案</translation> <translation id="950307215746360464">設定指南</translation> <translation id="951991426597076286">拒絕</translation> -<translation id="952471655966876828">裝置開啟或處於使用狀態時,會自動連線</translation> +<translation id="952471655966876828">當裝置開啟,而且正在使用時,裝置將會自動連線</translation> <translation id="953434574221655299">允許偵測您使用裝置的時間</translation> <translation id="956500788634395331">保護您免受可能有害的擴充程式影響</translation> <translation id="957960681186851048">此網站曾嘗試自動下載多個檔案</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 0391c8be..62d18b3 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1259,6 +1259,7 @@ <translation id="2263679799334060788">你的寶貴意見可協助我們讓 Google Cast 更臻完美。如需排解投放問題的相關說明,請參閱<ph name="BEGIN_LINK" />說明中心<ph name="END_LINK" />的文章。</translation> <translation id="22665427234727190">網站必須先詢問你,才能存取藍牙裝置 (建議)</translation> <translation id="2266957463645820432">USB 型 IPP (IPPUSB)</translation> +<translation id="2268130516524549846">藍牙已停用</translation> <translation id="2270450558902169558">與 <ph name="DOMAIN" /> 網域中的任何裝置交換資料</translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />安裝程序<ph name="BEGIN_BOLD" />會清除整個硬碟的資料<ph name="END_BOLD" />。請確認資料已備份。<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />安裝程序開始後就無法取消。<ph name="END_PARAGRAPH2" /></translation> @@ -2083,7 +2084,6 @@ <translation id="3088052000289932193">網站正在使用 MIDI 裝置</translation> <translation id="3088128611727407543">正在準備應用程式設定檔...</translation> <translation id="3088325635286126843">重新命名(&R)...</translation> -<translation id="3089064280130434511">禁止網站在你的畫面中開啟與放置視窗</translation> <translation id="3089137131053189723">已清除搜尋內容</translation> <translation id="3090589793601454425">不要移動</translation> <translation id="3090819949319990166">無法將外部 crx 檔案複製到 <ph name="TEMP_CRX_FILE" />。</translation> @@ -3700,6 +3700,7 @@ <translation id="4813136279048157860">我的圖片</translation> <translation id="4813512666221746211">網路錯誤</translation> <translation id="4814378367953456825">請輸入這個指紋的名稱</translation> +<translation id="481574578487123132">連結的裝置</translation> <translation id="4816097470512964351"><ph name="DEVICE" />,詳細資料</translation> <translation id="4816336393325437908">{COUNT,plural, =1{已刪除 1 個書籤}other{已刪除 {COUNT} 個書籤}}</translation> <translation id="4819607494758673676">Google 助理通知</translation> @@ -3714,7 +3715,6 @@ <translation id="482952334869563894">來自供應商 <ph name="VENDOR_ID" /> 的 USB 裝置</translation> <translation id="4829768588131278040">設定 PIN 碼</translation> <translation id="4830026649400230050">所有符合資格的下載內容都會轉送至貴機構的「<ph name="WEB_DRIVE" />」帳戶。</translation> -<translation id="4830121310592638841">網站必須先詢問你,才能在你的畫面中開啟與放置視窗</translation> <translation id="4830502475412647084">正在安裝作業系統更新</translation> <translation id="4830573902900904548">您的 <ph name="DEVICE_TYPE" /> 無法透過 <ph name="NETWORK_NAME" /> 連線至網際網路,請選擇其他網路。<ph name="LEARN_MORE_LINK_START" />瞭解詳情<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">在列印伺服器上找到 1 台印表機</translation> @@ -4415,6 +4415,7 @@ <translation id="5563234215388768762">搜尋 Google 或輸入網址</translation> <translation id="5565735124758917034">管理中</translation> <translation id="5568069709869097550">無法登入</translation> +<translation id="5571066253365925590">藍牙已啟用</translation> <translation id="5571092938913434726">全域媒體控制項</translation> <translation id="5571832155627049070">自訂你的設定檔</translation> <translation id="5572851009514199876">請啟動 Chrome 並登入帳戶,Chrome 將確認你是否可存取這個網站。</translation> @@ -4812,6 +4813,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{為確保你可以持續瀏覽網路,請要求你的管理員移除這個應用程式。}other{為確保你可以持續瀏覽網路,請要求你的管理員移除這些應用程式。}}</translation> <translation id="5997337190805127100">進一步瞭解網站存取權</translation> <translation id="6000758707621254961">有 <ph name="RESULT_COUNT" /> 個與「<ph name="SEARCH_TEXT" />」相符的搜尋結果</translation> +<translation id="6002122790816966947">你的裝置</translation> <translation id="6002210667729577411">將群組移到新視窗</translation> <translation id="6002452033851752583">已從你的 Google 帳戶中刪除密碼</translation> <translation id="6002458620803359783">聲音偏好</translation> @@ -5618,7 +5620,6 @@ <translation id="6833996806551876956">Privacy Sandbox 試用期</translation> <translation id="6834652994408928492">深色模式會在日落時自動開啟</translation> <translation id="6835762382653651563">請連線至網際網路,以更新您的 <ph name="DEVICE_TYPE" />。</translation> -<translation id="6838034009068684089">網站必須先詢問你,才能在你的畫面中開啟與放置視窗 (建議)</translation> <translation id="6839225236531462745">憑證刪除錯誤</translation> <translation id="6839916869147598086">登入方式已變更</translation> <translation id="6840155290835956714">傳送前詢問我</translation> @@ -6529,7 +6530,6 @@ <translation id="7775694664330414886">分頁已移至包含「<ph name="GROUP_CONTENTS" />」的未命名群組</translation> <translation id="7776156998370251340">在你關閉這個網站的所有分頁前,<ph name="ORIGIN" /> 都可以讀取「<ph name="FOLDERNAME" />」中的檔案</translation> <translation id="7776701556330691704">找不到語音</translation> -<translation id="7777284276915203144">你的密碼在儲存至 Google 密碼管理員之前,已在裝置上加密</translation> <translation id="7781335840981796660">系統將移除所有使用者帳戶和本機資料。</translation> <translation id="7782102568078991263">沒有更多來自 Google 的建議</translation> <translation id="7782717250816686129">儲存登入畫面中的永久資料,並在工作階段中置入憑證。</translation> @@ -7182,7 +7182,6 @@ <translation id="8428634594422941299">我知道了</translation> <translation id="84297032718407999">你將於 <ph name="LOGOUT_TIME_LEFT" />後登出</translation> <translation id="8431190899827883166">顯示觸控回應</translation> -<translation id="8431730749911729314">系統會先在裝置上將你的密碼加密,再儲存至 Google 密碼管理員</translation> <translation id="8434480141477525001">NaCl 偵錯連接埠</translation> <translation id="8435395510592618362">向 <ph name="APP_NAME" /> 驗證你的身分</translation> <translation id="8437209419043462667">美式配置</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index 3f80bb7..19db113 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1273,6 +1273,7 @@ isikhungo sosizo<ph name="END_LINK" />.</translation> <translation id="22665427234727190">Buza uma amasayithi efuna ukufinyelela kumadivayisi we-Bluetooth (kuyanconywa)</translation> <translation id="2266957463645820432">I-IPP ngaphezulu kwe-USB (IPPUSB)</translation> +<translation id="2268130516524549846">I-Bluetooth ikhutshaziwe</translation> <translation id="2270450558902169558">Shintshisana ngedatha nganoma iyiphi idivayisi kusizinda esingu-<ph name="DOMAIN" /></translation> <translation id="2270612886833477697"><ph name="BEGIN_PARAGRAPH1" />Okufakwayo <ph name="BEGIN_BOLD" />kuzokusula konke okuphathekayo kwakho<ph name="END_BOLD" />. Qiniseka ukuthi idatha yakho yenziwe isipele.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Lapho okufakwayo sekuqalile akukwazi ukukhanselwa.<ph name="END_PARAGRAPH2" /></translation> @@ -2097,7 +2098,6 @@ <translation id="3088052000289932193">Isayithi lisebenzisa i-MIDI</translation> <translation id="3088128611727407543">Ilungiselela iphrofayela yohlelo lokusebenza...</translation> <translation id="3088325635286126843">&Qamba kabusha...</translation> -<translation id="3089064280130434511">Vimbela amasayithi kusukela ekuvuleni nasekubekeni amawindi kuzikrini zakho</translation> <translation id="3089137131053189723">Usesho lusuliwe</translation> <translation id="3090589793601454425">Ungahambisi</translation> <translation id="3090819949319990166">Ayikwazi ukukopishela ifayela le-crx ku-<ph name="TEMP_CRX_FILE" />.</translation> @@ -3715,6 +3715,7 @@ <translation id="4813136279048157860">Izithombe zami</translation> <translation id="4813512666221746211">Iphutha lenethiwekhi</translation> <translation id="4814378367953456825">Faka igama lalesi sigxivizo somunwe</translation> +<translation id="481574578487123132">Amadivayisi alinkiwe</translation> <translation id="4816097470512964351"><ph name="DEVICE" />, Imininingwane</translation> <translation id="4816336393325437908">{COUNT,plural, =1{ibhukhimakhi e-1 isusiwe}one{amabhukhimakhi angu-{COUNT} asusiwe}other{amabhukhimakhi angu-{COUNT} asusiwe}}</translation> <translation id="4819607494758673676">Izaziso zomsizi we-Google</translation> @@ -3729,7 +3730,6 @@ <translation id="482952334869563894">Amadivayisi e-USB avela kumdayisi we-<ph name="VENDOR_ID" /></translation> <translation id="4829768588131278040">Setha iphinikhodi</translation> <translation id="4830026649400230050">Konke okudawunilodiwe okufanelekile kufakwa ku-akhawunti ye-<ph name="WEB_DRIVE" /> yenhlangano yakho.</translation> -<translation id="4830121310592638841">Buza uma isayithi lifuna ukuvula liphinde libeke amawindi kuzikrini zakho</translation> <translation id="4830502475412647084">Ifaka isibuyekezo se-OS</translation> <translation id="4830573902900904548">I-<ph name="DEVICE_TYPE" /> yakho ayikwazi ukuxhuma ku-inthanethi isebenzisa i-<ph name="NETWORK_NAME" />. Sicela ukhethe enye inethiwekhi. <ph name="LEARN_MORE_LINK_START" />Funda kabanzi<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Kutholakele iphrinti engu-1 kusuka kuseva yokuphrinta</translation> @@ -4432,6 +4432,7 @@ <translation id="5563234215388768762">Sesha i-Google noma thayipha i-URL</translation> <translation id="5565735124758917034">Kuyasebenza</translation> <translation id="5568069709869097550">Ayikwazi ukungena ngemvume</translation> +<translation id="5571066253365925590">I-Bluetooth inikwe amandla</translation> <translation id="5571092938913434726">Izilawuli zemidiya zomhlaba jikelele</translation> <translation id="5571832155627049070">Yenza iphrofayela lakho ngokwezifiso</translation> <translation id="5572851009514199876">Sicela uqalise futhi ungene ngemvume ku-Chrome ukuze i-Chrome ikwazi ukuhlola ukuthi ingabe uvunyelwe ukufinyelela leli sayithi.</translation> @@ -4830,6 +4831,7 @@ <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Ukuze uqinisekise ukuthi ungaqhubeka uphequlule iwebhu, cela umlawuli wakho ukuthi asuse lolu hlelo lokusebenza.}one{Ukuze uqinisekise ukuthi ungaqhubeka uphequlule iwebhu, cela umlawuli wakho ukuthi asuse lezi zinhlelo zokusebenza.}other{Ukuze uqinisekise ukuthi ungaqhubeka uphequlule iwebhu, cela umlawuli wakho ukuthi asuse lezi zinhlelo zokusebenza.}}</translation> <translation id="5997337190805127100">Funda kabanzi ngokufinyelela kwesayithi</translation> <translation id="6000758707621254961">imiphumela engu-<ph name="RESULT_COUNT" /> ye-'<ph name="SEARCH_TEXT" />'</translation> +<translation id="6002122790816966947">Amadivayisi akho</translation> <translation id="6002210667729577411">Hambisa iqembu ewindini elisha</translation> <translation id="6002452033851752583">Iphasiwedi isusiwe ku-akhawunti yakho ye-Google</translation> <translation id="6002458620803359783">Amazwi ancanyelwayo</translation> @@ -5636,7 +5638,6 @@ <translation id="6833996806551876956">Ukuzama kwe-Sandbox Yobumfihlo</translation> <translation id="6834652994408928492">Imodi emnyama izovula ngokuzenzekelayo uma kushona ilanga</translation> <translation id="6835762382653651563">Sicela uxhume ku-inthanethi ukuze ubuyekeze i-<ph name="DEVICE_TYPE" /> yakho.</translation> -<translation id="6838034009068684089">Buza uma isayithi lifuna ukuvula liphinde libeke amawindi kuzikrini zakho (kuyanconywa)</translation> <translation id="6839225236531462745">Iphutha lokususa isitifiketi</translation> <translation id="6839916869147598086">Ukungena ngemvume kushintshile</translation> <translation id="6840155290835956714">Buza ngaphambi kokuthumela</translation> @@ -6547,7 +6548,6 @@ <translation id="7775694664330414886">Ithebhu lihanjiswe eqenjini elingaqanjwanga - <ph name="GROUP_CONTENTS" /></translation> <translation id="7776156998370251340">I-<ph name="ORIGIN" /> izokwazi ukubuka amafayela ku-<ph name="FOLDERNAME" /> kuze kube yilapho uvala wonke amathebhu wale sayithi</translation> <translation id="7776701556330691704">Awekho amezwi atholakele</translation> -<translation id="7777284276915203144">Amaphasiwedi akho abethelwa kudivayisi yakho ngaphambi kokuba alondolozwe ku-Google Password Manager</translation> <translation id="7781335840981796660">Wonke ama-akhawunti womsebenzisi nedatha yasendaweni kuzosuswa.</translation> <translation id="7782102568078991263">Azisekho iziphakamiso ezisuka ku-Google</translation> <translation id="7782717250816686129">Gcina idatha eqhubekayo kusikrini sokungena ngemvume uphinde ufake ukuqinisekisa kuseshini.</translation> @@ -7199,7 +7199,6 @@ <translation id="8428634594422941299">Ngiyezwa</translation> <translation id="84297032718407999">Uzokhishwa ku-<ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Bonisa amathebhu</translation> -<translation id="8431730749911729314">Bethela amaphasiwedi kudivayisi yakho ngaphambi kokuba alondolozwe ku-Google Password Manager</translation> <translation id="8434480141477525001">Imbobo yokulungisa iphutha ye-NaCl</translation> <translation id="8435395510592618362">Qinisekisa ubunikazi bakho nge-<ph name="APP_NAME" /></translation> <translation id="8437209419043462667">I-US</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index e5258d1f..f08e358 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1006,8 +1006,6 @@ "page_load_metrics/observers/portal_page_load_metrics_observer.h", "page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc", "page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h", - "page_load_metrics/observers/previews_ukm_observer.cc", - "page_load_metrics/observers/previews_ukm_observer.h", "page_load_metrics/observers/protocol_page_load_metrics_observer.cc", "page_load_metrics/observers/protocol_page_load_metrics_observer.h", "page_load_metrics/observers/scheme_page_load_metrics_observer.cc", @@ -6320,22 +6318,6 @@ "printing/print_dialog_cloud_win.h", ] } - - if (is_mac) { - sources += [ "service_process/service_process_control_mac.mm" ] - } - - if (!is_chromeos_ash) { - sources += [ - "printing/cloud_print/cloud_print_proxy_service.cc", - "printing/cloud_print/cloud_print_proxy_service.h", - "printing/cloud_print/cloud_print_proxy_service_factory.cc", - "printing/cloud_print/cloud_print_proxy_service_factory.h", - "service_process/service_process_control.cc", - "service_process/service_process_control.h", - ] - public_deps += [ "//chrome/common:service_process_mojom" ] - } } else { # Partial - only printing support. sources += [
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 47b70f1..fad4570 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -5617,10 +5617,6 @@ #endif #if defined(OS_ANDROID) - {"mobile-identity-consistency-fre", - flag_descriptions::kMobileIdentityConsistencyFREName, - flag_descriptions::kMobileIdentityConsistencyFREDescription, kOsAndroid, - FEATURE_VALUE_TYPE(signin::kMobileIdentityConsistencyFRE)}, {"force-startup-signin-promo", flag_descriptions::kForceStartupSigninPromoName, flag_descriptions::kForceStartupSigninPromoDescription, kOsAndroid, @@ -7001,6 +6997,10 @@ FEATURE_VALUE_TYPE(media::kVaapiVp9kSVCHWEncoding)}, #endif // defined(ARCH_CPU_X86_FAMILY) && BUILDFLAG(IS_CHROMEOS_ASH) + {"enable-global-vaapi-lock", flag_descriptions::kGlobalVaapiLockName, + flag_descriptions::kGlobalVaapiLockDescription, kOsCrOS | kOsLinux, + FEATURE_VALUE_TYPE(media::kGlobalVaapiLock)}, + {"enable-vp9-kSVC-decode-acceleration", flag_descriptions::kVp9kSVCHWDecodingName, flag_descriptions::kVp9kSVCHWDecodingDescription, kOsAll,
diff --git a/chrome/browser/android/examples/custom_tabs_client/BUILD.gn b/chrome/browser/android/examples/custom_tabs_client/BUILD.gn index 44f344e5..009a5a3 100644 --- a/chrome/browser/android/examples/custom_tabs_client/BUILD.gn +++ b/chrome/browser/android/examples/custom_tabs_client/BUILD.gn
@@ -6,10 +6,14 @@ android_resources("chrome_tabs_client_example_apk_resources") { sources = [ + "src/res/anim/slide_in_bottom.xml", "src/res/anim/slide_in_left.xml", "src/res/anim/slide_in_right.xml", + "src/res/anim/slide_in_up.xml", + "src/res/anim/slide_out_bottom.xml", "src/res/anim/slide_out_left.xml", "src/res/anim/slide_out_right.xml", + "src/res/anim/slide_out_up.xml", "src/res/drawable-hdpi/cover.jpg", "src/res/drawable-hdpi/ic_arrow_back.png", "src/res/drawable-hdpi/ic_launcher.png",
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/MainActivity.java b/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/MainActivity.java index 61e4bc4..14e9a8fd 100644 --- a/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/MainActivity.java +++ b/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/MainActivity.java
@@ -64,6 +64,7 @@ private Button mMayLaunchButton; private Button mLaunchButton; private Button mLaunchIncognitoButton; + private Button mLaunchPartialHeightCctButton; private MediaPlayer mMediaPlayer; /** @@ -110,6 +111,7 @@ mMayLaunchButton = (Button) findViewById(R.id.may_launch_button); mLaunchButton = (Button) findViewById(R.id.launch_button); mLaunchIncognitoButton = findViewById(R.id.launch_incognito_button); + mLaunchPartialHeightCctButton = findViewById(R.id.launch_pcct_button); Spinner spinner = (Spinner) findViewById(R.id.spinner); mEditText.requestFocus(); mConnectButton.setOnClickListener(this); @@ -117,6 +119,7 @@ mMayLaunchButton.setOnClickListener(this); mLaunchButton.setOnClickListener(this); mLaunchIncognitoButton.setOnClickListener(this); + mLaunchPartialHeightCctButton.setOnClickListener(this); mMediaPlayer = MediaPlayer.create(this, R.raw.amazing_grace); findViewById(R.id.register_twa_service).setOnClickListener(this); @@ -246,13 +249,20 @@ customTabsIntent.intent.putExtra( "com.google.android.apps.chrome.EXTRA_OPEN_NEW_INCOGNITO_TAB", viewId == R.id.launch_incognito_button); - if (session != null) { - CustomTabsHelper.addKeepAliveExtra(this, customTabsIntent.intent); - } else { - if (!TextUtils.isEmpty(mPackageNameToBind)) { - customTabsIntent.intent.setPackage(mPackageNameToBind); - } - } + configSessionConnection(session, customTabsIntent); + customTabsIntent.launchUrl(this, Uri.parse(url)); + } else if (viewId == R.id.launch_pcct_button) { + CustomTabsSession session = getSession(); + CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(session); + builder.setToolbarColor(Color.parseColor(TOOLBAR_COLOR)).setShowTitle(true); + prepareMenuItems(builder); + prepareActionButton(builder); + builder.setStartAnimations(this, R.anim.slide_in_up, R.anim.slide_out_bottom); + builder.setExitAnimations(this, R.anim.slide_in_bottom, R.anim.slide_out_up); + CustomTabsIntent customTabsIntent = builder.build(); + configSessionConnection(session, customTabsIntent); + customTabsIntent.intent.putExtra( + "androidx.browser.customtabs.extra.INITIAL_ACTIVITY_HEIGHT_IN_PIXEL", 500); customTabsIntent.launchUrl(this, Uri.parse(url)); } } @@ -285,6 +295,17 @@ BottomBarManager.getClickableIDs(), BottomBarManager.getOnClickPendingIntent(this)); } + private void configSessionConnection( + CustomTabsSession session, CustomTabsIntent customTabsIntent) { + if (session != null) { + CustomTabsHelper.addKeepAliveExtra(this, customTabsIntent.intent); + } else { + if (!TextUtils.isEmpty(mPackageNameToBind)) { + customTabsIntent.intent.setPackage(mPackageNameToBind); + } + } + } + @Override public void onServiceConnected(CustomTabsClient client) { mClient = client;
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_in_bottom.xml b/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_in_bottom.xml new file mode 100644 index 0000000..c9e4d195 --- /dev/null +++ b/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_in_bottom.xml
@@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2022 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<set xmlns:android="http://schemas.android.com/apk/res/android"> + <translate android:fromYDelta="-100%p" android:toYDelta="0" + android:duration="@android:integer/config_mediumAnimTime"/> +</set>
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_in_up.xml b/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_in_up.xml new file mode 100644 index 0000000..138990a2 --- /dev/null +++ b/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_in_up.xml
@@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2022 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<set xmlns:android="http://schemas.android.com/apk/res/android"> + <translate android:fromYDelta="100%p" android:toYDelta="0" + android:duration="@android:integer/config_mediumAnimTime"/> +</set>
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_out_bottom.xml b/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_out_bottom.xml new file mode 100644 index 0000000..01a0fd02 --- /dev/null +++ b/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_out_bottom.xml
@@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2022 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<set xmlns:android="http://schemas.android.com/apk/res/android"> + <translate android:fromYDelta="0" android:toYDelta="-100%p" + android:duration="@android:integer/config_mediumAnimTime"/> +</set>
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_out_up.xml b/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_out_up.xml new file mode 100644 index 0000000..513d32e --- /dev/null +++ b/chrome/browser/android/examples/custom_tabs_client/src/res/anim/slide_out_up.xml
@@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2022 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<set xmlns:android="http://schemas.android.com/apk/res/android"> + <translate android:fromYDelta="0" android:toYDelta="100%p" + android:duration="@android:integer/config_mediumAnimTime"/> +</set>
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/res/layout/main.xml b/chrome/browser/android/examples/custom_tabs_client/src/res/layout/main.xml index 4cb3694..2dbad91 100644 --- a/chrome/browser/android/examples/custom_tabs_client/src/res/layout/main.xml +++ b/chrome/browser/android/examples/custom_tabs_client/src/res/layout/main.xml
@@ -120,6 +120,14 @@ android:textAllCaps="false" android:text="@string/register_twa_service" /> + <Button + android:id="@+id/launch_pcct_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="3dp" + android:textAllCaps="false" + android:text="@string/launch_pcct_text" /> + </LinearLayout> </ScrollView>
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/res/values/strings.xml b/chrome/browser/android/examples/custom_tabs_client/src/res/values/strings.xml index 26362e0..c61b2467e 100644 --- a/chrome/browser/android/examples/custom_tabs_client/src/res/values/strings.xml +++ b/chrome/browser/android/examples/custom_tabs_client/src/res/values/strings.xml
@@ -23,6 +23,7 @@ <string name="connect_button_text">Connect to the service</string> <string name="launch_browser_actions_button_text">Launch URL in Browser Actions Context Menu</string> <string name="register_twa_service">Register TrustedWebActivityService</string> + <string name="launch_pcct_text">Launch URL in a Partial Height Custom Tab</string> <string name="default_url">https://www.google.com</string> <string name="package_label">Package:</string> <string name="amazing_grace">Amazing Grace 2011</string>
diff --git a/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc index 06168dc4..5be304bc 100644 --- a/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc +++ b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc
@@ -191,40 +191,48 @@ // e.g. due to the tab being closed. Keep count of this scenario so we can // stop the UI from showing after 2+ dismissals. if (entry_type == PickerEntryType::kUnknown && - close_reason == IntentPickerCloseReason::DIALOG_DEACTIVATED) { - if (ui_auto_display_service) { - ui_auto_display_service->IncrementCounter(url); - } + close_reason == IntentPickerCloseReason::DIALOG_DEACTIVATED && + ui_auto_display_service) { + ui_auto_display_service->IncrementCounter(url); } if (should_persist) { - // TODO(https://crbug.com/853604): Remove this and convert to a DCHECK - // after finding out the root cause. - if (launch_name.empty()) { - base::debug::DumpWithoutCrashing(); - } else { - proxy->AddPreferredApp(launch_name, url); - } + DCHECK(!launch_name.empty()); + proxy->AddPreferredApp(launch_name, url); } if (should_launch_app) { - if (entry_type == PickerEntryType::kWeb) { - web_app::ReparentWebContentsIntoAppBrowser(web_contents, launch_name); - } else { - // TODO(crbug.com/853604): Distinguish the source from link and omnibox. - mojom::LaunchSource launch_source = mojom::LaunchSource::kFromLink; - proxy->LaunchAppWithUrl( - launch_name, - GetEventFlags(mojom::LaunchContainer::kLaunchContainerWindow, - WindowOpenDisposition::NEW_WINDOW, - /*prefer_container=*/true), - url, launch_source, apps::MakeWindowInfo(display::kDefaultDisplayId)); - CloseOrGoBack(web_contents); - } + LaunchAppFromIntentPickerChromeOs(web_contents, url, launch_name, + entry_type); } IntentHandlingMetrics::RecordIntentPickerMetrics(entry_type, close_reason, should_persist, show_state); } +void LaunchAppFromIntentPickerChromeOs(content::WebContents* web_contents, + const GURL& url, + const std::string& launch_name, + PickerEntryType app_type) { + DCHECK(!launch_name.empty()); + Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext()); + + auto* proxy = AppServiceProxyFactory::GetForProfile(profile); + + if (app_type == PickerEntryType::kWeb) { + web_app::ReparentWebContentsIntoAppBrowser(web_contents, launch_name); + } else { + // TODO(crbug.com/853604): Distinguish the source from link and omnibox. + mojom::LaunchSource launch_source = mojom::LaunchSource::kFromLink; + proxy->LaunchAppWithUrl( + launch_name, + GetEventFlags(mojom::LaunchContainer::kLaunchContainerWindow, + WindowOpenDisposition::NEW_WINDOW, + /*prefer_container=*/true), + url, launch_source, apps::MakeWindowInfo(display::kDefaultDisplayId)); + CloseOrGoBack(web_contents); + } +} + } // namespace apps
diff --git a/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h index b9aa90728..3581a155 100644 --- a/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h +++ b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h
@@ -42,6 +42,11 @@ IntentPickerCloseReason close_reason, bool should_persist); +void LaunchAppFromIntentPickerChromeOs(content::WebContents* web_contents, + const GURL& url, + const std::string& launch_name, + PickerEntryType app_type); + } // namespace apps #endif // CHROME_BROWSER_APPS_INTENT_HELPER_CHROMEOS_INTENT_PICKER_HELPERS_H_
diff --git a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc index 6ec2145..e012a630 100644 --- a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc +++ b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
@@ -7,6 +7,7 @@ #include <string> #include <utility> +#include "base/feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" @@ -16,6 +17,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/intent_picker_tab_helper.h" #include "chrome/browser/ui/web_applications/web_app_launch_utils.h" +#include "chrome/common/chrome_features.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" @@ -58,6 +60,30 @@ return apps; } +void LaunchAppFromIntentPicker(content::WebContents* web_contents, + const GURL& url, + const std::string& launch_name, + PickerEntryType app_type) { +#if defined(OS_CHROMEOS) + LaunchAppFromIntentPickerChromeOs(web_contents, url, launch_name, app_type); +#else + switch (app_type) { + case PickerEntryType::kWeb: + web_app::ReparentWebContentsIntoAppBrowser(web_contents, launch_name); + break; + case PickerEntryType::kMacOs: +#if defined(OS_MAC) + LaunchMacApp(url, launch_name); + break; +#endif // defined(OS_MAC) + case PickerEntryType::kArc: + case PickerEntryType::kDevice: + case PickerEntryType::kUnknown: + NOTREACHED(); + } +#endif // defined(OS_CHROMEOS) +} + void OnIntentPickerClosed( content::WebContents* web_contents, IntentPickerAutoDisplayService* ui_auto_display_service, @@ -73,30 +99,17 @@ #else const bool should_launch_app = close_reason == apps::IntentPickerCloseReason::OPEN_APP; - switch (entry_type) { - case PickerEntryType::kWeb: - if (should_launch_app) - web_app::ReparentWebContentsIntoAppBrowser(web_contents, launch_name); - break; - case apps::PickerEntryType::kUnknown: - // We reach here if the picker was closed without an app being chosen, - // e.g. due to the tab being closed. Keep count of this scenario so we can - // stop the UI from showing after 2+ dismissals. - if (close_reason == IntentPickerCloseReason::DIALOG_DEACTIVATED) { - if (ui_auto_display_service) - ui_auto_display_service->IncrementCounter(url); - } - break; - case PickerEntryType::kMacOs: -#if defined(OS_MAC) - if (should_launch_app) { - LaunchMacApp(url, launch_name); - } - break; -#endif // defined(OS_MAC) - case PickerEntryType::kArc: - case PickerEntryType::kDevice: - NOTREACHED(); + if (should_launch_app) { + LaunchAppFromIntentPicker(web_contents, url, launch_name, entry_type); + } + + if (entry_type == PickerEntryType::kUnknown && + close_reason == IntentPickerCloseReason::DIALOG_DEACTIVATED && + ui_auto_display_service) { + // We reach here if the picker was closed without an app being chosen, e.g. + // due to the tab being closed. Keep count of this scenario so we can stop + // the UI from showing after 2+ dismissals. + ui_auto_display_service->IncrementCounter(url); } #endif // defined(OS_CHROMEOS) } @@ -164,6 +177,13 @@ apps::IntentHandlingMetrics::IntentPickerIconEvent::kIconClicked); #endif + if (apps.size() == 1 && + base::FeatureList::IsEnabled(features::kLinkCapturingUiUpdate)) { + LaunchAppFromIntentPicker(web_contents, url, apps[0].launch_name, + apps[0].type); + return; + } + IntentPickerTabHelper::LoadAppIcons( web_contents, std::move(apps), base::BindOnce(&OnAppIconsLoaded, web_contents,
diff --git a/chrome/browser/ash/accessibility/accessibility_manager.cc b/chrome/browser/ash/accessibility/accessibility_manager.cc index b8d83bfe..4a26b9f 100644 --- a/chrome/browser/ash/accessibility/accessibility_manager.cc +++ b/chrome/browser/ash/accessibility/accessibility_manager.cc
@@ -963,7 +963,7 @@ // If the SODA language isn't installed yet, update the preference to // ensure the nudge gets shown for this locale when installation // completes. - DictionaryPrefUpdateDeprecated update( + DictionaryPrefUpdate update( pref_service, prefs::kAccessibilityDictationLocaleOfflineNudge); update.Get()->SetBoolKey(dictation_locale, false); } @@ -1010,8 +1010,8 @@ // for this particular locale. AccessibilityController::Get()->ShowDictationLanguageUpgradedNudge( dictation_locale, g_browser_process->GetApplicationLocale()); - DictionaryPrefUpdateDeprecated update( - profile_->GetPrefs(), prefs::kAccessibilityDictationLocaleOfflineNudge); + DictionaryPrefUpdate update(profile_->GetPrefs(), + prefs::kAccessibilityDictationLocaleOfflineNudge); update.Get()->SetBoolKey(dictation_locale, true); } @@ -1960,8 +1960,8 @@ void AccessibilityManager::SetSwitchAccessKeysForTest( const std::set<int>& action_keys, const std::string& pref_name) { - DictionaryPrefUpdateDeprecated pref_update(profile_->GetPrefs(), pref_name); - base::ListValue devices; + DictionaryPrefUpdate pref_update(profile_->GetPrefs(), pref_name); + base::Value devices(base::Value::Type::LIST); devices.Append(kSwitchAccessInternalDevice); devices.Append(kSwitchAccessUsbDevice); devices.Append(kSwitchAccessBluetoothDevice);
diff --git a/chrome/browser/ash/accessibility/accessibility_manager_browsertest.cc b/chrome/browser/ash/accessibility/accessibility_manager_browsertest.cc index c61c26d..999f1c4 100644 --- a/chrome/browser/ash/accessibility/accessibility_manager_browsertest.cc +++ b/chrome/browser/ash/accessibility/accessibility_manager_browsertest.cc
@@ -293,8 +293,8 @@ } void ClearDictationOfflineNudgePref(const std::string& locale) { - DictionaryPrefUpdateDeprecated update( - GetActiveUserPrefs(), prefs::kAccessibilityDictationLocaleOfflineNudge); + DictionaryPrefUpdate update(GetActiveUserPrefs(), + prefs::kAccessibilityDictationLocaleOfflineNudge); update.Get()->RemovePath(locale); }
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_active_window_throttle_observer.cc b/chrome/browser/ash/arc/instance_throttle/arc_active_window_throttle_observer.cc index 86cf6026..6512958f 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_active_window_throttle_observer.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_active_window_throttle_observer.cc
@@ -9,8 +9,7 @@ namespace arc { ArcActiveWindowThrottleObserver::ArcActiveWindowThrottleObserver() - : WindowThrottleObserverBase(ThrottleObserver::PriorityLevel::CRITICAL, - "ArcWindowIsActiveWindow") {} + : WindowThrottleObserverBase("ArcWindowIsActiveWindow") {} bool ArcActiveWindowThrottleObserver::ProcessWindowActivation( ActivationReason reason,
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_app_launch_throttle_observer.cc b/chrome/browser/ash/arc/instance_throttle/arc_app_launch_throttle_observer.cc index d584f355..28b73cc3 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_app_launch_throttle_observer.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_app_launch_throttle_observer.cc
@@ -17,8 +17,7 @@ } // namespace ArcAppLaunchThrottleObserver::ArcAppLaunchThrottleObserver() - : ThrottleObserver(ThrottleObserver::PriorityLevel::CRITICAL, - "ArcAppLaunchRequested") {} + : ThrottleObserver("ArcAppLaunchRequested") {} ArcAppLaunchThrottleObserver::~ArcAppLaunchThrottleObserver() = default;
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_boot_phase_throttle_observer.cc b/chrome/browser/ash/arc/instance_throttle/arc_boot_phase_throttle_observer.cc index 4598fc85..dc43c79 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_boot_phase_throttle_observer.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_boot_phase_throttle_observer.cc
@@ -32,8 +32,7 @@ } // namespace ArcBootPhaseThrottleObserver::ArcBootPhaseThrottleObserver() - : ThrottleObserver(ThrottleObserver::PriorityLevel::CRITICAL, - "ArcIsBooting") {} + : ThrottleObserver("ArcIsBooting") {} ArcBootPhaseThrottleObserver::~ArcBootPhaseThrottleObserver() = default;
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.cc b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.cc index f94b01b..97d747a 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.cc
@@ -145,22 +145,18 @@ ~ArcInstanceThrottleFactory() override = default; }; -CpuRestrictionState LevelToCpuRestriction( - ash::ThrottleObserver::PriorityLevel level) { - switch (level) { - case ash::ThrottleObserver::PriorityLevel::CRITICAL: - case ash::ThrottleObserver::PriorityLevel::IMPORTANT: - case ash::ThrottleObserver::PriorityLevel::NORMAL: - return CpuRestrictionState::CPU_RESTRICTION_FOREGROUND; - case ash::ThrottleObserver::PriorityLevel::LOW: - case ash::ThrottleObserver::PriorityLevel::UNKNOWN: - return CpuRestrictionState::CPU_RESTRICTION_BACKGROUND; - } +CpuRestrictionState ToCpuRestriction(bool should_throttle) { + return should_throttle ? CpuRestrictionState::CPU_RESTRICTION_BACKGROUND + : CpuRestrictionState::CPU_RESTRICTION_FOREGROUND; } } // namespace // static +const char ArcInstanceThrottle::kChromeArcPowerControlPageObserver[] = + "arc-power-control"; + +// static ArcInstanceThrottle* ArcInstanceThrottle::GetForBrowserContext( content::BrowserContext* context) { return ArcInstanceThrottleFactory::GetForBrowserContext(context); @@ -185,6 +181,9 @@ AddObserver(std::make_unique<ArcPowerThrottleObserver>()); AddObserver(std::make_unique<ArcProvisioningThrottleObserver>()); AddObserver(std::make_unique<ArcSwitchThrottleObserver>()); + // This one is controlled by chromeos::ArcPowerControlHandler. + AddObserver(std::make_unique<ash::ThrottleObserver>( + kChromeArcPowerControlPageObserver)); StartObservers(); DCHECK(bridge_); bridge_->power()->AddObserver(this); @@ -199,13 +198,13 @@ } void ArcInstanceThrottle::OnConnectionReady() { - NotifyCpuRestriction(LevelToCpuRestriction(level())); + NotifyCpuRestriction(ToCpuRestriction(should_throttle())); } -void ArcInstanceThrottle::ThrottleInstance( - ash::ThrottleObserver::PriorityLevel level) { +void ArcInstanceThrottle::ThrottleInstance(bool should_throttle) { const CpuRestrictionState cpu_restriction_state = - LevelToCpuRestriction(level); + ToCpuRestriction(should_throttle); + NotifyCpuRestriction(cpu_restriction_state); delegate_->SetCpuRestriction(cpu_restriction_state); }
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.h b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.h index 0fab28a..3c585bb7 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.h +++ b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.h
@@ -37,6 +37,9 @@ public ash::ThrottleService, public ConnectionObserver<mojom::PowerInstance> { public: + // The name of the observer which monitors chrome://arc-power-control. + static const char kChromeArcPowerControlPageObserver[]; + class Delegate { public: Delegate() = default; @@ -78,7 +81,7 @@ private: // ash::ThrottleService: - void ThrottleInstance(ash::ThrottleObserver::PriorityLevel level) override; + void ThrottleInstance(bool should_throttle) override; void RecordCpuRestrictionDisabledUMA(const std::string& observer_name, base::TimeDelta delta) override;
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle_unittest.cc index 5a199d6..6292df70 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle_unittest.cc
@@ -65,6 +65,13 @@ testing_profile_.get()); arc_instance_throttle_->set_delegate_for_testing( std::make_unique<TestDelegateImpl>(this)); + + // Make sure the next SetActive() call calls into TestDelegateImpl. This + // is necessary because ArcInstanceThrottle's constructor may initialize the + // variable (and call the default delegate for production) before doing + // set_delegate_for_testing(). If that happens, SetActive() might not call + // the test delegate as expected. + arc_instance_throttle_->reset_should_throttle_for_testing(); } void TearDown() override { @@ -108,6 +115,12 @@ return arc_instance_throttle_; } + ash::ThrottleObserver* GetThrottleObserver() { + const auto& observers = arc_instance_throttle()->observers_for_testing(); + DCHECK(!observers.empty()); + return observers[0].get(); + } + FakePowerInstance* power_instance() { return power_instance_.get(); } size_t disable_cpu_restriction_counter() const { @@ -161,24 +174,20 @@ // Tests that ArcInstanceThrottle adjusts ARC CPU restriction // when ThrottleInstance is called. TEST_F(ArcInstanceThrottleTest, TestThrottleInstance) { - arc_instance_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::LOW); + GetThrottleObserver()->SetActive(false); EXPECT_EQ(1U, enable_cpu_restriction_counter()); EXPECT_EQ(0U, disable_cpu_restriction_counter()); - // ArcInstanceThrottle level is already LOW, expect no change - arc_instance_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::LOW); + // ArcInstanceThrottle is already inactive, expect no change. + GetThrottleObserver()->SetActive(false); EXPECT_EQ(1U, enable_cpu_restriction_counter()); EXPECT_EQ(0U, disable_cpu_restriction_counter()); - arc_instance_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::CRITICAL); + GetThrottleObserver()->SetActive(true); EXPECT_EQ(1U, enable_cpu_restriction_counter()); EXPECT_EQ(1U, disable_cpu_restriction_counter()); - arc_instance_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::LOW); + GetThrottleObserver()->SetActive(false); EXPECT_EQ(2U, enable_cpu_restriction_counter()); EXPECT_EQ(1U, disable_cpu_restriction_counter()); } @@ -192,14 +201,12 @@ EXPECT_EQ(mojom::CpuRestrictionState::CPU_RESTRICTION_BACKGROUND, power_instance()->last_cpu_restriction_state()); - arc_instance_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::CRITICAL); + GetThrottleObserver()->SetActive(true); EXPECT_EQ(2, power_instance()->cpu_restriction_state_count()); EXPECT_EQ(mojom::CpuRestrictionState::CPU_RESTRICTION_FOREGROUND, power_instance()->last_cpu_restriction_state()); - arc_instance_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::LOW); + GetThrottleObserver()->SetActive(false); EXPECT_EQ(3, power_instance()->cpu_restriction_state_count()); EXPECT_EQ(mojom::CpuRestrictionState::CPU_RESTRICTION_BACKGROUND, power_instance()->last_cpu_restriction_state()); @@ -213,10 +220,8 @@ // Set power instance and it should be automatically notified once connection // is made. CreatePowerInstance(); - arc_instance_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::CRITICAL); - arc_instance_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::LOW); + GetThrottleObserver()->SetActive(true); + GetThrottleObserver()->SetActive(false); EXPECT_EQ(0, power_instance()->cpu_restriction_state_count()); }
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer.cc b/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer.cc index 17a4378..e0109d4 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer.cc
@@ -10,8 +10,7 @@ namespace arc { ArcKioskModeThrottleObserver::ArcKioskModeThrottleObserver() - : ThrottleObserver(ThrottleObserver::PriorityLevel::CRITICAL, - "ArcKioskMode") {} + : ThrottleObserver("ArcKioskMode") {} void ArcKioskModeThrottleObserver::StartObserving( content::BrowserContext* context,
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc index de72d31..4e1ad06 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc
@@ -19,6 +19,14 @@ constexpr char kTestProfileName[] = "user@gmail.com"; +void TestCallback(int* counter, + int* active_counter, + const ash::ThrottleObserver* self) { + (*counter)++; + if (self->active()) + (*active_counter)++; +} + class ScopedKioskModeLogIn { public: explicit ScopedKioskModeLogIn(bool kiosk_user) { @@ -61,13 +69,12 @@ ScopedKioskModeLogIn login(false /* kiosk_user */); ArcKioskModeThrottleObserver observer; int call_count = 0; + int active_count = 0; observer.StartObserving( nullptr /* context */, - base::BindRepeating( - [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, - &call_count)); - - EXPECT_EQ(0, call_count); + base::BindRepeating(&TestCallback, &call_count, &active_count)); + EXPECT_EQ(1, call_count); + EXPECT_EQ(0, active_count); EXPECT_FALSE(observer.active()); } @@ -75,13 +82,12 @@ ScopedKioskModeLogIn login(true /* kiosk_user */); ArcKioskModeThrottleObserver observer; int call_count = 0; + int active_count = 0; observer.StartObserving( nullptr /* context */, - base::BindRepeating( - [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, - &call_count)); - + base::BindRepeating(&TestCallback, &call_count, &active_count)); EXPECT_EQ(1, call_count); + EXPECT_EQ(1, active_count); EXPECT_TRUE(observer.active()); }
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_pip_window_throttle_observer.cc b/chrome/browser/ash/arc/instance_throttle/arc_pip_window_throttle_observer.cc index f1d8820..323d1f4 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_pip_window_throttle_observer.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_pip_window_throttle_observer.cc
@@ -31,8 +31,7 @@ } // namespace ArcPipWindowThrottleObserver::ArcPipWindowThrottleObserver() - : ThrottleObserver(ThrottleObserver::PriorityLevel::IMPORTANT, - "ArcPipWindowIsVisible") {} + : ThrottleObserver("ArcPipWindowIsVisible") {} void ArcPipWindowThrottleObserver::StartObserving( content::BrowserContext* context,
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer.cc b/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer.cc index 709de30..0f6e69c 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer.cc
@@ -16,7 +16,7 @@ } // namespace ArcPowerThrottleObserver::ArcPowerThrottleObserver() - : ThrottleObserver(ThrottleObserver::PriorityLevel::CRITICAL, "ArcPower") {} + : ThrottleObserver("ArcPower") {} ArcPowerThrottleObserver::~ArcPowerThrottleObserver() = default;
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc index 50a81de..e5d17db 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc
@@ -21,6 +21,17 @@ #include "testing/gtest/include/gtest/gtest.h" namespace arc { +namespace { + +void TestCallback(int* counter, + int* active_counter, + const ash::ThrottleObserver* self) { + (*counter)++; + if (self->active()) + (*active_counter)++; +} + +} // namespace class ArcPowerThrottleObserverTest : public testing::Test { public: @@ -76,48 +87,54 @@ TEST_F(ArcPowerThrottleObserverTest, Default) { ArcPowerThrottleObserver observer; int call_count = 0; + int active_count = 0; observer.StartObserving( profile(), - base::BindRepeating( - [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, - &call_count)); - + base::BindRepeating(&TestCallback, &call_count, &active_count)); EXPECT_EQ(0, call_count); + EXPECT_EQ(0, active_count); EXPECT_FALSE(observer.active()); observer.OnPreAnr(mojom::AnrType::CONTENT_PROVIDER); EXPECT_EQ(1, call_count); + EXPECT_EQ(1, active_count); EXPECT_TRUE(observer.active()); // One more notification does not change state. observer.OnPreAnr(mojom::AnrType::PROCESS); - EXPECT_EQ(1, call_count); + EXPECT_EQ(2, call_count); + EXPECT_EQ(2, active_count); EXPECT_TRUE(observer.active()); // Duration of temporary lifting CPU restrictions is not yet over. task_environment().FastForwardBy(base::Milliseconds(9000)); - EXPECT_EQ(1, call_count); + EXPECT_EQ(2, call_count); + EXPECT_EQ(2, active_count); EXPECT_TRUE(observer.active()); // Wait a bit more, duration of temporary lifting CPU restrictions is over // now. task_environment().FastForwardBy(base::Milliseconds(1000)); - EXPECT_EQ(2, call_count); + EXPECT_EQ(3, call_count); + EXPECT_EQ(2, active_count); EXPECT_FALSE(observer.active()); // Wait much longer, the last state should not change. task_environment().FastForwardBy(base::Milliseconds(10000)); - EXPECT_EQ(2, call_count); + EXPECT_EQ(3, call_count); + EXPECT_EQ(2, active_count); EXPECT_FALSE(observer.active()); // Timer is not fired after stopping observing. observer.OnPreAnr(mojom::AnrType::CONTENT_PROVIDER); - EXPECT_EQ(3, call_count); + EXPECT_EQ(4, call_count); + EXPECT_EQ(3, active_count); EXPECT_TRUE(observer.active()); observer.StopObserving(); task_environment().FastForwardBy(base::Milliseconds(11000)); - EXPECT_EQ(3, call_count); + EXPECT_EQ(4, call_count); + EXPECT_EQ(3, active_count); EXPECT_TRUE(observer.active()); } @@ -126,14 +143,14 @@ TEST_F(ArcPowerThrottleObserverTest, ActiveTimeExtended) { ArcPowerThrottleObserver observer; int call_count = 0; + int active_count = 0; observer.StartObserving( profile(), - base::BindRepeating( - [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, - &call_count)); + base::BindRepeating(&TestCallback, &call_count, &active_count)); observer.OnPreAnr(mojom::AnrType::PROCESS); EXPECT_EQ(1, call_count); + EXPECT_EQ(1, active_count); EXPECT_TRUE(observer.active()); task_environment().FastForwardBy(base::Milliseconds(5000)); @@ -141,17 +158,20 @@ EXPECT_TRUE(observer.active()); observer.OnPreAnr(mojom::AnrType::FOREGROUND_SERVICE); - EXPECT_EQ(1, call_count); + EXPECT_EQ(2, call_count); + EXPECT_EQ(2, active_count); EXPECT_TRUE(observer.active()); task_environment().FastForwardBy(base::Milliseconds(19000)); // Without FOREGROUND_SERVICE preANR timer would be already fired. // So it is still active now. - EXPECT_EQ(1, call_count); + EXPECT_EQ(2, call_count); + EXPECT_EQ(2, active_count); EXPECT_TRUE(observer.active()); task_environment().FastForwardBy(base::Milliseconds(1000)); - EXPECT_EQ(2, call_count); + EXPECT_EQ(3, call_count); + EXPECT_EQ(2, active_count); EXPECT_FALSE(observer.active()); } @@ -161,14 +181,14 @@ TEST_F(ArcPowerThrottleObserverTest, ActiveTimePreserved) { ArcPowerThrottleObserver observer; int call_count = 0; + int active_count = 0; observer.StartObserving( profile(), - base::BindRepeating( - [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, - &call_count)); + base::BindRepeating(&TestCallback, &call_count, &active_count)); observer.OnPreAnr(mojom::AnrType::FOREGROUND_SERVICE); EXPECT_EQ(1, call_count); + EXPECT_EQ(1, active_count); EXPECT_TRUE(observer.active()); task_environment().FastForwardBy(base::Milliseconds(9000)); @@ -177,16 +197,19 @@ // Process has shorter active time. It should not change the previous timeout. observer.OnPreAnr(mojom::AnrType::PROCESS); - EXPECT_EQ(1, call_count); + EXPECT_EQ(2, call_count); + EXPECT_EQ(2, active_count); EXPECT_TRUE(observer.active()); task_environment().FastForwardBy(base::Milliseconds(10000)); - EXPECT_EQ(1, call_count); + EXPECT_EQ(2, call_count); + EXPECT_EQ(2, active_count); EXPECT_TRUE(observer.active()); // Only now the lock becomes inactive. task_environment().FastForwardBy(base::Milliseconds(1000)); - EXPECT_EQ(2, call_count); + EXPECT_EQ(3, call_count); + EXPECT_EQ(2, active_count); EXPECT_FALSE(observer.active()); }
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_provisioning_throttle_observer.cc b/chrome/browser/ash/arc/instance_throttle/arc_provisioning_throttle_observer.cc index abf47d6..d5dfb90a 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_provisioning_throttle_observer.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_provisioning_throttle_observer.cc
@@ -11,8 +11,7 @@ namespace arc { ArcProvisioningThrottleObserver::ArcProvisioningThrottleObserver() - : ThrottleObserver(ThrottleObserver::PriorityLevel::CRITICAL, - "ArcIsProvisioning") {} + : ThrottleObserver("ArcIsProvisioning") {} void ArcProvisioningThrottleObserver::StartObserving( content::BrowserContext* context,
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer.cc b/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer.cc index 2fc6dbf5..f57bbc6 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer.cc
@@ -9,8 +9,7 @@ namespace arc { ArcSwitchThrottleObserver::ArcSwitchThrottleObserver() - : ThrottleObserver(ThrottleObserver::PriorityLevel::CRITICAL, "ArcSwitch") { -} + : ThrottleObserver("ArcSwitch") {} void ArcSwitchThrottleObserver::StartObserving( content::BrowserContext* context,
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer_unittest.cc index 43b0769..f3e4c0b 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer_unittest.cc
@@ -11,19 +11,29 @@ #include "testing/gtest/include/gtest/gtest.h" namespace arc { +namespace { + +void TestCallback(int* counter, + int* active_counter, + const ash::ThrottleObserver* self) { + (*counter)++; + if (self->active()) + (*active_counter)++; +} + +} // namespace using ArcSwitchThrottleObserverTest = testing::Test; TEST_F(ArcSwitchThrottleObserverTest, Default) { ArcSwitchThrottleObserver observer; int call_count = 0; + int active_count = 0; observer.StartObserving( nullptr /* context */, - base::BindRepeating( - [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, - &call_count)); - - EXPECT_EQ(0, call_count); + base::BindRepeating(&TestCallback, &call_count, &active_count)); + EXPECT_EQ(1, call_count); + EXPECT_EQ(0, active_count); EXPECT_FALSE(observer.active()); } @@ -33,13 +43,12 @@ chromeos::switches::kDisableArcCpuRestriction); ArcSwitchThrottleObserver observer; int call_count = 0; + int active_count = 0; observer.StartObserving( nullptr /* context */, - base::BindRepeating( - [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, - &call_count)); - + base::BindRepeating(&TestCallback, &call_count, &active_count)); EXPECT_EQ(1, call_count); + EXPECT_EQ(1, active_count); EXPECT_TRUE(observer.active()); }
diff --git a/chrome/browser/ash/crosapi/browser_data_migrator.cc b/chrome/browser/ash/crosapi/browser_data_migrator.cc index 9a2513cd..5f9c376a 100644 --- a/chrome/browser/ash/crosapi/browser_data_migrator.cc +++ b/chrome/browser/ash/crosapi/browser_data_migrator.cc
@@ -698,10 +698,9 @@ const std::string& user_id_hash) { int count = GetMigrationAttemptCountForUser(local_state, user_id_hash); count += 1; - DictionaryPrefUpdateDeprecated update(local_state, - kMigrationAttemptCountPref); - base::DictionaryValue* dict = update.Get(); - dict->SetKey(user_id_hash, base::Value(count)); + DictionaryPrefUpdate update(local_state, kMigrationAttemptCountPref); + base::Value* dict = update.Get(); + dict->SetIntKey(user_id_hash, count); } // static @@ -717,9 +716,8 @@ void BrowserDataMigratorImpl::ClearMigrationAttemptCountForUser( PrefService* local_state, const std::string& user_id_hash) { - DictionaryPrefUpdateDeprecated update(local_state, - kMigrationAttemptCountPref); - base::DictionaryValue* dict = update.Get(); + DictionaryPrefUpdate update(local_state, kMigrationAttemptCountPref); + base::Value* dict = update.Get(); dict->RemoveKey(user_id_hash); }
diff --git a/chrome/browser/ash/crosapi/browser_util.cc b/chrome/browser/ash/crosapi/browser_util.cc index 06371a347..68ccace 100644 --- a/chrome/browser/ash/crosapi/browser_util.cc +++ b/chrome/browser/ash/crosapi/browser_util.cc
@@ -550,7 +550,7 @@ const std::string& user_id_hash) { const base::Value* data_versions = local_state->GetDictionary(kDataVerPref); const std::string* data_version_str = - data_versions->FindStringPath(user_id_hash); + data_versions->FindStringKey(user_id_hash); if (!data_version_str) return base::Version(); @@ -562,9 +562,9 @@ const std::string& user_id_hash, const base::Version& version) { DCHECK(version.IsValid()); - DictionaryPrefUpdateDeprecated update(local_state, kDataVerPref); - base::DictionaryValue* dict = update.Get(); - dict->SetString(user_id_hash, version.GetString()); + DictionaryPrefUpdate update(local_state, kDataVerPref); + base::Value* dict = update.Get(); + dict->SetStringKey(user_id_hash, version.GetString()); } bool IsDataWipeRequired(const std::string& user_id_hash) { @@ -729,17 +729,17 @@ void SetProfileMigrationCompletedForUser(PrefService* local_state, const std::string& user_id_hash) { - DictionaryPrefUpdateDeprecated update(local_state, - kProfileMigrationCompletedForUserPref); - base::DictionaryValue* dict = update.Get(); + DictionaryPrefUpdate update(local_state, + kProfileMigrationCompletedForUserPref); + base::Value* dict = update.Get(); dict->SetBoolKey(user_id_hash, true); } void ClearProfileMigrationCompletedForUser(PrefService* local_state, const std::string& user_id_hash) { - DictionaryPrefUpdateDeprecated update(local_state, - kProfileMigrationCompletedForUserPref); - base::DictionaryValue* dict = update.Get(); + DictionaryPrefUpdate update(local_state, + kProfileMigrationCompletedForUserPref); + base::Value* dict = update.Get(); dict->RemoveKey(user_id_hash); }
diff --git a/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.cc b/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.cc index 8477ef04..67c3805 100644 --- a/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.cc +++ b/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.cc
@@ -13,8 +13,7 @@ namespace crostini { CrostiniActiveWindowThrottleObserver::CrostiniActiveWindowThrottleObserver() - : WindowThrottleObserverBase(ThrottleObserver::PriorityLevel::CRITICAL, - "CrostiniWindowIsActiveWindow") {} + : WindowThrottleObserverBase("CrostiniWindowIsActiveWindow") {} bool CrostiniActiveWindowThrottleObserver::ProcessWindowActivation( ActivationReason reason,
diff --git a/chrome/browser/ash/crostini/throttle/crostini_throttle.cc b/chrome/browser/ash/crostini/throttle/crostini_throttle.cc index a4336eb1..8c1d6985 100644 --- a/chrome/browser/ash/crostini/throttle/crostini_throttle.cc +++ b/chrome/browser/ash/crostini/throttle/crostini_throttle.cc
@@ -91,19 +91,8 @@ StopObservers(); } -void CrostiniThrottle::ThrottleInstance( - ash::ThrottleObserver::PriorityLevel level) { - switch (level) { - case ash::ThrottleObserver::PriorityLevel::CRITICAL: - case ash::ThrottleObserver::PriorityLevel::IMPORTANT: - case ash::ThrottleObserver::PriorityLevel::NORMAL: - delegate_->SetCpuRestriction(false); - break; - case ash::ThrottleObserver::PriorityLevel::LOW: - case ash::ThrottleObserver::PriorityLevel::UNKNOWN: - delegate_->SetCpuRestriction(true); - break; - } +void CrostiniThrottle::ThrottleInstance(bool should_throttle) { + delegate_->SetCpuRestriction(should_throttle); } } // namespace crostini
diff --git a/chrome/browser/ash/crostini/throttle/crostini_throttle.h b/chrome/browser/ash/crostini/throttle/crostini_throttle.h index c001162..9fab910 100644 --- a/chrome/browser/ash/crostini/throttle/crostini_throttle.h +++ b/chrome/browser/ash/crostini/throttle/crostini_throttle.h
@@ -55,7 +55,7 @@ private: // ash::ThrottleService: - void ThrottleInstance(ash::ThrottleObserver::PriorityLevel level) override; + void ThrottleInstance(bool should_throttle) override; void RecordCpuRestrictionDisabledUMA(const std::string& observer_name, base::TimeDelta delta) override {}
diff --git a/chrome/browser/ash/crostini/throttle/crostini_throttle_unittest.cc b/chrome/browser/ash/crostini/throttle/crostini_throttle_unittest.cc index 74a6f7f5..3fc8be7 100644 --- a/chrome/browser/ash/crostini/throttle/crostini_throttle_unittest.cc +++ b/chrome/browser/ash/crostini/throttle/crostini_throttle_unittest.cc
@@ -28,6 +28,12 @@ protected: CrostiniThrottle* crostini_throttle() { return &crostini_throttle_; } + ash::ThrottleObserver* GetThrottleObserver() { + const auto& observers = crostini_throttle()->observers_for_testing(); + DCHECK(!observers.empty()); + return observers[0].get(); + } + size_t disable_cpu_restriction_counter() const { return disable_cpu_restriction_counter_; } @@ -70,24 +76,20 @@ // Tests that CrostiniThrottle adjusts CPU restriction // when ThrottleInstance is called. TEST_F(CrostiniThrottleTest, TestThrottleInstance) { - crostini_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::LOW); + GetThrottleObserver()->SetActive(false); EXPECT_EQ(1U, enable_cpu_restriction_counter()); EXPECT_EQ(0U, disable_cpu_restriction_counter()); - // CrostiniThrottle level is already LOW, expect no change - crostini_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::LOW); + // CrostiniThrottle is already inactive, expect no change + GetThrottleObserver()->SetActive(false); EXPECT_EQ(1U, enable_cpu_restriction_counter()); EXPECT_EQ(0U, disable_cpu_restriction_counter()); - crostini_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::CRITICAL); + GetThrottleObserver()->SetActive(true); EXPECT_EQ(1U, enable_cpu_restriction_counter()); EXPECT_EQ(1U, disable_cpu_restriction_counter()); - crostini_throttle()->set_level_for_testing( - ash::ThrottleObserver::PriorityLevel::LOW); + GetThrottleObserver()->SetActive(false); EXPECT_EQ(2U, enable_cpu_restriction_counter()); EXPECT_EQ(1U, disable_cpu_restriction_counter()); }
diff --git a/chrome/browser/ash/login/arc_terms_of_service_browsertest.cc b/chrome/browser/ash/login/arc_terms_of_service_browsertest.cc index 597057d..6a41701 100644 --- a/chrome/browser/ash/login/arc_terms_of_service_browsertest.cc +++ b/chrome/browser/ash/login/arc_terms_of_service_browsertest.cc
@@ -20,9 +20,8 @@ #include "chrome/browser/ash/login/login_wizard.h" #include "chrome/browser/ash/login/oobe_screen.h" #include "chrome/browser/ash/login/screens/recommend_apps_screen.h" -#include "chrome/browser/ash/login/test/embedded_test_server_setup_mixin.h" +#include "chrome/browser/ash/login/test/embedded_policy_test_server_mixin.h" #include "chrome/browser/ash/login/test/js_checker.h" -#include "chrome/browser/ash/login/test/local_policy_test_server_mixin.h" #include "chrome/browser/ash/login/test/login_manager_mixin.h" #include "chrome/browser/ash/login/test/oobe_base_test.h" #include "chrome/browser/ash/login/test/oobe_screen_exit_waiter.h" @@ -650,9 +649,9 @@ void UploadDeviceLocalAccountPolicy() { BuildDeviceLocalAccountPolicy(); - ASSERT_TRUE(local_policy_mixin_.server()->UpdatePolicy( + policy_test_server_mixin_.UpdatePolicy( policy::dm_protocol::kChromePublicAccountPolicyType, kAccountId, - device_local_account_policy_.payload().SerializeAsString())); + device_local_account_policy_.payload().SerializeAsString()); } void UploadAndInstallDeviceLocalAccountPolicy() { @@ -665,7 +664,7 @@ em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); policy::DeviceLocalAccountTestHelper::AddPublicSession(&proto, kAccountId); RefreshDevicePolicy(); - ASSERT_TRUE(local_policy_mixin_.UpdateDevicePolicy(proto)); + policy_test_server_mixin_.UpdateDevicePolicy(proto); } void WaitForDisplayName() { @@ -714,7 +713,7 @@ policy::DeviceLocalAccount::TYPE_PUBLIC_SESSION)); policy::DevicePolicyCrosTestHelper policy_helper_; policy::UserPolicyBuilder device_local_account_policy_; - LocalPolicyTestServerMixin local_policy_mixin_{&mixin_host_}; + EmbeddedPolicyTestServerMixin policy_test_server_mixin_{&mixin_host_}; DeviceStateMixin device_state_{ &mixin_host_, DeviceStateMixin::State::OOBE_COMPLETED_CLOUD_ENROLLED}; };
diff --git a/chrome/browser/ash/login/enrollment/enrollment_screen.cc b/chrome/browser/ash/login/enrollment/enrollment_screen.cc index 63eb308..2e536d4 100644 --- a/chrome/browser/ash/login/enrollment/enrollment_screen.cc +++ b/chrome/browser/ash/login/enrollment/enrollment_screen.cc
@@ -271,6 +271,20 @@ } void EnrollmentScreen::ShowImpl() { + // TODO(crbug.com/1271134): Logging as "WARNING" to make sure it's preserved + // in the logs. + LOG(WARNING) << "Show enrollment screen"; + if (view_) + view_->SetEnrollmentController(this); + // Block enrollment on liveboot (OS isn't installed yet and this is trial + // flow). + if (switches::IsOsInstallAllowed()) { + if (view_) + view_->ShowEnrollmentDuringTrialNotAllowedError(); + return; + } + // If TPM can be dynamically configured: show spinner and try taking + // ownership. if (!tpm_checked_ && switches::IsTpmDynamic()) { if (view_) view_->ShowEnrollmentTPMCheckingScreen(); @@ -278,20 +292,8 @@ return; } - // TODO(crbug.com/1271134): Logging as "WARNING" to make sure it's preserved - // in the logs. - LOG(WARNING) << "Show enrollment screen"; - if (view_) - view_->SetEnrollmentController(this); UMA(policy::kMetricEnrollmentTriggered); UpdateFlowType(); - if (switches::IsOsInstallAllowed()) { - if (view_) { - view_->SetIsBrandedBuild(context()->is_branded_build); - view_->ShowEnrollmentCloudReadyNotAllowedError(); - } - return; - } switch (current_auth_) { case AUTH_OAUTH: ShowInteractiveScreen();
diff --git a/chrome/browser/ash/login/enrollment/enrollment_screen_view.h b/chrome/browser/ash/login/enrollment/enrollment_screen_view.h index a8995b9..610dc82 100644 --- a/chrome/browser/ash/login/enrollment/enrollment_screen_view.h +++ b/chrome/browser/ash/login/enrollment/enrollment_screen_view.h
@@ -84,8 +84,8 @@ virtual void ShowUserError(UserErrorType error_type, const std::string& email) = 0; - // Shows error that enrollment is not allowed during CloudReady run. - virtual void ShowEnrollmentCloudReadyNotAllowedError() = 0; + // Shows error that enrollment is not allowed during trial run. + virtual void ShowEnrollmentDuringTrialNotAllowedError() = 0; // Shows the Active Directory domain joining screen. virtual void ShowActiveDirectoryScreen(const std::string& domain_join_config, @@ -116,10 +116,6 @@ virtual void ShowEnrollmentStatus(policy::EnrollmentStatus status) = 0; virtual void Shutdown() = 0; - - // Sets if build is branded or not to show correct error message when OS is - // not installed on the device. - virtual void SetIsBrandedBuild(bool is_branded) = 0; }; } // namespace ash
diff --git a/chrome/browser/ash/login/enrollment/mock_enrollment_screen.h b/chrome/browser/ash/login/enrollment/mock_enrollment_screen.h index c0f54d07..4b98914 100644 --- a/chrome/browser/ash/login/enrollment/mock_enrollment_screen.h +++ b/chrome/browser/ash/login/enrollment/mock_enrollment_screen.h
@@ -50,7 +50,7 @@ MOCK_METHOD(void, ShowUserError, (UserErrorType error_type, const std::string& email)); - MOCK_METHOD(void, ShowEnrollmentCloudReadyNotAllowedError, ()); + MOCK_METHOD(void, ShowEnrollmentDuringTrialNotAllowedError, ()); MOCK_METHOD(void, ShowLicenseTypeSelectionScreen, (const base::DictionaryValue&)); @@ -70,7 +70,6 @@ MOCK_METHOD(void, ShowOtherError, (EnterpriseEnrollmentHelper::OtherError)); MOCK_METHOD(void, ShowEnrollmentStatus, (policy::EnrollmentStatus status)); MOCK_METHOD(void, Shutdown, ()); - MOCK_METHOD(void, SetIsBrandedBuild, (bool is_branded)); private: EnrollmentScreen* screen_ = nullptr;
diff --git a/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.cc b/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.cc index d8a58b8..a4bf429 100644 --- a/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.cc +++ b/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.cc
@@ -40,8 +40,9 @@ } // namespace EmbeddedPolicyTestServerMixin::EmbeddedPolicyTestServerMixin( - InProcessBrowserTestMixinHost* host) - : InProcessBrowserTestMixin(host) {} + InProcessBrowserTestMixinHost* host, + std::initializer_list<Capabilities> capabilities) + : InProcessBrowserTestMixin(host), capabilities_(capabilities) {} EmbeddedPolicyTestServerMixin::~EmbeddedPolicyTestServerMixin() = default; @@ -52,13 +53,22 @@ FakeGaiaMixin::kFakeAuthCode); policy_test_server_->policy_storage()->add_managed_user("*"); - // Create universal signing keys that can sign any domain. - std::vector<policy::SignatureProvider::SigningKey> universal_signing_keys; - universal_signing_keys.push_back(policy::SignatureProvider::SigningKey( - policy::PolicyBuilder::CreateTestSigningKey(), - {{"*", policy::PolicyBuilder::GetTestSigningKeySignature()}})); - policy_test_server_->policy_storage()->signature_provider()->set_signing_keys( - std::move(universal_signing_keys)); + if (!capabilities_.contains(ENABLE_CANNED_SIGNING_KEYS)) { + // Create universal signing keys that can sign any domain. + std::vector<policy::SignatureProvider::SigningKey> universal_signing_keys; + universal_signing_keys.push_back(policy::SignatureProvider::SigningKey( + policy::PolicyBuilder::CreateTestSigningKey(), + {{"*", policy::PolicyBuilder::GetTestSigningKeySignature()}})); + policy_test_server_->policy_storage() + ->signature_provider() + ->set_signing_keys(std::move(universal_signing_keys)); + } + + if (capabilities_.contains(ENABLE_AUTOMATIC_ROTATION_OF_SIGNINGKEYS)) { + policy_test_server_->policy_storage() + ->signature_provider() + ->set_rotate_keys(true); + } // Register default user used in many tests. policy::ClientStorage::ClientInfo client_info; @@ -86,16 +96,30 @@ void EmbeddedPolicyTestServerMixin::UpdateDevicePolicy( const enterprise_management::ChromeDeviceSettingsProto& policy) { - policy_test_server_->policy_storage()->SetPolicyPayload( - policy::dm_protocol::kChromeDevicePolicyType, policy.SerializeAsString()); + UpdatePolicy(policy::dm_protocol::kChromeDevicePolicyType, + policy.SerializeAsString()); } void EmbeddedPolicyTestServerMixin::UpdateUserPolicy( const enterprise_management::CloudPolicySettings& policy, const std::string& policy_user) { policy_test_server_->policy_storage()->set_policy_user(policy_user); - policy_test_server_->policy_storage()->SetPolicyPayload( - policy::dm_protocol::kChromeUserPolicyType, policy.SerializeAsString()); + UpdatePolicy(policy::dm_protocol::kChromeUserPolicyType, + policy.SerializeAsString()); +} + +void EmbeddedPolicyTestServerMixin::UpdatePolicy( + const std::string& type, + const std::string& serialized_policy) { + UpdatePolicy(type, std::string(), serialized_policy); +} + +void EmbeddedPolicyTestServerMixin::UpdatePolicy( + const std::string& type, + const std::string& entity_id, + const std::string& serialized_policy) { + policy_test_server_->policy_storage()->SetPolicyPayload(type, entity_id, + serialized_policy); } void EmbeddedPolicyTestServerMixin::SetUpdateDeviceAttributesPermission(
diff --git a/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.h b/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.h index 0c4bcff..f1bd1f43 100644 --- a/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.h +++ b/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.h
@@ -5,10 +5,12 @@ #ifndef CHROME_BROWSER_ASH_LOGIN_TEST_EMBEDDED_POLICY_TEST_SERVER_MIXIN_H_ #define CHROME_BROWSER_ASH_LOGIN_TEST_EMBEDDED_POLICY_TEST_SERVER_MIXIN_H_ +#include <initializer_list> #include <memory> #include <string> #include "base/command_line.h" +#include "base/containers/flat_set.h" #include "chrome/browser/ash/policy/server_backed_state/server_backed_state_keys_broker.h" #include "chrome/test/base/mixin_based_in_process_browser_test.h" #include "chromeos/system/fake_statistics_provider.h" @@ -28,7 +30,18 @@ // Server is started after SetUp execution. class EmbeddedPolicyTestServerMixin : public InProcessBrowserTestMixin { public: - explicit EmbeddedPolicyTestServerMixin(InProcessBrowserTestMixinHost* host); + enum Capabilities { + // Enables the usage of keys canned into the policy test server, instead of + // the default key returned by PolicyBuilder::CreateTestSigningKey(). + ENABLE_CANNED_SIGNING_KEYS, + // Enables the automatic rotation of the policy signing keys with each + // policy fetch request. + ENABLE_AUTOMATIC_ROTATION_OF_SIGNINGKEYS + }; + + explicit EmbeddedPolicyTestServerMixin( + InProcessBrowserTestMixinHost* host, + std::initializer_list<Capabilities> capabilities = {}); EmbeddedPolicyTestServerMixin(const EmbeddedPolicyTestServerMixin&) = delete; EmbeddedPolicyTestServerMixin& operator=( @@ -44,16 +57,29 @@ void SetUp() override; void SetUpCommandLine(base::CommandLine* command_line) override; - // Updates the device policy blob served by the local policy test server. + // Updates the device policy blob served by the embedded policy test server. + // This does not trigger policy invalidation, hence test authors must manually + // trigger a policy fetch. void UpdateDevicePolicy( const enterprise_management::ChromeDeviceSettingsProto& policy); // Updates user policy blob served by the embedded policy test server. - // `policy_user` - the policy user's email. + // `policy_user` - the policy user's email. This does not trigger policy + // invalidation, hence test authors must manually trigger a policy fetch. void UpdateUserPolicy( const enterprise_management::CloudPolicySettings& policy, const std::string& policy_user); + // Updates policy selected by |type| and optional |entity_id|. The policy is + // set to the proto serialized in |serialized_policy|. This does not trigger + // policy invalidation, hence test authors must manually trigger a policy + // fetch. + void UpdatePolicy(const std::string& type, + const std::string& serialized_policy); + void UpdatePolicy(const std::string& type, + const std::string& entity_id, + const std::string& serialized_policy); + // Configures whether the server should indicate that the client is // allowed to update device attributes in response to // DeviceAttributeUpdatePermissionRequest. @@ -109,6 +135,7 @@ private: std::unique_ptr<policy::EmbeddedPolicyTestServer> policy_test_server_; + base::flat_set<Capabilities> capabilities_; }; } // namespace ash
diff --git a/chrome/browser/ash/policy/core/device_cloud_policy_browsertest.cc b/chrome/browser/ash/policy/core/device_cloud_policy_browsertest.cc index 52c46c0..6e3dafc 100644 --- a/chrome/browser/ash/policy/core/device_cloud_policy_browsertest.cc +++ b/chrome/browser/ash/policy/core/device_cloud_policy_browsertest.cc
@@ -15,7 +15,7 @@ #include "base/memory/ref_counted.h" #include "base/run_loop.h" #include "base/values.h" -#include "chrome/browser/ash/login/test/local_policy_test_server_mixin.h" +#include "chrome/browser/ash/login/test/embedded_policy_test_server_mixin.h" #include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h" #include "chrome/browser/ash/policy/core/device_cloud_policy_store_ash.h" #include "chrome/browser/ash/policy/core/device_policy_cros_browser_test.h" @@ -81,8 +81,6 @@ KeyRotationDeviceCloudPolicyTest() { UpdateBuiltTestPolicyValue(kInitialPolicyValue); - local_policy_mixin_.EnableCannedSigningKeys(); - local_policy_mixin_.EnableAutomaticRotationOfSigningKeys(); } void SetUpInProcessBrowserTestFixture() override { @@ -110,8 +108,7 @@ } void UpdateServedTestPolicy() { - EXPECT_TRUE( - local_policy_mixin_.UpdateDevicePolicy(device_policy()->payload())); + policy_test_server_mixin_.UpdateDevicePolicy(device_policy()->payload()); } void StartDevicePolicyRefresh() { @@ -191,7 +188,11 @@ } } - ash::LocalPolicyTestServerMixin local_policy_mixin_{&mixin_host_}; + ash::EmbeddedPolicyTestServerMixin policy_test_server_mixin_{ + &mixin_host_, + {ash::EmbeddedPolicyTestServerMixin::ENABLE_CANNED_SIGNING_KEYS, + ash::EmbeddedPolicyTestServerMixin:: + ENABLE_AUTOMATIC_ROTATION_OF_SIGNINGKEYS}}; std::unique_ptr<PolicyChangeRegistrar> policy_change_registrar_; int awaited_policy_value_ = -1; std::unique_ptr<base::RunLoop> policy_change_waiting_run_loop_; @@ -285,11 +286,10 @@ DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture(); SetFakeDevicePolicy(); - EXPECT_TRUE( - local_policy_mixin_.UpdateDevicePolicy(device_policy()->payload())); - EXPECT_TRUE(local_policy_mixin_.server()->UpdatePolicy( + policy_test_server_mixin_.UpdateDevicePolicy(device_policy()->payload()); + policy_test_server_mixin_.UpdatePolicy( dm_protocol::kChromeSigninExtensionPolicyType, kTestExtensionId, - BuildTestComponentPolicyPayload().SerializeAsString())); + BuildTestComponentPolicyPayload().SerializeAsString()); } void SetUpOnMainThread() override { @@ -386,7 +386,7 @@ builder->Build(); } - ash::LocalPolicyTestServerMixin local_policy_mixin_{&mixin_host_}; + ash::EmbeddedPolicyTestServerMixin policy_test_server_mixin_{&mixin_host_}; }; } // namespace
diff --git a/chrome/browser/ash/policy/dlp/dlp_content_manager_ash_browsertest.cc b/chrome/browser/ash/policy/dlp/dlp_content_manager_ash_browsertest.cc index 22e9f73..db627c5c 100644 --- a/chrome/browser/ash/policy/dlp/dlp_content_manager_ash_browsertest.cc +++ b/chrome/browser/ash/policy/dlp/dlp_content_manager_ash_browsertest.cc
@@ -965,9 +965,7 @@ web_contents, blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED); CheckEvents(DlpRulesManager::Restriction::kScreenShare, DlpRulesManager::Level::kBlock, 1u); - // TODO(https://crbug.com/1246386): change below to TRUE after switching to - // CheckScreenShareRestriction which will also show the DLP notification. - EXPECT_FALSE(display_service_tester.GetNotification( + EXPECT_TRUE(display_service_tester.GetNotification( kScreenShareBlockedNotificationId)); histogram_tester_.ExpectBucketCount( GetDlpHistogramPrefix() + dlp::kScreenShareBlockedUMA, true, 1);
diff --git a/chrome/browser/ash/policy/networking/policy_certs_browsertest.cc b/chrome/browser/ash/policy/networking/policy_certs_browsertest.cc index 01d261c..233901fb 100644 --- a/chrome/browser/ash/policy/networking/policy_certs_browsertest.cc +++ b/chrome/browser/ash/policy/networking/policy_certs_browsertest.cc
@@ -20,7 +20,7 @@ #include "chrome/browser/ash/login/existing_user_controller.h" #include "chrome/browser/ash/login/helper.h" #include "chrome/browser/ash/login/startup_utils.h" -#include "chrome/browser/ash/login/test/local_policy_test_server_mixin.h" +#include "chrome/browser/ash/login/test/embedded_policy_test_server_mixin.h" #include "chrome/browser/ash/login/test/login_or_lock_screen_visible_waiter.h" #include "chrome/browser/ash/login/test/oobe_base_test.h" #include "chrome/browser/ash/login/test/oobe_screen_waiter.h" @@ -703,7 +703,7 @@ command_line->AppendSwitch(chromeos::switches::kOobeSkipPostLogin); } - ash::LocalPolicyTestServerMixin local_policy_mixin_{&mixin_host_}; + ash::EmbeddedPolicyTestServerMixin policy_test_server_mixin_{&mixin_host_}; const AccountId device_local_account_id_ = AccountId::FromUserEmail(GenerateDeviceLocalAccountUserId( @@ -731,9 +731,11 @@ account->set_type( em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); RefreshDevicePolicy(); - ASSERT_TRUE(local_policy_mixin_.UpdateDevicePolicy(proto)); + policy_test_server_mixin_.UpdateDevicePolicy(proto); } + // TODO(crbug/874831): Consider migrating to LoggedInMixin and deprecating + // this function. void StartLogin() { ash::WizardController::SkipPostLoginScreensForTesting(); auto* const wizard_controller = ash::WizardController::default_controller();
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc index c52ecfe..bcf2359 100644 --- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc +++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc
@@ -293,10 +293,6 @@ } void MetricReportingManager::InitNetworkCollectors() { - if (!base::FeatureList::IsEnabled(kEnableNetworkTelemetryReporting)) { - return; - } - auto https_latency_sampler = delegate_->CreateHttpsLatencySampler(); auto network_telemetry_sampler = std::make_unique<NetworkTelemetrySampler>(https_latency_sampler.get()); @@ -310,6 +306,10 @@ kReportDeviceNetworkStatusDefaultValue, ::ash::kReportDeviceNetworkTelemetryCollectionRateMs, GetDefaulCollectionRate(kDefaultNetworkTelemetryCollectionRate)); + + if (!base::FeatureList::IsEnabled(kEnableNetworkTelemetryReporting)) { + return; + } // HttpsLatency events. CreatePeriodicEventCollector( std::move(https_latency_sampler),
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc index 86c293e..541e6b7 100644 --- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc +++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc
@@ -132,6 +132,11 @@ int expected_flush_per_period; }; +constexpr char kWifiPath[] = "wifi/path1"; +constexpr char kProfilePath[] = "/profile/path"; +constexpr char kInterfaceName[] = "wlan0"; +constexpr char kServicePath[] = "service/path"; + constexpr int kNetworkHealthRateMs = 60000; class NetworkHealthReportingTest @@ -159,8 +164,6 @@ ::ash::kReportDeviceNetworkTelemetryEventCheckingRateMs, kNetworkHealthRateMs); - const std::string kWifiPath = "wifi/path1"; - const std::string kProfilePath = "/profile/path"; network_handler_test_helper_.profile_test()->AddProfile(kProfilePath, "user_hash"); auto* const device_client = network_handler_test_helper_.device_test(); @@ -169,11 +172,20 @@ device_client->ClearDevices(); service_client->ClearServices(); - device_client->AddDevice(kWifiPath, shill::kTypeEthernet, "ethernet"); - service_client->AddService(kWifiPath, "guid", "name", shill::kTypeWifi, - shill::kStateOnline, + device_client->AddDevice(kWifiPath, shill::kTypeEthernet, kInterfaceName); + device_client->SetDeviceProperty(kWifiPath, shill::kInterfaceProperty, + base::Value(kInterfaceName), + /*notify_changed=*/true); + device_client->SetDeviceProperty(kWifiPath, shill::kInterfaceProperty, + base::Value(kInterfaceName), + /*notify_changed=*/true); + base::RunLoop().RunUntilIdle(); + service_client->AddService(kServicePath, "guid", "network_name", + shill::kTypeWifi, shill::kStateOnline, /*is_visible=*/true); - service_client->SetServiceProperty(kWifiPath, shill::kProfileProperty, + service_client->SetServiceProperty(kServicePath, shill::kDeviceProperty, + base::Value(kWifiPath)); + service_client->SetServiceProperty(kServicePath, shill::kProfileProperty, base::Value(kProfilePath)); base::RunLoop().RunUntilIdle(); } @@ -203,7 +215,7 @@ 0); auto wireless_interface_info = chromeos::cros_healthd::mojom::WirelessInterfaceInfo::New( - "path1", false, std::move(wireless_link_info)); + kInterfaceName, false, std::move(wireless_link_info)); network_interfaces.push_back( chromeos::cros_healthd::mojom::NetworkInterfaceInfo:: NewWirelessInterfaceInfo(std::move(wireless_interface_info))); @@ -372,7 +384,7 @@ /*telemetry_policy_enabled=*/true, /*latency_verdict=*/RoutineVerdict::PROBLEM, /*expected_info_count=*/0, - /*expected_telemetry_count=*/0, /*expected_event_count=*/0, + /*expected_telemetry_count=*/1, /*expected_event_count=*/0, /*expected_flush_per_period=*/1}, {"Deprovisioned", /*is_feature_enabled=*/true, /*is_deprovisioned=*/true,
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.cc index a00aea45..6709120 100644 --- a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.cc +++ b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.cc
@@ -4,100 +4,62 @@ #include "chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h" +#include <algorithm> +#include <string> #include <utility> +#include <vector> +#include "base/feature_list.h" #include "base/logging.h" +#include "base/task/bind_post_task.h" +#include "base/threading/sequenced_task_runner_handle.h" #include "chrome/browser/ash/policy/reporting/metrics_reporting/cros_healthd_metric_sampler.h" +#include "chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h" #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler.h" #include "chromeos/network/network_type_pattern.h" #include "chromeos/services/cros_healthd/public/cpp/service_connection.h" -#include "chromeos/services/cros_healthd/public/mojom/cros_healthd_probe.mojom.h" #include "components/reporting/proto/synced/metric_data.pb.h" #include "third_party/cros_system_api/dbus/shill/dbus-constants.h" +using ::chromeos::cros_healthd::mojom::NetworkInterfaceInfoPtr; + namespace reporting { namespace { -void HandleNetworkResult( - MetricCallback callback, - MetricData metric_data, - chromeos::cros_healthd::mojom::TelemetryInfoPtr result) { - const auto& network_result = result->network_interface_result; - if (network_result.is_null()) { - std::move(callback).Run(metric_data); - return; +NetworkInterfaceInfoPtr GetWifiNetworkInterfaceInfo( + const std::string& device_path, + const ::chromeos::cros_healthd::mojom::TelemetryInfoPtr& telemetry_info) { + if (device_path.empty() || telemetry_info.is_null() || + telemetry_info->network_interface_result.is_null() || + !telemetry_info->network_interface_result->is_network_interface_info()) { + return nullptr; } - switch (network_result->which()) { - case chromeos::cros_healthd::mojom::NetworkInterfaceResult::Tag::ERROR: { - DVLOG(1) << "cros_healthd: Error getting network result: " - << network_result->get_error()->msg; - break; - } - - case chromeos::cros_healthd::mojom::NetworkInterfaceResult::Tag:: - NETWORK_INTERFACE_INFO: { - for (const auto& network_info : - network_result->get_network_interface_info()) { - // Handle wireless interface telemetry - if (network_info->is_wireless_interface_info()) { - auto* network_telemetry_list = metric_data.mutable_telemetry_data() - ->mutable_networks_telemetry(); - ::reporting::NetworkTelemetry* network_telemetry_out = nullptr; - - const auto& wireless_info = - network_info->get_wireless_interface_info(); - for (int i = 0; i < network_telemetry_list->network_telemetry_size(); - ++i) { - const auto& network = network_telemetry_list->network_telemetry(i); - - // Find a matching network from network health probe. - if (!network.has_device_path()) { - continue; - } - int name_idx = network.device_path().rfind("/"); - if (name_idx == std::string::npos || - name_idx >= network.device_path().length() - 1) { - continue; - } - - // Matching network found. - if (wireless_info->interface_name == - network.device_path().substr(name_idx + 1)) { - network_telemetry_out = - network_telemetry_list->mutable_network_telemetry(i); - // Power management can be set even if the device is not connected - // to an access point. - network_telemetry_out->set_power_management_enabled( - wireless_info->power_management_on); - - // wireless link info is only avialble when the device is - // connected to the access point. - if (wireless_info->wireless_link_info) { - const auto& wireless_link_info = - wireless_info->wireless_link_info; - network_telemetry_out->set_tx_bit_rate_mbps( - wireless_link_info->tx_bit_rate_mbps); - network_telemetry_out->set_rx_bit_rate_mbps( - wireless_link_info->rx_bit_rate_mbps); - network_telemetry_out->set_tx_power_dbm( - wireless_link_info->tx_power_dBm); - network_telemetry_out->set_encryption_on( - wireless_link_info->encyption_on); - network_telemetry_out->set_link_quality( - wireless_link_info->link_quality); - network_telemetry_out->set_access_point_address( - wireless_link_info->access_point_address_str); - } - } - } - } - } - } + auto* const device_state = + ::ash::NetworkHandler::Get()->network_state_handler()->GetDeviceState( + device_path); + if (!device_state) { + return nullptr; } - std::move(callback).Run(std::move(metric_data)); + const std::string& interface_name = device_state->interface(); + const auto& interface_info_list = + telemetry_info->network_interface_result->get_network_interface_info(); + const auto& interface_info_it = std::find_if( + interface_info_list.begin(), interface_info_list.end(), + [&interface_name](const NetworkInterfaceInfoPtr& interface_info) { + return !interface_info.is_null() && + interface_info->is_wireless_interface_info() && + !interface_info->get_wireless_interface_info().is_null() && + interface_info->get_wireless_interface_info()->interface_name == + interface_name; + }); + if (interface_info_it == interface_info_list.end()) { + return nullptr; + } + + return interface_info_it->Clone(); } NetworkConnectionState GetNetworkConnectionState( @@ -139,54 +101,10 @@ } void OnHttpsLatencySamplerCompleted(MetricCallback callback, - MetricData metric_data) { - chromeos::NetworkStateHandler::NetworkStateList network_state_list; - chromeos::NetworkStateHandler* const network_state_handler = - chromeos::NetworkHandler::Get()->network_state_handler(); - network_state_handler->GetNetworkListByType( - chromeos::NetworkTypePattern::Default(), - /*configured_only=*/true, - /*visible_only=*/false, - /*limit=*/0, // no limit to number of results - &network_state_list); - - if (!metric_data.has_telemetry_data()) { - DVLOG(1) - << "Metric data is expected to contain HttpsLatency telemetry data, " - << " but telemetry data is empty."; - } - - auto* const telemetry_data = metric_data.mutable_telemetry_data(); - for (const chromeos::NetworkState* network : network_state_list) { - auto* const network_telemetry = - telemetry_data->mutable_networks_telemetry()->add_network_telemetry(); - network_telemetry->set_guid(network->guid()); - network_telemetry->set_connection_state(GetNetworkConnectionState(network)); - ::chromeos::NetworkTypePattern type = - ::chromeos::NetworkTypePattern::Primitive(network->type()); - network_telemetry->set_type(GetNetworkType(type)); - if (type.Equals(::chromeos::NetworkTypePattern::WiFi())) { - network_telemetry->set_signal_strength(network->signal_strength()); - } - - if (!network->device_path().empty()) { - network_telemetry->set_device_path(network->device_path()); - } - - if (!network->GetIpAddress().empty()) { - network_telemetry->set_ip_address(network->GetIpAddress()); - } - - if (!network->GetGateway().empty()) { - network_telemetry->set_gateway(network->GetGateway()); - } - } - - chromeos::cros_healthd::ServiceConnection::GetInstance()->ProbeTelemetryInfo( - std::vector<chromeos::cros_healthd::mojom::ProbeCategoryEnum>{ - chromeos::cros_healthd::mojom::ProbeCategoryEnum::kNetworkInterface}, - base::BindOnce(HandleNetworkResult, std::move(callback), - std::move(metric_data))); + MetricData network_data, + MetricData latency_data) { + network_data.CheckTypeAndMergeFrom(latency_data); + std::move(callback).Run(std::move(network_data)); } } // namespace @@ -196,7 +114,125 @@ NetworkTelemetrySampler::~NetworkTelemetrySampler() = default; void NetworkTelemetrySampler::Collect(MetricCallback callback) { - https_latency_sampler_->Collect( - base::BindOnce(OnHttpsLatencySamplerCompleted, std::move(callback))); + auto handle_probe_result_cb = + base::BindOnce(&NetworkTelemetrySampler::HandleNetworkTelemetryResult, + weak_ptr_factory_.GetWeakPtr(), std::move(callback)); + ::ash::cros_healthd::ServiceConnection::GetInstance()->ProbeTelemetryInfo( + std::vector<chromeos::cros_healthd::mojom::ProbeCategoryEnum>{ + chromeos::cros_healthd::mojom::ProbeCategoryEnum::kNetworkInterface}, + base::BindPostTask(base::SequencedTaskRunnerHandle::Get(), + std::move(handle_probe_result_cb))); +} + +void NetworkTelemetrySampler::HandleNetworkTelemetryResult( + MetricCallback callback, + ::chromeos::cros_healthd::mojom::TelemetryInfoPtr result) { + bool full_telemetry_reporting_enabled = base::FeatureList::IsEnabled( + MetricReportingManager::kEnableNetworkTelemetryReporting); + + if (result.is_null() || result->network_interface_result.is_null()) { + DVLOG(1) << "cros_healthd: Error getting network result, result is null."; + } else if (result->network_interface_result->is_error()) { + DVLOG(1) << "cros_healthd: Error getting network result: " + << result->network_interface_result->get_error()->msg; + } + + MetricData metric_data; + ::ash::NetworkStateHandler::NetworkStateList network_state_list; + ::ash::NetworkHandler::Get()->network_state_handler()->GetNetworkListByType( + ::ash::NetworkTypePattern::Default(), + /*configured_only=*/true, + /*visible_only=*/false, + /*limit=*/0, // no limit to number of results + &network_state_list); + if (network_state_list.empty()) { + return; + } + + bool should_report = false; + bool should_collect_latency = false; + for (const auto* network : network_state_list) { + bool item_reported = full_telemetry_reporting_enabled; + NetworkTelemetry* network_telemetry = nullptr; + ::ash::NetworkTypePattern type = + ::ash::NetworkTypePattern::Primitive(network->type()); + if (full_telemetry_reporting_enabled) { + if (network->IsOnline()) { + should_collect_latency = true; + } + + network_telemetry = metric_data.mutable_telemetry_data() + ->mutable_networks_telemetry() + ->add_network_telemetry(); + + network_telemetry->set_guid(network->guid()); + + network_telemetry->set_connection_state( + GetNetworkConnectionState(network)); + + if (!network->device_path().empty()) { + network_telemetry->set_device_path(network->device_path()); + } + + if (!network->GetIpAddress().empty()) { + network_telemetry->set_ip_address(network->GetIpAddress()); + } + + if (!network->GetGateway().empty()) { + network_telemetry->set_gateway(network->GetGateway()); + } + } + + if (type.Equals(::ash::NetworkTypePattern::WiFi())) { + const auto& network_interface_info = + GetWifiNetworkInterfaceInfo(network->device_path(), result); + if (!network_interface_info.is_null() && + !network_interface_info->get_wireless_interface_info().is_null()) { + item_reported = true; + if (!network_telemetry) { + network_telemetry = metric_data.mutable_telemetry_data() + ->mutable_networks_telemetry() + ->add_network_telemetry(); + } + const auto& wireless_info = + network_interface_info->get_wireless_interface_info(); + + // Power management can be set even if the device is not connected to an + // access point. + network_telemetry->set_power_management_enabled( + wireless_info->power_management_on); + + // wireless link info is only available when the device is + // connected to the access point. + if (!wireless_info->wireless_link_info.is_null()) { + const auto& wireless_link_info = wireless_info->wireless_link_info; + network_telemetry->set_tx_bit_rate_mbps( + wireless_link_info->tx_bit_rate_mbps); + network_telemetry->set_rx_bit_rate_mbps( + wireless_link_info->rx_bit_rate_mbps); + network_telemetry->set_tx_power_dbm(wireless_link_info->tx_power_dBm); + network_telemetry->set_encryption_on( + wireless_link_info->encyption_on); + network_telemetry->set_link_quality(wireless_link_info->link_quality); + } + } + if (item_reported) { + network_telemetry->set_signal_strength(network->signal_strength()); + } + } + + if (item_reported) { + network_telemetry->set_type(GetNetworkType(type)); + should_report = true; + } + } + + if (should_collect_latency) { + https_latency_sampler_->Collect( + base::BindOnce(OnHttpsLatencySamplerCompleted, std::move(callback), + std::move(metric_data))); + } else if (should_report) { + std::move(callback).Run(std::move(metric_data)); + } } } // namespace reporting
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h index 845a967e..7a4fc979 100644 --- a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h +++ b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_METRICS_REPORTING_NETWORK_NETWORK_TELEMETRY_SAMPLER_H_ #define CHROME_BROWSER_ASH_POLICY_REPORTING_METRICS_REPORTING_NETWORK_NETWORK_TELEMETRY_SAMPLER_H_ +#include "base/memory/weak_ptr.h" +#include "chromeos/services/cros_healthd/public/mojom/cros_healthd_probe.mojom.h" #include "components/reporting/metrics/sampler.h" namespace reporting { @@ -23,7 +25,13 @@ void Collect(MetricCallback callback) override; private: + void HandleNetworkTelemetryResult( + MetricCallback callback, + ::chromeos::cros_healthd::mojom::TelemetryInfoPtr result); + Sampler* const https_latency_sampler_; + + base::WeakPtrFactory<NetworkTelemetrySampler> weak_ptr_factory_{this}; }; } // namespace reporting
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler_unittest.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler_unittest.cc index 0b1de57..a23a7697 100644 --- a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler_unittest.cc +++ b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler_unittest.cc
@@ -11,8 +11,10 @@ #include "base/run_loop.h" #include "base/strings/strcat.h" #include "base/test/bind.h" +#include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/values.h" +#include "chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h" #include "chromeos/dbus/cros_healthd/cros_healthd_client.h" #include "chromeos/dbus/cros_healthd/fake_cros_healthd_client.h" #include "chromeos/dbus/shill/shill_ipconfig_client.h" @@ -25,6 +27,7 @@ #include "components/reporting/metrics/fake_sampler.h" #include "components/reporting/proto/synced/metric_data.pb.h" #include "components/reporting/util/test_support_callbacks.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/cros_system_api/dbus/shill/dbus-constants.h" @@ -32,7 +35,8 @@ namespace { // Wifi constants. -constexpr char kAccessPointAddress[] = "access_point"; +constexpr char kInterfaceName[] = "wlan_main"; +constexpr char kAccessPointAddress[] = "00:00:5e:00:53:af"; constexpr bool kEncryptionOn = true; constexpr bool kPowerManagementOn = true; constexpr int64_t kTxBitRateMbps = 8; @@ -40,12 +44,21 @@ constexpr int64_t kTxPowerDbm = 2; constexpr int64_t kLinkQuality = 1; +// Https latency constants. +constexpr RoutineVerdict kVerdict = RoutineVerdict::PROBLEM; +constexpr HttpsLatencyProblem kLatencyProblem = + HttpsLatencyProblem::VERY_HIGH_LATENCY; +constexpr int64_t kLatencyMs = 3000; + +// Network service constants. +constexpr char kProfilePath[] = "/profile/path"; + struct FakeNetworkData { std::string guid; std::string connection_state; std::string type; int signal_strength; - std::string device_path; + std::string device_name; std::string ip_address; std::string gateway; bool is_portal; @@ -53,142 +66,150 @@ bool is_configured; }; -TelemetryData NetworkTelemetrySamplerTestHelper( - const std::vector<FakeNetworkData>& networks_data) { - MetricData metric_data; - auto* latency_data = metric_data.mutable_telemetry_data() - ->mutable_networks_telemetry() - ->mutable_https_latency_data(); - latency_data->set_verdict(RoutineVerdict::PROBLEM); - latency_data->set_problem(HttpsLatencyProblem::VERY_HIGH_LATENCY); - latency_data->set_latency_ms(3000); - auto https_latency_sampler = std::make_unique<test::FakeSampler>(); - https_latency_sampler->SetMetricData(metric_data); - - chromeos::NetworkHandlerTestHelper network_handler_test_helper; - const std::string profile_path = "/profile/path"; - network_handler_test_helper.profile_test()->AddProfile(profile_path, - "user_hash"); - chromeos::ShillServiceClient::TestInterface* service_client = - network_handler_test_helper.service_test(); - chromeos::ShillIPConfigClient::TestInterface* ip_config_client = - network_handler_test_helper.ip_config_test(); - base::RunLoop().RunUntilIdle(); - service_client->ClearServices(); - - network_handler_test_helper.manager_test()->AddTechnology( - ::chromeos::kTypeTether, true); - for (const auto& network_data : networks_data) { - const std::string service_path = - base::StrCat({"service_path", network_data.guid}); - service_client->AddService(service_path, network_data.guid, "name", - network_data.type, network_data.connection_state, - network_data.is_visible); - service_client->SetServiceProperty( - service_path, shill::kSignalStrengthProperty, - base::Value(network_data.signal_strength)); - ash::NetworkHandler::Get() - ->network_state_handler() - ->SetNetworkChromePortalDetected(service_path, network_data.is_portal); - service_client->SetServiceProperty(service_path, shill::kDeviceProperty, - base::Value(network_data.device_path)); - base::DictionaryValue ip_config_properties; - ip_config_properties.SetKey(shill::kAddressProperty, - base::Value(network_data.ip_address)); - ip_config_properties.SetKey(shill::kGatewayProperty, - base::Value(network_data.gateway)); - const std::string kIPConfigPath = - base::StrCat({"test_ip_config", network_data.guid}); - ip_config_client->AddIPConfig(kIPConfigPath, ip_config_properties); - service_client->SetServiceProperty(service_path, shill::kIPConfigProperty, - base::Value(kIPConfigPath)); - if (network_data.type == shill::kTypeCellular) { - service_client->SetServiceProperty(service_path, shill::kIccidProperty, - base::Value("test_iccid")); - } - if (network_data.is_configured) { - service_client->SetServiceProperty(service_path, shill::kProfileProperty, - base::Value(profile_path)); - } - } - base::RunLoop().RunUntilIdle(); - - TelemetryData result; - NetworkTelemetrySampler network_telemetry_sampler( - https_latency_sampler.get()); - test::TestEvent<MetricData> metric_collect_event; - network_telemetry_sampler.Collect(metric_collect_event.cb()); - result = metric_collect_event.result().telemetry_data(); - - EXPECT_EQ(result.networks_telemetry().https_latency_data().verdict(), - latency_data->verdict()); - EXPECT_EQ(result.networks_telemetry().https_latency_data().problem(), - latency_data->problem()); - EXPECT_EQ(result.networks_telemetry().https_latency_data().latency_ms(), - latency_data->latency_ms()); - return result; -} - -chromeos::cros_healthd::mojom::TelemetryInfoPtr CreateWifiResult( - const std::string& interface_name, - bool power_management_enabled, - const std::string& access_point_address, - int64_t tx_bit_rate_mbps, - int64_t rx_bit_rate_mbps, - int64_t tx_power_dbm, - bool encryption_on, - int64_t link_quality, - int signal_level_dbm) { - auto telemetry_info = chromeos::cros_healthd::mojom::TelemetryInfo::New(); - std::vector<chromeos::cros_healthd::mojom::NetworkInterfaceInfoPtr> +void SetWifiInterfaceData() { + auto telemetry_info = ::chromeos::cros_healthd::mojom::TelemetryInfo::New(); + std::vector<::chromeos::cros_healthd::mojom::NetworkInterfaceInfoPtr> network_interfaces; auto wireless_link_info = - chromeos::cros_healthd::mojom::WirelessLinkInfo::New( - access_point_address, tx_bit_rate_mbps, rx_bit_rate_mbps, - tx_power_dbm, encryption_on, link_quality, signal_level_dbm); + ::chromeos::cros_healthd::mojom::WirelessLinkInfo::New( + kAccessPointAddress, kTxBitRateMbps, kRxBitRateMbps, kTxPowerDbm, + kEncryptionOn, kLinkQuality, -50); auto wireless_interface_info = - chromeos::cros_healthd::mojom::WirelessInterfaceInfo::New( - interface_name, power_management_enabled, - std::move(wireless_link_info)); + ::chromeos::cros_healthd::mojom::WirelessInterfaceInfo::New( + kInterfaceName, kPowerManagementOn, std::move(wireless_link_info)); network_interfaces.push_back( - chromeos::cros_healthd::mojom::NetworkInterfaceInfo:: + ::chromeos::cros_healthd::mojom::NetworkInterfaceInfo:: NewWirelessInterfaceInfo(std::move(wireless_interface_info))); auto network_interface_result = - chromeos::cros_healthd::mojom::NetworkInterfaceResult:: + ::chromeos::cros_healthd::mojom::NetworkInterfaceResult:: NewNetworkInterfaceInfo(std::move(network_interfaces)); telemetry_info->network_interface_result = std::move(network_interface_result); - return telemetry_info; + ::chromeos::cros_healthd::FakeCrosHealthdClient::Get() + ->SetProbeTelemetryInfoResponseForTesting(telemetry_info); } -class NetworkTelemetrySamplerTest : public testing::Test { - public: - NetworkTelemetrySamplerTest() { - chromeos::CrosHealthdClient::InitializeFake(); +std::string DevicePath(const std::string& interface_name) { + return base::StrCat({"device/", interface_name}); +} + +class NetworkTelemetrySamplerTest : public ::testing::Test { + protected: + void SetUp() override { + ::ash::CrosHealthdClient::InitializeFake(); + SetWifiInterfaceData(); + + MetricData metric_data; + auto* latency_data = metric_data.mutable_telemetry_data() + ->mutable_networks_telemetry() + ->mutable_https_latency_data(); + latency_data->set_verdict(kVerdict); + latency_data->set_problem(kLatencyProblem); + latency_data->set_latency_ms(kLatencyMs); + https_latency_sampler_ = std::make_unique<test::FakeSampler>(); + https_latency_sampler_->SetMetricData(metric_data); } - ~NetworkTelemetrySamplerTest() override { + void TearDown() override { chromeos::CrosHealthdClient::Shutdown(); chromeos::cros_healthd::ServiceConnection::GetInstance()->FlushForTesting(); } - protected: + void SetNetworkData(const std::vector<FakeNetworkData>& networks_data, + bool enable_full_network_telemetry_reporting = true) { + scoped_feature_list_.InitWithFeatureState( + MetricReportingManager::kEnableNetworkTelemetryReporting, + enable_full_network_telemetry_reporting); + + auto* const service_client = network_handler_test_helper_.service_test(); + auto* const device_client = network_handler_test_helper_.device_test(); + auto* const ip_config_client = + network_handler_test_helper_.ip_config_test(); + network_handler_test_helper_.profile_test()->AddProfile(kProfilePath, + "user_hash"); + base::RunLoop().RunUntilIdle(); + network_handler_test_helper_.service_test()->ClearServices(); + network_handler_test_helper_.device_test()->ClearDevices(); + network_handler_test_helper_.manager_test()->AddTechnology( + ::chromeos::kTypeTether, true); + + for (const auto& network_data : networks_data) { + const std::string device_path = DevicePath(network_data.device_name); + device_client->AddDevice(device_path, network_data.type, + network_data.device_name); + device_client->SetDeviceProperty(device_path, shill::kInterfaceProperty, + base::Value(network_data.device_name), + /*notify_changed=*/true); + base::RunLoop().RunUntilIdle(); + const std::string service_path = + base::StrCat({"service_path", network_data.guid}); + const std::string network_name = + base::StrCat({"network_name", network_data.guid}); + service_client->AddService( + service_path, network_data.guid, network_name, network_data.type, + network_data.connection_state, network_data.is_visible); + service_client->SetServiceProperty( + service_path, shill::kSignalStrengthProperty, + base::Value(network_data.signal_strength)); + ash::NetworkHandler::Get() + ->network_state_handler() + ->SetNetworkChromePortalDetected(service_path, + network_data.is_portal); + service_client->SetServiceProperty(service_path, shill::kDeviceProperty, + base::Value(device_path)); + base::DictionaryValue ip_config_properties; + ip_config_properties.SetKey(shill::kAddressProperty, + base::Value(network_data.ip_address)); + ip_config_properties.SetKey(shill::kGatewayProperty, + base::Value(network_data.gateway)); + const std::string kIPConfigPath = + base::StrCat({"test_ip_config", network_data.guid}); + ip_config_client->AddIPConfig(kIPConfigPath, ip_config_properties); + service_client->SetServiceProperty(service_path, shill::kIPConfigProperty, + base::Value(kIPConfigPath)); + if (network_data.type == shill::kTypeCellular) { + service_client->SetServiceProperty(service_path, shill::kIccidProperty, + base::Value("test_iccid")); + } + if (network_data.is_configured) { + service_client->SetServiceProperty( + service_path, shill::kProfileProperty, base::Value(kProfilePath)); + } + } + base::RunLoop().RunUntilIdle(); + } + + std::unique_ptr<test::FakeSampler> https_latency_sampler_; + + private: base::test::SingleThreadTaskEnvironment task_environment_; + + ::ash::NetworkHandlerTestHelper network_handler_test_helper_; + + base::test::ScopedFeatureList scoped_feature_list_; }; TEST_F(NetworkTelemetrySamplerTest, CellularConnecting) { const std::vector<FakeNetworkData> networks_data = { {"guid1", shill::kStateConfiguration, shill::kTypeCellular, - 0 /* signal_strength */, "device/path", "192.168.86.25" /* ip_address */, + 0 /* signal_strength */, "cellular0", "192.168.86.25" /* ip_address */, "192.168.86.1" /* gateway */, false /* is_portal */, true /* is_visible */, true /* is_configured */}}; - TelemetryData result = NetworkTelemetrySamplerTestHelper(networks_data); + SetNetworkData(networks_data); + NetworkTelemetrySampler network_telemetry_sampler( + https_latency_sampler_.get()); + test::TestEvent<MetricData> metric_collect_event; + network_telemetry_sampler.Collect(metric_collect_event.cb()); + TelemetryData result = metric_collect_event.result().telemetry_data(); - ASSERT_EQ(result.networks_telemetry().network_telemetry_size(), - networks_data.size()); + // No online networks, no latency data should be collected. + EXPECT_FALSE(result.networks_telemetry().has_https_latency_data()); + + ASSERT_THAT(result.networks_telemetry().network_telemetry(), + ::testing::SizeIs(networks_data.size())); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).guid(), networks_data[0].guid); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).connection_state(), @@ -196,26 +217,48 @@ EXPECT_FALSE( result.networks_telemetry().network_telemetry(0).has_signal_strength()); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).device_path(), - networks_data[0].device_path); + DevicePath(networks_data[0].device_name)); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).ip_address(), networks_data[0].ip_address); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).gateway(), networks_data[0].gateway); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).type(), NetworkType::CELLULAR); + // Make sure wireless interface info wasn't added. + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_tx_bit_rate_mbps()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_rx_bit_rate_mbps()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_tx_power_dbm()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_encryption_on()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_link_quality()); + EXPECT_FALSE(result.networks_telemetry() + .network_telemetry(0) + .has_power_management_enabled()); } TEST_F(NetworkTelemetrySamplerTest, VpnInvisibleNotConnected) { const std::vector<FakeNetworkData> networks_data = { {"guid1", shill::kStateOffline, shill::kTypeVPN, 0 /* signal_strength */, - "device/path", "192.168.86.25" /* ip_address */, - "192.168.86.1" /* gateway */, false /* is_portal */, - false /* is_visible */, true /* is_configured */}}; + "vpn0", "192.168.86.25" /* ip_address */, "192.168.86.1" /* gateway */, + false /* is_portal */, false /* is_visible */, + true /* is_configured */}}; - TelemetryData result = NetworkTelemetrySamplerTestHelper(networks_data); + SetNetworkData(networks_data); + NetworkTelemetrySampler network_telemetry_sampler( + https_latency_sampler_.get()); + test::TestEvent<MetricData> metric_collect_event; + network_telemetry_sampler.Collect(metric_collect_event.cb()); + TelemetryData result = metric_collect_event.result().telemetry_data(); - ASSERT_EQ(result.networks_telemetry().network_telemetry_size(), - networks_data.size()); + // No online networks, no latency data should be collected. + EXPECT_FALSE(result.networks_telemetry().has_https_latency_data()); + + ASSERT_THAT(result.networks_telemetry().network_telemetry(), + ::testing::SizeIs(networks_data.size())); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).guid(), networks_data[0].guid); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).connection_state(), @@ -223,26 +266,49 @@ EXPECT_FALSE( result.networks_telemetry().network_telemetry(0).has_signal_strength()); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).device_path(), - networks_data[0].device_path); + DevicePath(networks_data[0].device_name)); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).ip_address(), networks_data[0].ip_address); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).gateway(), networks_data[0].gateway); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).type(), NetworkType::VPN); + + // Make sure wireless interface info wasn't added. + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_tx_bit_rate_mbps()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_rx_bit_rate_mbps()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_tx_power_dbm()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_encryption_on()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_link_quality()); + EXPECT_FALSE(result.networks_telemetry() + .network_telemetry(0) + .has_power_management_enabled()); } TEST_F(NetworkTelemetrySamplerTest, EthernetPortal) { const std::vector<FakeNetworkData> networks_data = { {"guid1", shill::kStateRedirectFound, shill::kTypeEthernet, - 0 /* signal_strength */, "device/path", "192.168.86.25" /* ip_address */, + 0 /* signal_strength */, "eth0", "192.168.86.25" /* ip_address */, "192.168.86.1" /* gateway */, true /* is_portal */, true /* is_visible */, true /* is_configured */}}; - TelemetryData result = NetworkTelemetrySamplerTestHelper(networks_data); + SetNetworkData(networks_data); + NetworkTelemetrySampler network_telemetry_sampler( + https_latency_sampler_.get()); + test::TestEvent<MetricData> metric_collect_event; + network_telemetry_sampler.Collect(metric_collect_event.cb()); + TelemetryData result = metric_collect_event.result().telemetry_data(); - ASSERT_EQ(result.networks_telemetry().network_telemetry_size(), - networks_data.size()); + // No online networks, no latency data should be collected. + EXPECT_FALSE(result.networks_telemetry().has_https_latency_data()); + + ASSERT_THAT(result.networks_telemetry().network_telemetry(), + ::testing::SizeIs(networks_data.size())); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).guid(), networks_data[0].guid); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).connection_state(), @@ -250,41 +316,63 @@ EXPECT_FALSE( result.networks_telemetry().network_telemetry(0).has_signal_strength()); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).device_path(), - networks_data[0].device_path); + DevicePath(networks_data[0].device_name)); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).ip_address(), networks_data[0].ip_address); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).gateway(), networks_data[0].gateway); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).type(), NetworkType::ETHERNET); + + // Make sure wireless interface info wasn't added. + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_tx_bit_rate_mbps()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_rx_bit_rate_mbps()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_tx_power_dbm()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_encryption_on()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_link_quality()); + EXPECT_FALSE(result.networks_telemetry() + .network_telemetry(0) + .has_power_management_enabled()); } TEST_F(NetworkTelemetrySamplerTest, MixTypesAndConfigurations) { const std::vector<FakeNetworkData> networks_data = { {"guid1", shill::kStateReady, shill::kTypeWifi, 10 /* signal_strength */, - "device/path1", "192.168.86.25" /* ip_address */, - "192.168.86.1" /* gateway */, false /* is_portal */, - true /* is_visible */, false /* is_configured */}, + "wlan0", "192.168.86.25" /* ip_address */, "192.168.86.1" /* gateway */, + false /* is_portal */, true /* is_visible */, false /* is_configured */}, {"guid2", shill::kStateOnline, shill::kTypeWifi, 50 /* signal_strength */, - "device/path3", "192.168.86.26" /* ip_address */, + kInterfaceName, "192.168.86.26" /* ip_address */, "192.168.86.2" /* gateway */, false /* is_portal */, true /* is_visible */, true /* is_configured */}, {"guid3", shill::kStateReady, ::chromeos::kTypeTether, - 0 /* signal_strength */, "device/path2", - "192.168.86.27" /* ip_address */, "192.168.86.3" /* gateway */, - false /* is_portal */, true /* is_visible */, true /* is_configured */}}; + 0 /* signal_strength */, "tether1", "192.168.86.27" /* ip_address */, + "192.168.86.3" /* gateway */, false /* is_portal */, + true /* is_visible */, true /* is_configured */}}; - auto telemetry_info = CreateWifiResult( - "path3", kPowerManagementOn, kAccessPointAddress, kTxBitRateMbps, - kRxBitRateMbps, kTxPowerDbm, kEncryptionOn, kLinkQuality, - /*signal_level=*/0); - chromeos::cros_healthd::FakeCrosHealthdClient::Get() - ->SetProbeTelemetryInfoResponseForTesting(telemetry_info); - TelemetryData result = NetworkTelemetrySamplerTestHelper(networks_data); + SetNetworkData(networks_data); + NetworkTelemetrySampler network_telemetry_sampler( + https_latency_sampler_.get()); + test::TestEvent<MetricData> metric_collect_event; + network_telemetry_sampler.Collect(metric_collect_event.cb()); + TelemetryData result = metric_collect_event.result().telemetry_data(); + + // An online network exists, latency data should be collected. + ASSERT_TRUE(result.networks_telemetry().has_https_latency_data()); + EXPECT_EQ(result.networks_telemetry().https_latency_data().verdict(), + kVerdict); + EXPECT_EQ(result.networks_telemetry().https_latency_data().problem(), + kLatencyProblem); + EXPECT_EQ(result.networks_telemetry().https_latency_data().latency_ms(), + kLatencyMs); // Not configured network is not included - ASSERT_EQ(result.networks_telemetry().network_telemetry_size(), - networks_data.size() - 1); + ASSERT_THAT(result.networks_telemetry().network_telemetry(), + ::testing::SizeIs(networks_data.size() - 1)); // Wifi EXPECT_EQ(result.networks_telemetry().network_telemetry(0).guid(), @@ -294,16 +382,14 @@ EXPECT_EQ(result.networks_telemetry().network_telemetry(0).signal_strength(), networks_data[1].signal_strength); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).device_path(), - networks_data[1].device_path); + DevicePath(networks_data[1].device_name)); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).ip_address(), networks_data[1].ip_address); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).gateway(), networks_data[1].gateway); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).type(), NetworkType::WIFI); - EXPECT_EQ( - result.networks_telemetry().network_telemetry(0).access_point_address(), - kAccessPointAddress); + EXPECT_EQ(result.networks_telemetry().network_telemetry(0).tx_bit_rate_mbps(), kTxBitRateMbps); EXPECT_EQ(result.networks_telemetry().network_telemetry(0).rx_bit_rate_mbps(), @@ -327,17 +413,15 @@ EXPECT_FALSE( result.networks_telemetry().network_telemetry(1).has_signal_strength()); EXPECT_EQ(result.networks_telemetry().network_telemetry(1).device_path(), - networks_data[2].device_path); + DevicePath(networks_data[2].device_name)); EXPECT_EQ(result.networks_telemetry().network_telemetry(1).ip_address(), networks_data[2].ip_address); EXPECT_EQ(result.networks_telemetry().network_telemetry(1).gateway(), networks_data[2].gateway); EXPECT_EQ(result.networks_telemetry().network_telemetry(1).type(), NetworkType::TETHER); + // Make sure wireless info wasn't added to tether. - EXPECT_FALSE(result.networks_telemetry() - .network_telemetry(1) - .has_access_point_address()); EXPECT_FALSE( result.networks_telemetry().network_telemetry(1).has_tx_bit_rate_mbps()); EXPECT_FALSE( @@ -350,7 +434,65 @@ result.networks_telemetry().network_telemetry(1).has_link_quality()); EXPECT_FALSE(result.networks_telemetry() .network_telemetry(1) - .power_management_enabled()); + .has_power_management_enabled()); +} + +TEST_F(NetworkTelemetrySamplerTest, FullNetworkTelemetryReportingDisabled) { + constexpr int64_t kSignalStrength = 70; + const std::vector<FakeNetworkData> networks_data = { + {"guid1", shill::kStateReady, shill::kTypeWifi, 10 /* signal_strength */, + "wlan0", "192.168.86.25" /* ip_address */, "192.168.86.1" /* gateway */, + false /* is_portal */, true /* is_visible */, true /* is_configured */}, + {"guid2", shill::kStateOnline, shill::kTypeWifi, kSignalStrength, + kInterfaceName, "192.168.86.26" /* ip_address */, + "192.168.86.2" /* gateway */, false /* is_portal */, + true /* is_visible */, true /* is_configured */}, + {"guid3", shill::kStateReady, shill::kTypeWifi, 10 /* signal_strength */, + "wlan1", "192.168.86.27" /* ip_address */, "192.168.86.3" /* gateway */, + false /* is_portal */, true /* is_visible */, true /* is_configured */}}; + + SetNetworkData(networks_data, + /*enable_full_network_telemetry_reporting=*/false); + NetworkTelemetrySampler network_telemetry_sampler( + https_latency_sampler_.get()); + test::TestEvent<MetricData> metric_collect_event; + network_telemetry_sampler.Collect(metric_collect_event.cb()); + TelemetryData result = metric_collect_event.result().telemetry_data(); + + // Flag is disabled, no latency data should be collected + EXPECT_FALSE(result.networks_telemetry().has_https_latency_data()); + + // Only cros healhd wifi interface data should be collected. + ASSERT_THAT(result.networks_telemetry().network_telemetry(), + ::testing::SizeIs(1)); + + EXPECT_FALSE(result.networks_telemetry().network_telemetry(0).has_guid()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_connection_state()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_device_path()); + EXPECT_FALSE( + result.networks_telemetry().network_telemetry(0).has_ip_address()); + EXPECT_FALSE(result.networks_telemetry().network_telemetry(0).has_gateway()); + + EXPECT_EQ(result.networks_telemetry().network_telemetry(0).type(), + NetworkType::WIFI); + EXPECT_EQ(result.networks_telemetry().network_telemetry(0).signal_strength(), + kSignalStrength); + EXPECT_EQ(result.networks_telemetry().network_telemetry(0).tx_bit_rate_mbps(), + kTxBitRateMbps); + EXPECT_EQ(result.networks_telemetry().network_telemetry(0).rx_bit_rate_mbps(), + kRxBitRateMbps); + EXPECT_EQ(result.networks_telemetry().network_telemetry(0).tx_power_dbm(), + kTxPowerDbm); + EXPECT_EQ(result.networks_telemetry().network_telemetry(0).encryption_on(), + kEncryptionOn); + EXPECT_EQ(result.networks_telemetry().network_telemetry(0).link_quality(), + kLinkQuality); + EXPECT_EQ(result.networks_telemetry() + .network_telemetry(0) + .power_management_enabled(), + kPowerManagementOn); } } // namespace } // namespace reporting
diff --git a/chrome/browser/ash/throttle_observer.cc b/chrome/browser/ash/throttle_observer.cc index c6fd571..d93a1bc 100644 --- a/chrome/browser/ash/throttle_observer.cc +++ b/chrome/browser/ash/throttle_observer.cc
@@ -5,28 +5,8 @@ #include "chrome/browser/ash/throttle_observer.h" namespace ash { -namespace { -std::string LevelToString(ThrottleObserver::PriorityLevel level) { - switch (level) { - case ThrottleObserver::PriorityLevel::LOW: - return "PriorityLevel::LOW"; - case ThrottleObserver::PriorityLevel::NORMAL: - return "PriorityLevel::NORMAL"; - case ThrottleObserver::PriorityLevel::IMPORTANT: - return "PriorityLevel::IMPORTANT"; - case ThrottleObserver::PriorityLevel::CRITICAL: - return "PriorityLevel::CRITICAL"; - case ThrottleObserver::PriorityLevel::UNKNOWN: - return "PriorityLevel::UNKNOWN"; - } -} - -} // namespace - -ThrottleObserver::ThrottleObserver(ThrottleObserver::PriorityLevel level, - const std::string& name) - : level_(level), name_(name) {} +ThrottleObserver::ThrottleObserver(const std::string& name) : name_(name) {} ThrottleObserver::~ThrottleObserver() = default; @@ -46,21 +26,15 @@ } void ThrottleObserver::SetActive(bool active) { - if (active_ == active) - return; active_ = active; if (callback_) callback_.Run(this); } -std::string ThrottleObserver::GetDebugDescription() const { - return ("ThrottleObserver(" + name() + ", " + LevelToString(level()) + ", " + - (active() ? "active" : "inactive") + ")"); -} - -std::ostream& operator<<(std::ostream& os, - const ThrottleObserver::PriorityLevel& level) { - return os << LevelToString(level); +void ThrottleObserver::SetEnforced(bool enforced) { + enforced_ = enforced; + if (callback_) + callback_.Run(this); } } // namespace ash
diff --git a/chrome/browser/ash/throttle_observer.h b/chrome/browser/ash/throttle_observer.h index 9580137..758afbb 100644 --- a/chrome/browser/ash/throttle_observer.h +++ b/chrome/browser/ash/throttle_observer.h
@@ -23,9 +23,8 @@ public: using ObserverStateChangedCallback = base::RepeatingCallback<void(const ThrottleObserver*)>; - enum class PriorityLevel { UNKNOWN, LOW, NORMAL, IMPORTANT, CRITICAL }; - ThrottleObserver(PriorityLevel level, const std::string& name); + explicit ThrottleObserver(const std::string& name); ThrottleObserver(const ThrottleObserver&) = delete; ThrottleObserver& operator=(const ThrottleObserver&) = delete; @@ -42,21 +41,28 @@ // used. virtual void StopObserving(); - // Sets the observer to active, and runs ObserverStateChanged callback if - // there was a change in state. + // Sets the `active_` variable to `active` and runs + // ObserverStateChangedCallback. When `active` is true, the target is + // unthrottled. When it is false, the target is throttled as long as all other + // observers are also inactive. void SetActive(bool active); - std::string GetDebugDescription() const; + // Sets the `enforced_` variable to `enforced` and runs the callback. When + // the observer is enforced, that observer always controls the target's + // throttling state. If the observer is active, the target is unthrottled. + // When it is inactive, the target is throttled ignoring other observers' + // states. Only one observer at most should be in the enforcing mode. + void SetEnforced(bool enforced); - PriorityLevel level() const { return level_; } - const std::string& name() const { return name_; } bool active() const { return active_; } + bool enforced() const { return enforced_; } + const std::string& name() const { return name_; } protected: content::BrowserContext* context() { return context_; } - const PriorityLevel level_{PriorityLevel::UNKNOWN}; bool active_ = false; + bool enforced_ = false; const std::string name_; // For logging purposes ObserverStateChangedCallback callback_; @@ -64,9 +70,6 @@ content::BrowserContext* context_; }; -std::ostream& operator<<(std::ostream& os, - const ThrottleObserver::PriorityLevel& level); - } // namespace ash // TODO(https://crbug.com/1164001): remove after the migration is finished.
diff --git a/chrome/browser/ash/throttle_observer_unittest.cc b/chrome/browser/ash/throttle_observer_unittest.cc index ab9363e2..343cdcab 100644 --- a/chrome/browser/ash/throttle_observer_unittest.cc +++ b/chrome/browser/ash/throttle_observer_unittest.cc
@@ -12,6 +12,8 @@ namespace ash { +constexpr const char kObserverName[] = "TestObserver"; + class ThrottleObserverTest : public testing::Test, public base::SupportsWeakPtr<ThrottleObserverTest> { @@ -33,16 +35,19 @@ size_t notify_count() const { return notify_count_; } private: - ThrottleObserver observer_{ThrottleObserver::PriorityLevel::LOW, - "TestObserver"}; + ThrottleObserver observer_{kObserverName}; size_t notify_count_{0}; }; // Tests that ThrottleObserver can be constructed and destructed. TEST_F(ThrottleObserverTest, TestConstructDestruct) {} -// Tests that ThrottleObserver notifies observers only when its 'active' -// state changes +// Tests that ThrottleObserver's name is properly set. +TEST_F(ThrottleObserverTest, TestObserverName) { + EXPECT_EQ(kObserverName, observer()->name()); +} + +// Tests that ThrottleObserver notifies observers on SetActive(). TEST_F(ThrottleObserverTest, TestSetActive) { EXPECT_EQ(0U, notify_count()); EXPECT_FALSE(observer()->active()); @@ -53,11 +58,41 @@ observer()->SetActive(true); EXPECT_TRUE(observer()->active()); - EXPECT_EQ(1U, notify_count()); + EXPECT_EQ(2U, notify_count()); observer()->SetActive(false); EXPECT_FALSE(observer()->active()); + EXPECT_EQ(3U, notify_count()); +} + +// Tests that ThrottleObserver notifies observers on SetEnforced(). +TEST_F(ThrottleObserverTest, TestSetEnforced) { + EXPECT_EQ(0U, notify_count()); + EXPECT_FALSE(observer()->enforced()); + + observer()->SetEnforced(true); + EXPECT_TRUE(observer()->enforced()); + EXPECT_EQ(1U, notify_count()); + + observer()->SetEnforced(true); + EXPECT_TRUE(observer()->enforced()); EXPECT_EQ(2U, notify_count()); + + observer()->SetEnforced(false); + EXPECT_FALSE(observer()->enforced()); + EXPECT_EQ(3U, notify_count()); +} + +// Tests that the callback is not called after StopObserving. +TEST_F(ThrottleObserverTest, TestStopObserving) { + observer()->StopObserving(); + EXPECT_EQ(0U, notify_count()); + + observer()->SetActive(true); + EXPECT_EQ(0U, notify_count()); + + observer()->SetEnforced(true); + EXPECT_EQ(0U, notify_count()); } } // namespace ash
diff --git a/chrome/browser/ash/throttle_service.cc b/chrome/browser/ash/throttle_service.cc index ff55f1a2..f9cf473 100644 --- a/chrome/browser/ash/throttle_service.cc +++ b/chrome/browser/ash/throttle_service.cc
@@ -24,6 +24,14 @@ service_observers_.RemoveObserver(observer); } +ThrottleObserver* ThrottleService::GetObserverByName(const std::string& name) { + for (auto& observer : observers_) { + if (observer->name() == name) + return observer.get(); + } + return nullptr; +} + void ThrottleService::NotifyObserverStateChangedForTesting() { OnObserverStateChanged(nullptr); } @@ -35,11 +43,6 @@ StartObservers(); } -void ThrottleService::set_level_for_testing( - ThrottleObserver::PriorityLevel level) { - SetLevel(level); -} - void ThrottleService::AddObserver(std::unique_ptr<ThrottleObserver> observer) { observers_.push_back(std::move(observer)); } @@ -56,38 +59,40 @@ observer->StopObserving(); } -void ThrottleService::SetEnforced(ThrottleObserver::PriorityLevel level) { - if (enforced_level_ == level) - return; - enforced_level_ = level; - OnObserverStateChanged(nullptr); -} - void ThrottleService::OnObserverStateChanged( const ThrottleObserver* changed_observer) { DVLOG(1) << "OnObserverStateChanged: changed throttle observer is " << (changed_observer ? changed_observer->name() : "none"); - ThrottleObserver::PriorityLevel max_level = - ThrottleObserver::PriorityLevel::LOW; ThrottleObserver* effective_observer = nullptr; - if (enforced_level_ == ThrottleObserver::PriorityLevel::UNKNOWN) { - // Auto mode + bool should_throttle = true; + // Check if there's an enforcing observer. + for (auto& observer : observers_) { + if (!observer->enforced()) + continue; + DVLOG(1) << "Enforcing ThrottleObserver is found: name=" << observer->name() + << ", active=" << observer->active(); + should_throttle = !observer->active(); + effective_observer = observer.get(); + break; + } + + if (!effective_observer) { + // No enforcing observer is found. Check if there are one (or more) active + // observer(s). for (auto& observer : observers_) { if (!observer->active()) continue; - DVLOG(1) << "Active Throttle Observer: " - << observer->GetDebugDescription(); - if (observer->level() >= max_level) { - max_level = observer->level(); + DVLOG(1) << "Active ThrottleObserver is found: name=" << observer->name(); + should_throttle = false; + if (!effective_observer) effective_observer = observer.get(); - } + // Do not break; here to LOG all active observers. Treat the first one as + // an effective observer. } - } else { - // Enforced mode - max_level = enforced_level_; - DVLOG(1) << "Throttle is enforced to " << enforced_level_; + if (!effective_observer) + DVLOG(1) << "All ThrottleObserver(s) are inactive"; } if (effective_observer != last_effective_observer_) { @@ -102,17 +107,15 @@ last_effective_observer_ = effective_observer; } - SetLevel(max_level); -} - -void ThrottleService::SetLevel(ThrottleObserver::PriorityLevel level) { - if (level_ == level) + if (should_throttle_ && (*should_throttle_ == should_throttle)) return; - level_ = level; - ThrottleInstance(level); + + // Do the actual throttling. + should_throttle_ = should_throttle; + ThrottleInstance(*should_throttle_); for (auto& observer : service_observers_) - observer.OnThrottle(level); + observer.OnThrottle(*should_throttle_); } } // namespace ash
diff --git a/chrome/browser/ash/throttle_service.h b/chrome/browser/ash/throttle_service.h index 8a21aa7..14ad5868 100644 --- a/chrome/browser/ash/throttle_service.h +++ b/chrome/browser/ash/throttle_service.h
@@ -13,6 +13,7 @@ #include "base/observer_list.h" #include "base/time/time.h" #include "chrome/browser/ash/throttle_observer.h" +#include "third_party/abseil-cpp/absl/types/optional.h" namespace content { class BrowserContext; @@ -20,17 +21,19 @@ namespace ash { -// This class is the base for different throttle services on ChromeOS. +// This class is the base for different throttle services on Chrome OS. // The class holds a number of ThrottleObservers which watch for several // conditions. When the observers change from active to inactive or vice-versa, -// OnObserverStateChanged finds the active observer with the highest -// PriorityLevel, and calls ThrottleInstance with that level. +// OnObserverStateChanged checks if there is an active observer and calls +// ThrottleInstance accordingly. class ThrottleService { public: class ServiceObserver : public base::CheckedObserver { public: - // Notifies that throttling has been changed. - virtual void OnThrottle(ThrottleObserver::PriorityLevel level) = 0; + // Notifies that throttling has been changed. If the target is now + // throttled, the function is called with true. It is called with + // false otherwise. + virtual void OnThrottle(bool throttled) = 0; }; explicit ThrottleService(content::BrowserContext* context); @@ -43,38 +46,41 @@ void AddServiceObserver(ServiceObserver* observer); void RemoveServiceObserver(ServiceObserver* observer); + // Returns an observer whose name is |name|. Returns nullptr otherwise. + ThrottleObserver* GetObserverByName(const std::string& name); + // Functions for testing void NotifyObserverStateChangedForTesting(); void SetObserversForTesting( std::vector<std::unique_ptr<ThrottleObserver>> observers); - // Sets enforced mode when level is fixed regardless of other observers. - // Setting this to ThrottleObserver::PriorityLevel::UNKNOWN effectifly - // switches to auto mode. - void SetEnforced(ThrottleObserver::PriorityLevel level); - - ThrottleObserver::PriorityLevel level() const { return level_; } - ThrottleObserver::PriorityLevel enforced_level() const { - return enforced_level_; + bool should_throttle() const { + // When `should_throttle_` hasn't been initialized, return true to throttle + // the target (which is a safer bet for Chrome.) + return !should_throttle_ || *should_throttle_; } - void set_level_for_testing(ThrottleObserver::PriorityLevel level); + + void reset_should_throttle_for_testing() { should_throttle_.reset(); } + const std::vector<std::unique_ptr<ThrottleObserver>>& observers_for_testing() + const { + return observers_; + } protected: void AddObserver(std::unique_ptr<ThrottleObserver> observer); void StartObservers(); void StopObservers(); void OnObserverStateChanged(const ThrottleObserver* changed_observer); - void SetLevel(ThrottleObserver::PriorityLevel level); - // This function is called whenever there is a new level to which the - // cgroup should be throttled. Derived classes should implement - // ThrottleInstance to adjust the throttling state of their relevant cgroup. - virtual void ThrottleInstance(ThrottleObserver::PriorityLevel level) = 0; + // This function is called whenever the target should be throttled or + // unthrottled. Derived classes should implement ThrottleInstance to adjust + // the throttling state of their relevant target. + virtual void ThrottleInstance(bool should_throttle) = 0; - // Whenever there is a change in the effective observer (active observer with - // the highest PriorityLevel), this function is called with the name of the - // previously effective observer and the duration it was effective. Derived - // classes can implement this function to record UMA metrics. + // Whenever there is a change in the effective observer, this function is + // called with the name of the previously effective observer and the duration + // it was effective. Derived classes can implement this function to record UMA + // metrics. virtual void RecordCpuRestrictionDisabledUMA(const std::string& observer_name, base::TimeDelta delta) = 0; @@ -86,10 +92,12 @@ private: content::BrowserContext* const context_; std::vector<std::unique_ptr<ThrottleObserver>> observers_; - ThrottleObserver::PriorityLevel level_{ - ThrottleObserver::PriorityLevel::UNKNOWN}; - ThrottleObserver::PriorityLevel enforced_level_ = { - ThrottleObserver::PriorityLevel::UNKNOWN}; + + // True when the target should be throttled. Use optional<> to make sure this + // service always calls ThrottleInstance() when one of the observers has + // changed for the first time. + absl::optional<bool> should_throttle_; + ThrottleObserver* last_effective_observer_{nullptr}; base::TimeTicks last_throttle_transition_; base::ObserverList<ServiceObserver> service_observers_;
diff --git a/chrome/browser/ash/throttle_service_unittest.cc b/chrome/browser/ash/throttle_service_unittest.cc index 9fe1bfc6..1a4bf11 100644 --- a/chrome/browser/ash/throttle_service_unittest.cc +++ b/chrome/browser/ash/throttle_service_unittest.cc
@@ -20,8 +20,8 @@ ~TestObserver() override = default; // ThrottleService::Observer: - void OnThrottle(ThrottleObserver::PriorityLevel level) override { - last_level_ = level; + void OnThrottle(bool was_throttled) override { + last_was_throttled_ = was_throttled; ++update_count_; } @@ -31,12 +31,11 @@ return update_count; } - ThrottleObserver::PriorityLevel last_level() const { return last_level_; } + bool last_was_throttled() const { return last_was_throttled_; } private: int update_count_ = 0; - ThrottleObserver::PriorityLevel last_level_ = - ThrottleObserver::PriorityLevel::UNKNOWN; + bool last_was_throttled_ = false; TestObserver(TestObserver const&) = delete; TestObserver& operator=(TestObserver const&) = delete; @@ -52,18 +51,16 @@ size_t uma_count() { return record_uma_counter_; } - ThrottleObserver::PriorityLevel last_throttle_level() const { - return last_throttle_level_; - } + bool last_should_throttle() const { return last_should_throttle_; } const std::string& last_recorded_observer_name() { return last_recorded_observer_name_; } private: - void ThrottleInstance(ThrottleObserver::PriorityLevel level) override { + void ThrottleInstance(bool should_throttle) override { ++throttle_instance_count_; - last_throttle_level_ = level; + last_should_throttle_ = should_throttle; } void RecordCpuRestrictionDisabledUMA(const std::string& observer_name, @@ -75,97 +72,62 @@ size_t throttle_instance_count_{0}; size_t record_uma_counter_{0}; std::string last_recorded_observer_name_; - ThrottleObserver::PriorityLevel last_throttle_level_{ - ThrottleObserver::PriorityLevel::UNKNOWN}; + bool last_should_throttle_ = false; }; class ThrottleServiceTest : public testing::Test { public: ThrottleServiceTest() : service_(&profile_) { std::vector<std::unique_ptr<ThrottleObserver>> observers; - observers.push_back(std::make_unique<TestCriticalObserver>(this)); - observers.push_back(std::make_unique<TestLowObserver>(this)); + observers.push_back(std::make_unique<ThrottleObserver>("o1")); + observers.push_back(std::make_unique<ThrottleObserver>("o2")); service_.SetObserversForTesting(std::move(observers)); } ThrottleServiceTest(const ThrottleServiceTest&) = delete; ThrottleServiceTest& operator=(const ThrottleServiceTest&) = delete; - void set_critical_observer(ThrottleObserver* observer) { - critical_observer_ = observer; - } - - void set_low_observer(ThrottleObserver* observer) { - low_observer_ = observer; - } - protected: TestThrottleService* service() { return &service_; } - ThrottleObserver* critical_observer() { return critical_observer_; } - - ThrottleObserver* low_observer() { return low_observer_; } - private: - class TestCriticalObserver : public ThrottleObserver { - public: - explicit TestCriticalObserver(ThrottleServiceTest* test) - : ThrottleObserver(ThrottleObserver::PriorityLevel::CRITICAL, - "CriticalObserver"), - test_(test) { - test_->set_critical_observer(this); - } - ~TestCriticalObserver() override { test_->set_critical_observer(nullptr); } - - private: - ThrottleServiceTest* test_; - }; - class TestLowObserver : public ThrottleObserver { - public: - explicit TestLowObserver(ThrottleServiceTest* test) - : ThrottleObserver(ThrottleObserver::PriorityLevel::LOW, "LowObserver"), - test_(test) { - test_->set_low_observer(this); - } - ~TestLowObserver() override { test_->set_low_observer(nullptr); } - - private: - ThrottleServiceTest* test_; - }; - content::BrowserTaskEnvironment task_environment_; TestingProfile profile_; TestThrottleService service_; - ThrottleObserver* critical_observer_{nullptr}; - ThrottleObserver* low_observer_{nullptr}; }; TEST_F(ThrottleServiceTest, TestConstructDestruct) {} -// Tests that the ThrottleService calls ThrottleInstance with the correct level -// when there is a change in observers, but skips the call if new level is same -// as before. +// Tests that the ThrottleService calls ThrottleInstance with the correct +// throttling when there is a change in observers, but skips the call if new +// throttling is same as before. TEST_F(ThrottleServiceTest, TestOnObserverStateChanged) { EXPECT_EQ(0U, service()->throttle_instance_count()); + // Initially, it is throttled. service()->NotifyObserverStateChangedForTesting(); EXPECT_EQ(1U, service()->throttle_instance_count()); - EXPECT_EQ(ThrottleObserver::PriorityLevel::LOW, - service()->last_throttle_level()); + EXPECT_TRUE(service()->last_should_throttle()); - // ThrottleService level is already LOW, expect no change. - low_observer()->SetActive(true); - EXPECT_EQ(1U, service()->throttle_instance_count()); - - critical_observer()->SetActive(true); + // Activate one of two observers. Verify it is unthrottled. + service()->observers_for_testing()[0]->SetActive(true); EXPECT_EQ(2U, service()->throttle_instance_count()); - EXPECT_EQ(ThrottleObserver::PriorityLevel::CRITICAL, - service()->last_throttle_level()); + EXPECT_FALSE(service()->last_should_throttle()); - critical_observer()->SetActive(false); + // Activate the other observer too. Verify ThrottleInstance() is not called. + service()->observers_for_testing()[1]->SetActive(true); + EXPECT_EQ(2U, service()->throttle_instance_count()); + EXPECT_FALSE(service()->last_should_throttle()); + + // Deactivate one observer. Verify ThrottleInstance() is not called. + service()->observers_for_testing()[1]->SetActive(false); + EXPECT_EQ(2U, service()->throttle_instance_count()); + EXPECT_FALSE(service()->last_should_throttle()); + + // Deactivate the other observer too. Verify ThrottleInstance() is called. + service()->observers_for_testing()[0]->SetActive(false); EXPECT_EQ(3U, service()->throttle_instance_count()); - EXPECT_EQ(ThrottleObserver::PriorityLevel::LOW, - service()->last_throttle_level()); + EXPECT_TRUE(service()->last_should_throttle()); } // Tests that ArcInstanceThrottle records the duration that the effective @@ -173,75 +135,85 @@ TEST_F(ThrottleServiceTest, RecordCpuRestrictionDisabledUMA) { EXPECT_EQ(0U, service()->uma_count()); - // The effective observer transitions from null to critical_observer; no UMA + // The effective observer transitions from null to the first one; no UMA // is recorded yet. - critical_observer()->SetActive(true); - EXPECT_EQ(0U, service()->uma_count()); - low_observer()->SetActive(true); + service()->observers_for_testing()[0]->SetActive(true); EXPECT_EQ(0U, service()->uma_count()); - // The effective observer transitions from critical_observer to low_observer; - // UMA should be recorded for critical_observer. - critical_observer()->SetActive(false); + // The effective observer is still the first one. + service()->observers_for_testing()[1]->SetActive(true); + EXPECT_EQ(0U, service()->uma_count()); + + // The effective observer transitions from the first one to the second one. + // UMA should be recorded for the first one. + service()->observers_for_testing()[0]->SetActive(false); EXPECT_EQ(1U, service()->uma_count()); - EXPECT_EQ(critical_observer()->name(), + EXPECT_EQ(service()->observers_for_testing()[0]->name(), service()->last_recorded_observer_name()); - // Effective observer transitions from low_observer to critical_observer; UMA - // should be recorded for low_observer. - critical_observer()->SetActive(true); + // Effective observer transitions from the second one to the first one. UMA + // should be recorded for the second one. + service()->observers_for_testing()[0]->SetActive(true); EXPECT_EQ(2U, service()->uma_count()); - EXPECT_EQ(low_observer()->name(), service()->last_recorded_observer_name()); + EXPECT_EQ(service()->observers_for_testing()[1]->name(), + service()->last_recorded_observer_name()); - // Effective observer transitions from critical_observer to null; UMA should + // Effective observer transitions from the first one to null; UMA should // be recorded for critical_observer. - low_observer()->SetActive(false); - critical_observer()->SetActive(false); + service()->observers_for_testing()[1]->SetActive(false); + service()->observers_for_testing()[0]->SetActive(false); EXPECT_EQ(3U, service()->uma_count()); - EXPECT_EQ(critical_observer()->name(), + EXPECT_EQ(service()->observers_for_testing()[0]->name(), service()->last_recorded_observer_name()); } // Tests that verifies enforcement mode. TEST_F(ThrottleServiceTest, TestEnforced) { - low_observer()->SetActive(true); - EXPECT_EQ(ThrottleObserver::PriorityLevel::LOW, service()->level()); - service()->SetEnforced(ThrottleObserver::PriorityLevel::NORMAL); - EXPECT_EQ(ThrottleObserver::PriorityLevel::NORMAL, service()->level()); - service()->SetEnforced(ThrottleObserver::PriorityLevel::UNKNOWN); - EXPECT_EQ(ThrottleObserver::PriorityLevel::LOW, service()->level()); + service()->observers_for_testing()[0]->SetActive(false); + service()->observers_for_testing()[1]->SetActive(true); + EXPECT_FALSE(service()->should_throttle()); - low_observer()->SetActive(false); - critical_observer()->SetActive(true); - EXPECT_EQ(ThrottleObserver::PriorityLevel::CRITICAL, - service()->last_throttle_level()); - service()->SetEnforced(ThrottleObserver::PriorityLevel::LOW); - EXPECT_EQ(ThrottleObserver::PriorityLevel::LOW, service()->level()); - service()->SetEnforced(ThrottleObserver::PriorityLevel::UNKNOWN); - EXPECT_EQ(ThrottleObserver::PriorityLevel::CRITICAL, service()->level()); + // Enforce the first observer which is not active. Verify the service is + // throttled. + service()->observers_for_testing()[0]->SetEnforced(true); + EXPECT_TRUE(service()->should_throttle()); + + // Stop enforcing it and verify the service is the service is unthrottled. + service()->observers_for_testing()[0]->SetEnforced(false); + EXPECT_FALSE(service()->should_throttle()); } // Tests that verifies observer notifications. TEST_F(ThrottleServiceTest, TestObservers) { TestObserver test_observer; service()->AddServiceObserver(&test_observer); + + // Activate the second observer. Verify that OnThrottle() is called. EXPECT_EQ(0, test_observer.GetUpdateCountAndReset()); - low_observer()->SetActive(true); - EXPECT_EQ(ThrottleObserver::PriorityLevel::LOW, test_observer.last_level()); - EXPECT_EQ(ThrottleObserver::PriorityLevel::LOW, service()->level()); + service()->observers_for_testing()[1]->SetActive(true); + EXPECT_FALSE(service()->should_throttle()); + EXPECT_FALSE(test_observer.last_was_throttled()); EXPECT_EQ(1, test_observer.GetUpdateCountAndReset()); - low_observer()->SetActive(false); - critical_observer()->SetActive(true); - EXPECT_EQ(ThrottleObserver::PriorityLevel::CRITICAL, - test_observer.last_level()); - EXPECT_EQ(ThrottleObserver::PriorityLevel::CRITICAL, service()->level()); + + // Activate the first observer too. Verify that OnThrottle() is NOT called + // because the throttling is not changed. + service()->observers_for_testing()[0]->SetActive(true); + EXPECT_FALSE(service()->should_throttle()); + EXPECT_FALSE(test_observer.last_was_throttled()); + EXPECT_EQ(0, test_observer.GetUpdateCountAndReset()); + + // Deactivate both. Verify that OnThrottle() is called. + service()->observers_for_testing()[0]->SetActive(false); + EXPECT_EQ(0, test_observer.GetUpdateCountAndReset()); // not yet called + service()->observers_for_testing()[1]->SetActive(false); + EXPECT_TRUE(service()->should_throttle()); + EXPECT_TRUE(test_observer.last_was_throttled()); EXPECT_EQ(1, test_observer.GetUpdateCountAndReset()); + + // Remove the observer. Verify that OnThrottle() is no longer called. service()->RemoveServiceObserver(&test_observer); - critical_observer()->SetActive(false); - low_observer()->SetActive(true); - EXPECT_EQ(ThrottleObserver::PriorityLevel::CRITICAL, - test_observer.last_level()); - EXPECT_EQ(ThrottleObserver::PriorityLevel::LOW, service()->level()); + service()->observers_for_testing()[1]->SetActive(true); + EXPECT_FALSE(service()->should_throttle()); EXPECT_EQ(0, test_observer.GetUpdateCountAndReset()); }
diff --git a/chrome/browser/ash/window_throttle_observer_base.cc b/chrome/browser/ash/window_throttle_observer_base.cc index 6a0e57b..6773260 100644 --- a/chrome/browser/ash/window_throttle_observer_base.cc +++ b/chrome/browser/ash/window_throttle_observer_base.cc
@@ -61,10 +61,8 @@ } // namespace -WindowThrottleObserverBase::WindowThrottleObserverBase( - ThrottleObserver::PriorityLevel level, - std::string name) - : ThrottleObserver(level, name) {} +WindowThrottleObserverBase::WindowThrottleObserverBase(const std::string& name) + : ThrottleObserver(name) {} void WindowThrottleObserverBase::StartObserving( content::BrowserContext* context,
diff --git a/chrome/browser/ash/window_throttle_observer_base.h b/chrome/browser/ash/window_throttle_observer_base.h index ea3c553..aab812ac 100644 --- a/chrome/browser/ash/window_throttle_observer_base.h +++ b/chrome/browser/ash/window_throttle_observer_base.h
@@ -22,8 +22,7 @@ class WindowThrottleObserverBase : public ThrottleObserver, public wm::ActivationChangeObserver { public: - WindowThrottleObserverBase(ThrottleObserver::PriorityLevel level, - std::string name); + explicit WindowThrottleObserverBase(const std::string& name); WindowThrottleObserverBase(const WindowThrottleObserverBase&) = delete; WindowThrottleObserverBase& operator=(const WindowThrottleObserverBase&) =
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc index c7a881b4..ee2d698 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -691,6 +691,12 @@ ContentSettingsType::PERMISSION_AUTOREVOCATION_DATA, delete_begin, delete_end, website_settings_filter); + if (auto* privacy_sandbox_settings = + PrivacySandboxSettingsFactory::GetForProfile(profile_)) { + privacy_sandbox_settings->ClearFledgeJoiningAllowedSettings(delete_begin_, + delete_end_); + } + #if !defined(OS_ANDROID) content::HostZoomMap* zoom_map = content::HostZoomMap::GetDefaultForBrowserContext(profile_);
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index 63e0e97..98a9fb3 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -52,6 +52,7 @@ #include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/permissions/permission_actions_history_factory.h" #include "chrome/browser/permissions/permission_decision_auto_blocker_factory.h" +#include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h" #include "chrome/browser/safe_browsing/safe_browsing_service.h" #include "chrome/browser/signin/chrome_signin_client_factory.h" #include "chrome/browser/signin/test_signin_client_builder.h" @@ -113,6 +114,7 @@ #include "components/permissions/permission_util.h" #include "components/permissions/request_type.h" #include "components/prefs/testing_pref_service.h" +#include "components/privacy_sandbox/privacy_sandbox_settings.h" #include "components/safe_browsing/core/browser/verdict_cache_manager.h" #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h" #include "components/site_isolation/pref_names.h" @@ -2574,6 +2576,55 @@ net::HttpAuth::AUTH_SCHEME_BASIC, net::NetworkIsolationKey())); } +TEST_F(ChromeBrowsingDataRemoverDelegateTest, RemoveFledgeJoinSettings) { + auto* privacy_sandbox_settings = + PrivacySandboxSettingsFactory::GetForProfile(GetProfile()); + + const std::string etld_one = "example.com"; + base::Time setting_time_one = base::Time::Now(); + privacy_sandbox_settings->SetFledgeJoiningAllowed(etld_one, false); + task_environment()->AdvanceClock(base::Days(1)); + + const std::string etld_two = "another-example.com"; + base::Time setting_time_two = base::Time::Now(); + privacy_sandbox_settings->SetFledgeJoiningAllowed(etld_two, false); + task_environment()->AdvanceClock(base::Days(1)); + + const std::string etld_three = "different-example.com"; + base::Time setting_time_three = base::Time::Now(); + privacy_sandbox_settings->SetFledgeJoiningAllowed(etld_three, false); + + EXPECT_FALSE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("https://www.example.com")))); + EXPECT_FALSE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("https://another-example.com")))); + EXPECT_FALSE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("http://different-example.com")))); + + // Apply a deletion targeting the second setting. + BlockUntilBrowsingDataRemoved(setting_time_two - base::Seconds(1), + setting_time_two + base::Seconds(1), + constants::DATA_TYPE_CONTENT_SETTINGS, false); + + EXPECT_FALSE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("https://www.example.com")))); + EXPECT_TRUE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("https://another-example.com")))); + EXPECT_FALSE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("http://different-example.com")))); + + // Apply a deletion targeting the remaining settings. + BlockUntilBrowsingDataRemoved(setting_time_one, setting_time_three, + constants::DATA_TYPE_CONTENT_SETTINGS, false); + + EXPECT_TRUE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("https://www.example.com")))); + EXPECT_TRUE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("https://another-example.com")))); + EXPECT_TRUE(privacy_sandbox_settings->IsFledgeJoiningAllowed( + url::Origin::Create(GURL("http://different-example.com")))); +} + class ChromeBrowsingDataRemoverDelegateBlockPromptsTest : public ChromeBrowsingDataRemoverDelegateTest { public:
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index d7718a6..9d63ff3f 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -303,11 +303,6 @@ #include "printing/backend/win_helper.h" #endif -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !BUILDFLAG(IS_CHROMEOS_ASH) -#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" -#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h" -#endif - #if BUILDFLAG(ENABLE_RLZ) #include "chrome/browser/rlz/chrome_rlz_tracker_delegate.h" #include "components/rlz/rlz_tracker.h" // nogncheck crbug.com/1125897 @@ -1614,16 +1609,6 @@ browser_process_->metrics_service()->LogNeedForCleanShutdown(); #endif // !defined(OS_ANDROID) -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !BUILDFLAG(IS_CHROMEOS_ASH) - // Create the instance of the cloud print proxy service so that it can launch - // the service process if needed. This is needed because the service process - // might have shutdown because an update was available. - // TODO(torne): this should maybe be done with - // BrowserContextKeyedServiceFactory::ServiceIsCreatedWithBrowserContext() - // instead? - CloudPrintProxyServiceFactory::GetForProfile(profile_); -#endif - // This has to come before the first GetInstance() call. PreBrowserStart() // seems like a reasonable place to put this, except on Android, // OfflinePageInfoHandler::Register() below calls GetInstance().
diff --git a/chrome/browser/devtools/devtools_browsertest.cc b/chrome/browser/devtools/devtools_browsertest.cc index 578cdd2..9f07ad4 100644 --- a/chrome/browser/devtools/devtools_browsertest.cc +++ b/chrome/browser/devtools/devtools_browsertest.cc
@@ -1514,7 +1514,7 @@ dir->WriteManifest(extensions::DictionaryBuilder() .Set("name", "Devtools Panel") .Set("version", "1") - // Whitelist the script we stuff into the 'blob:' URL: + // Allow the script we stuff into the 'blob:' URL: .Set("content_security_policy", "script-src 'self' " "'sha256-uv9gxBEOFchPzak3TK6O39RdKxJeZvfha9zOHGam" @@ -1846,7 +1846,7 @@ CloseDevToolsWindow(); } -// Tests that whitelisted unhandled shortcuts are forwarded from inspected page +// Tests that allowed unhandled shortcuts are forwarded from inspected page // into devtools frontend IN_PROC_BROWSER_TEST_F(DevToolsTest, testKeyEventUnhandled) { OpenDevToolsWindow("about:blank", true); @@ -2655,13 +2655,13 @@ testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_; }; -IN_PROC_BROWSER_TEST_F(DevToolsPolicyTest, OpenBlackListedDevTools) { - base::ListValue blacklist; - blacklist.Append("devtools://*"); +IN_PROC_BROWSER_TEST_F(DevToolsPolicyTest, OpenBlockedDevTools) { + base::ListValue blocklist; + blocklist.Append("devtools://*"); policy::PolicyMap policies; - policies.Set(policy::key::kURLBlacklist, policy::POLICY_LEVEL_MANDATORY, + policies.Set(policy::key::kURLBlocklist, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, - blacklist.Clone(), nullptr); + blocklist.Clone(), nullptr); provider_.UpdateChromePolicy(policies); WebContents* wc = browser()->tab_strip_model()->GetActiveWebContents();
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 3766d4c..8c82451 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -2057,6 +2057,14 @@ "expiry_milestone": 100 }, { + "name": "enable-global-vaapi-lock", + "owners": [ + "jeffcchen", + "chromeos-gfx-video@google.com" + ], + "expiry_milestone": 110 + }, + { "name": "enable-google-srp-isolated-prerender-nsp", "owners": [ "//chrome/browser/prefetch/prefetch_proxy/OWNERS" ], "expiry_milestone": 95 @@ -3954,11 +3962,6 @@ "expiry_milestone": 99 }, { - "name": "mobile-identity-consistency-fre", - "owners": [ "aliceywang", "msarda", "triploblastic" ], - "expiry_milestone": 98 - }, - { "name": "modern-tab-strip", "owners": [ "bling-flags@google.com" ], "expiry_milestone": 92
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 4bc6000..0b2b252 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1579,12 +1579,6 @@ const char kMetricsSettingsAndroidDescription[] = "Enables the new design of metrics settings."; -const char kMobileIdentityConsistencyFREName[] = - "Mobile identity consistency FRE"; -const char kMobileIdentityConsistencyFREDescription[] = - "Enables stronger identity consistency on mobile with different UIs for " - "the First Run Experience."; - const char kMojoLinuxChannelSharedMemName[] = "Enable Mojo Shared Memory Channel"; const char kMojoLinuxChannelSharedMemDescription[] = @@ -2565,6 +2559,11 @@ "This feature allows users to snap windows to top and bottom in portrait " "display orientation and maintains left/right snap for landscape display."; +const char kGlobalVaapiLockName[] = "Global lock on the VA-API wrapper."; +const char kGlobalVaapiLockDescription[] = + "Enable or disable the global VA-API lock for platforms and paths that " + "support controlling this."; + const char kVp9kSVCHWDecodingName[] = "Hardware decode acceleration for k-SVC VP9"; const char kVp9kSVCHWDecodingDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 3d15338a..b4c8853 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -905,9 +905,6 @@ extern const char kMetricsSettingsAndroidName[]; extern const char kMetricsSettingsAndroidDescription[]; -extern const char kMobileIdentityConsistencyFREName[]; -extern const char kMobileIdentityConsistencyFREDescription[]; - extern const char kMojoLinuxChannelSharedMemName[]; extern const char kMojoLinuxChannelSharedMemDescription[]; @@ -1461,6 +1458,9 @@ extern const char kVerticalSnapName[]; extern const char kVerticalSnapDescription[]; +extern const char kGlobalVaapiLockName[]; +extern const char kGlobalVaapiLockDescription[]; + extern const char kVp9kSVCHWDecodingName[]; extern const char kVp9kSVCHWDecodingDescription[];
diff --git a/chrome/browser/lifetime/browser_shutdown.cc b/chrome/browser/lifetime/browser_shutdown.cc index d0c32e7..caf885b 100644 --- a/chrome/browser/lifetime/browser_shutdown.cc +++ b/chrome/browser/lifetime/browser_shutdown.cc
@@ -64,10 +64,6 @@ #include "chrome/browser/background/background_mode_manager.h" #endif -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !BUILDFLAG(IS_CHROMEOS_ASH) -#include "chrome/browser/service_process/service_process_control.h" -#endif - #if BUILDFLAG(ENABLE_RLZ) #include "components/rlz/rlz_tracker.h" // nogncheck crbug.com/1125897 #endif @@ -176,10 +172,6 @@ ash::BootTimesRecorder::Get()->AddLogoutTimeMarker("BrowserShutdownStarted", false); #endif -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !BUILDFLAG(IS_CHROMEOS_ASH) - // Shutdown the IPC channel to the service processes. - ServiceProcessControl::GetInstance()->Disconnect(); -#endif // WARNING: During logoff/shutdown (WM_ENDSESSION) we may not have enough // time to get here. If you have something that *must* happen on end session,
diff --git a/chrome/browser/loader/signed_exchange_policy_browsertest.cc b/chrome/browser/loader/signed_exchange_policy_browsertest.cc index 5757d56..1795c2fd 100644 --- a/chrome/browser/loader/signed_exchange_policy_browsertest.cc +++ b/chrome/browser/loader/signed_exchange_policy_browsertest.cc
@@ -57,7 +57,7 @@ content::SignedExchangeBrowserTestHelper sxg_test_helper_; }; -IN_PROC_BROWSER_TEST_F(SignedExchangePolicyBrowserTest, BlackList) { +IN_PROC_BROWSER_TEST_F(SignedExchangePolicyBrowserTest, BlockList) { embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data"); ASSERT_TRUE(embedded_test_server()->Start()); @@ -72,12 +72,12 @@ ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); - base::ListValue blacklist; - blacklist.Append("test.example.org"); + base::ListValue blocklist; + blocklist.Append("test.example.org"); policy::PolicyMap policies; - policies.Set(policy::key::kURLBlacklist, policy::POLICY_LEVEL_MANDATORY, + policies.Set(policy::key::kURLBlocklist, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, - blacklist.Clone(), nullptr); + blocklist.Clone(), nullptr); #if defined(OS_CHROMEOS) policy::SetEnterpriseUsersProfileDefaults(&policies); @@ -86,7 +86,7 @@ base::RunLoop loop; loop.RunUntilIdle(); - // Updates of the URLBlacklist are done on IO, after building the blacklist + // Updates of the URLBlocklist are done on IO, after building the blocklist // on the blocking pool, which is initiated from IO. content::RunAllPendingInMessageLoop(content::BrowserThread::IO); content::RunAllTasksUntilIdle();
diff --git a/chrome/browser/login_detection/login_detection_prefs.cc b/chrome/browser/login_detection/login_detection_prefs.cc index 7200a9a..034ca68 100644 --- a/chrome/browser/login_detection/login_detection_prefs.cc +++ b/chrome/browser/login_detection/login_detection_prefs.cc
@@ -38,8 +38,8 @@ } void SaveSiteToOAuthSignedInList(PrefService* pref_service, const GURL& url) { - DictionaryPrefUpdateDeprecated update(pref_service, kOAuthSignedInSitesPref); - base::DictionaryValue* dict = update.Get(); + DictionaryPrefUpdate update(pref_service, kOAuthSignedInSitesPref); + base::Value* dict = update.Get(); dict->SetKey(GetSiteNameForURL(url), base::TimeToValue(base::Time::Now())); // Try making space by removing sites having invalid sign-in time. This should
diff --git a/chrome/browser/media/webrtc/desktop_capture_access_handler.cc b/chrome/browser/media/webrtc/desktop_capture_access_handler.cc index d95ec5c..0f245ac 100644 --- a/chrome/browser/media/webrtc/desktop_capture_access_handler.cc +++ b/chrome/browser/media/webrtc/desktop_capture_access_handler.cc
@@ -267,6 +267,11 @@ return; } + const bool capture_audio = + pending_request->request.audio_type == + blink::mojom::MediaStreamType::GUM_DESKTOP_AUDIO_CAPTURE && + kIsLoopbackAudioSupported; + #if BUILDFLAG(IS_CHROMEOS_ASH) const content::DesktopMediaID screen_id = content::DesktopMediaID::RegisterNativeWindow( @@ -274,25 +279,21 @@ primary_root_window_for_testing_ ? primary_root_window_for_testing_ : ash::Shell::Get()->GetPrimaryRootWindow()); - if (policy::DlpContentManagerAsh::Get()->IsScreenCaptureRestricted( - screen_id)) { - std::move(pending_request->callback) - .Run(blink::MediaStreamDevices(), - blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED, - /*ui=*/nullptr); - return; - } + // base::Unretained(this) is safe because DesktopCaptureAccessHandler is owned + // by MediaCaptureDevicesDispatcher, which is a lazy singleton which is + // destroyed when the browser process terminates. + policy::DlpContentManagerAsh::Get()->CheckScreenShareRestriction( + screen_id, application_title, + base::BindOnce(&DesktopCaptureAccessHandler::OnDlpRestrictionChecked, + base::Unretained(this), web_contents->GetWeakPtr(), + std::move(pending_request), screen_id, capture_audio)); + return; #else // BUILDFLAG(IS_CHROMEOS_ASH) const content::DesktopMediaID screen_id = content::DesktopMediaID( content::DesktopMediaID::TYPE_SCREEN, webrtc::kFullDesktopScreenId); -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) - - const bool capture_audio = - pending_request->request.audio_type == - blink::mojom::MediaStreamType::GUM_DESKTOP_AUDIO_CAPTURE && - kIsLoopbackAudioSupported; AcceptRequest(web_contents, std::move(pending_request), screen_id, capture_audio); +#endif // !BUILDFLAG(IS_CHROMEOS_ASH) } bool DesktopCaptureAccessHandler::SupportsStreamType( @@ -427,17 +428,6 @@ /*ui=*/nullptr); return; } - -#if BUILDFLAG(IS_CHROMEOS_ASH) - if (policy::DlpContentManagerAsh::Get()->IsScreenCaptureRestricted( - media_id)) { - std::move(pending_request->callback) - .Run(blink::MediaStreamDevices(), - blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED, - /*ui=*/nullptr); - return; - } -#endif #if defined(OS_MAC) if (media_id.type != content::DesktopMediaID::TYPE_WEB_CONTENTS && system_media_permissions::CheckSystemScreenCapturePermission() != @@ -462,8 +452,21 @@ return; } +#if BUILDFLAG(IS_CHROMEOS_ASH) + // base::Unretained(this) is safe because DesktopCaptureAccessHandler is owned + // by MediaCaptureDevicesDispatcher, which is a lazy singleton which is + // destroyed when the browser process terminates. + policy::DlpContentManagerAsh::Get()->CheckScreenShareRestriction( + media_id, pending_request->application_title, + base::BindOnce(&DesktopCaptureAccessHandler::OnDlpRestrictionChecked, + base::Unretained(this), web_contents->GetWeakPtr(), + std::move(pending_request), media_id, + ShouldCaptureAudio(media_id, request))); +#else // BUILDFLAG(IS_CHROMEOS_ASH) AcceptRequest(web_contents, std::move(pending_request), media_id, ShouldCaptureAudio(media_id, request)); + +#endif // !BUILDFLAG(IS_CHROMEOS_ASH) } void DesktopCaptureAccessHandler::ProcessChangeSourceRequest( @@ -474,6 +477,7 @@ blink::mojom::MediaStreamType::GUM_DESKTOP_VIDEO_CAPTURE); if (pending_request->request.requested_video_device_id.empty()) { + // TODO(https://crbug.com/1284714): Remove CreatePicker()'s parameter. pending_request->picker = picker_factory_->CreatePicker(&pending_request->request); if (!pending_request->picker) { @@ -555,6 +559,9 @@ {DesktopMediaList::Type::kWebContents}, web_contents, std::move(includable_web_contents_filter)); + // base::Unretained(this) is safe because DesktopCaptureAccessHandler is owned + // by MediaCaptureDevicesDispatcher, which is a lazy singleton which is + // destroyed when the browser process terminates. DesktopMediaPicker::DoneCallback done_callback = base::BindOnce( &DesktopCaptureAccessHandler::OnPickerDialogResults, base::Unretained(this), web_contents, pending_request.application_title); @@ -605,20 +612,19 @@ /*ui=*/nullptr); } else { #if BUILDFLAG(IS_CHROMEOS_ASH) - if (policy::DlpContentManagerAsh::Get()->IsScreenCaptureRestricted( - media_id)) { - std::move(pending_request->callback) - .Run(blink::MediaStreamDevices(), - blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED, - /*ui=*/nullptr); - } else { - AcceptRequest(web_contents, std::move(pending_request), media_id, - media_id.audio_share); - } -#else + // base::Unretained(this) is safe because DesktopCaptureAccessHandler is + // owned by MediaCaptureDevicesDispatcher, which is a lazy singleton which + // is destroyed when the browser process terminates. + policy::DlpContentManagerAsh::Get()->CheckScreenShareRestriction( + media_id, application_title, + base::BindOnce(&DesktopCaptureAccessHandler::OnDlpRestrictionChecked, + base::Unretained(this), web_contents->GetWeakPtr(), + std::move(pending_request), media_id, + media_id.audio_share)); +#else // BUILDFLAG(IS_CHROMEOS_ASH) AcceptRequest(web_contents, std::move(pending_request), media_id, media_id.audio_share); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // !BUILDFLAG(IS_CHROMEOS_ASH) } if (!queue.empty()) ProcessQueuedAccessRequest(queue, web_contents); @@ -671,3 +677,31 @@ std::move(pending_request->callback) .Run(devices, blink::mojom::MediaStreamRequestResult::OK, std::move(ui)); } + +#if BUILDFLAG(IS_CHROMEOS_ASH) +void DesktopCaptureAccessHandler::OnDlpRestrictionChecked( + base::WeakPtr<content::WebContents> web_contents, + std::unique_ptr<PendingAccessRequest> pending_request, + const content::DesktopMediaID& media_id, + bool capture_audio, + bool is_dlp_allowed) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + if (!web_contents) { + // No need to do anything since WebContents is already destroyed by the time + // this is invoked. + return; + } + + if (!is_dlp_allowed) { + std::move(pending_request->callback) + .Run(blink::MediaStreamDevices(), + blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED, + /*ui=*/nullptr); + return; + } + + AcceptRequest(web_contents.get(), std::move(pending_request), media_id, + capture_audio); +} +#endif
diff --git a/chrome/browser/media/webrtc/desktop_capture_access_handler.h b/chrome/browser/media/webrtc/desktop_capture_access_handler.h index 6b78947..03414bb3 100644 --- a/chrome/browser/media/webrtc/desktop_capture_access_handler.h +++ b/chrome/browser/media/webrtc/desktop_capture_access_handler.h
@@ -108,6 +108,14 @@ WebContentsCollection web_contents_collection_; #if BUILDFLAG(IS_CHROMEOS_ASH) + // Called back after checking Data Leak Prevention (DLP) restrictions. + void OnDlpRestrictionChecked( + base::WeakPtr<content::WebContents> web_contents, + std::unique_ptr<PendingAccessRequest> pending_request, + const content::DesktopMediaID& media_id, + bool capture_audio, + bool is_dlp_allowed); + aura::Window* primary_root_window_for_testing_ = nullptr; #endif };
diff --git a/chrome/browser/media/webrtc/desktop_capture_access_handler_unittest.cc b/chrome/browser/media/webrtc/desktop_capture_access_handler_unittest.cc index 69dff44b..bdf723fb 100644 --- a/chrome/browser/media/webrtc/desktop_capture_access_handler_unittest.cc +++ b/chrome/browser/media/webrtc/desktop_capture_access_handler_unittest.cc
@@ -62,7 +62,8 @@ const GURL& origin, const extensions::Extension* extension, blink::mojom::MediaStreamRequestResult* request_result, - blink::MediaStreamDevices* devices_result) { + blink::MediaStreamDevices* devices_result, + bool expect_result = true) { #if defined(OS_MAC) base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndDisableFeature( @@ -80,7 +81,7 @@ /*region_capture_capable=*/false); base::RunLoop wait_loop; content::MediaResponseCallback callback = base::BindOnce( - [](base::RunLoop* wait_loop, + [](base::RunLoop* wait_loop, bool expect_result, blink::mojom::MediaStreamRequestResult* request_result, blink::MediaStreamDevices* devices_result, const blink::MediaStreamDevices& devices, @@ -88,12 +89,18 @@ std::unique_ptr<content::MediaStreamUI> ui) { *request_result = result; *devices_result = devices; + EXPECT_TRUE(expect_result) << "MediaResponseCallback should not be " + "called when expect_result is false."; wait_loop->Quit(); }, - &wait_loop, request_result, devices_result); + &wait_loop, expect_result, request_result, devices_result); access_handler_->HandleRequest(web_contents(), request, std::move(callback), extension); - wait_loop.Run(); + if (expect_result) { + wait_loop.Run(); + } else { + wait_loop.RunUntilIdle(); + } } void ProcessDeviceUpdateRequest( @@ -361,7 +368,6 @@ extensions::ExtensionBuilder extensionBuilder(kComponentExtension); extensionBuilder.SetLocation(extensions::mojom::ManifestLocation::kComponent); - auto extension = extensionBuilder.Build(); #if BUILDFLAG(IS_CHROMEOS_ASH) std::unique_ptr<aura::Window> primary_root_window = @@ -374,8 +380,8 @@ blink::MediaStreamDevices devices; ProcessGenerateStreamRequest(/*requested_video_device_id=*/std::string(), - GURL(kOrigin), extension.get(), &result, - &devices); + GURL(kOrigin), extensionBuilder.Build().get(), + &result, &devices); EXPECT_EQ(blink::mojom::MediaStreamRequestResult::OK, result); EXPECT_EQ(1u, devices.size()); @@ -387,17 +393,18 @@ policy::MockDlpContentManagerAsh mock_dlp_content_manager; policy::ScopedDlpContentManagerAshForTesting scoped_dlp_content_manager( &mock_dlp_content_manager); - EXPECT_CALL(mock_dlp_content_manager, IsScreenCaptureRestricted(testing::_)) - .Times(1) - .WillOnce(testing::Return(true)); + EXPECT_CALL(mock_dlp_content_manager, CheckScreenShareRestriction) + .WillOnce([&](const content::DesktopMediaID& media_id, + const std::u16string& application_title, + base::OnceCallback<void(bool)> callback) { + std::move(callback).Run(/*should_proceed=*/false); + }); base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kEnableUserMediaScreenCapturing); extensions::ExtensionBuilder extensionBuilder(kComponentExtension); extensionBuilder.SetLocation(extensions::mojom::ManifestLocation::kComponent); - auto extension = extensionBuilder.Build(); - std::unique_ptr<aura::Window> primary_root_window = std::make_unique<aura::Window>(/*delegate=*/nullptr); primary_root_window->Init(ui::LAYER_NOT_DRAWN); @@ -408,8 +415,8 @@ blink::MediaStreamDevices devices; ProcessGenerateStreamRequest(/*requested_video_device_id=*/std::string(), - GURL(kOrigin), extension.get(), &result, - &devices); + GURL(kOrigin), extensionBuilder.Build().get(), + &result, &devices); EXPECT_EQ(blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED, result); EXPECT_EQ(0u, devices.size()); @@ -420,17 +427,18 @@ policy::MockDlpContentManagerAsh mock_dlp_content_manager; policy::ScopedDlpContentManagerAshForTesting scoped_dlp_content_manager( &mock_dlp_content_manager); - EXPECT_CALL(mock_dlp_content_manager, IsScreenCaptureRestricted(testing::_)) - .Times(1) - .WillOnce(testing::Return(false)); + EXPECT_CALL(mock_dlp_content_manager, CheckScreenShareRestriction) + .WillOnce([&](const content::DesktopMediaID& media_id, + const std::u16string& application_title, + base::OnceCallback<void(bool)> callback) { + std::move(callback).Run(/*should_proceed=*/true); + }); base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kEnableUserMediaScreenCapturing); extensions::ExtensionBuilder extensionBuilder(kComponentExtension); extensionBuilder.SetLocation(extensions::mojom::ManifestLocation::kComponent); - auto extension = extensionBuilder.Build(); - std::unique_ptr<aura::Window> primary_root_window = std::make_unique<aura::Window>(/*delegate=*/nullptr); primary_root_window->Init(ui::LAYER_NOT_DRAWN); @@ -441,21 +449,62 @@ blink::MediaStreamDevices devices; ProcessGenerateStreamRequest(/*requested_video_device_id=*/std::string(), - GURL(kOrigin), extension.get(), &result, - &devices); + GURL(kOrigin), extensionBuilder.Build().get(), + &result, &devices); EXPECT_EQ(blink::mojom::MediaStreamRequestResult::OK, result); EXPECT_EQ(1u, devices.size()); } +TEST_F(DesktopCaptureAccessHandlerTest, + ScreenCaptureAccessDlpWebContentsDestroyed) { + // Setup Data Leak Prevention restriction. + policy::MockDlpContentManagerAsh mock_dlp_content_manager; + policy::ScopedDlpContentManagerAshForTesting scoped_dlp_content_manager( + &mock_dlp_content_manager); + EXPECT_CALL(mock_dlp_content_manager, CheckScreenShareRestriction) + .Times(1) + .WillOnce([&](const content::DesktopMediaID& media_id, + const std::u16string& application_title, + base::OnceCallback<void(bool)> callback) { + DeleteContents(); + std::move(callback).Run(/*should_proceed=*/false); + }); + + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kEnableUserMediaScreenCapturing); + + extensions::ExtensionBuilder extensionBuilder(kComponentExtension); + extensionBuilder.SetLocation(extensions::mojom::ManifestLocation::kComponent); + std::unique_ptr<aura::Window> primary_root_window = + std::make_unique<aura::Window>(/*delegate=*/nullptr); + primary_root_window->Init(ui::LAYER_NOT_DRAWN); + SetPrimaryRootWindow(primary_root_window.get()); + + blink::mojom::MediaStreamRequestResult result = + blink::mojom::MediaStreamRequestResult::NOT_SUPPORTED; + blink::MediaStreamDevices devices; + + ProcessGenerateStreamRequest(/*requested_video_device_id=*/std::string(), + GURL(kOrigin), extensionBuilder.Build().get(), + &result, &devices, /*expect_result=*/false); + + EXPECT_EQ(blink::mojom::MediaStreamRequestResult::NOT_SUPPORTED, result); + EXPECT_EQ(0u, devices.size()); +} + TEST_F(DesktopCaptureAccessHandlerTest, GenerateStreamDlpRestricted) { // Setup Data Leak Prevention restriction. policy::MockDlpContentManagerAsh mock_dlp_content_manager; policy::ScopedDlpContentManagerAshForTesting scoped_dlp_content_manager( &mock_dlp_content_manager); - EXPECT_CALL(mock_dlp_content_manager, IsScreenCaptureRestricted(testing::_)) + EXPECT_CALL(mock_dlp_content_manager, CheckScreenShareRestriction) .Times(1) - .WillOnce(testing::Return(true)); + .WillOnce([](const content::DesktopMediaID& media_id, + const std::u16string& application_title, + base::OnceCallback<void(bool)> callback) { + std::move(callback).Run(/*should_proceed=*/false); + }); const std::string id = content::DesktopStreamsRegistry::GetInstance()->RegisterStream( @@ -482,9 +531,13 @@ policy::MockDlpContentManagerAsh mock_dlp_content_manager; policy::ScopedDlpContentManagerAshForTesting scoped_dlp_content_manager( &mock_dlp_content_manager); - EXPECT_CALL(mock_dlp_content_manager, IsScreenCaptureRestricted(testing::_)) + EXPECT_CALL(mock_dlp_content_manager, CheckScreenShareRestriction) .Times(1) - .WillOnce(testing::Return(false)); + .WillOnce([](const content::DesktopMediaID& media_id, + const std::u16string& application_title, + base::OnceCallback<void(bool)> callback) { + std::move(callback).Run(/*should_proceed=*/true); + }); const std::string id = content::DesktopStreamsRegistry::GetInstance()->RegisterStream( @@ -511,9 +564,13 @@ policy::MockDlpContentManagerAsh mock_dlp_content_manager; policy::ScopedDlpContentManagerAshForTesting scoped_dlp_content_manager( &mock_dlp_content_manager); - EXPECT_CALL(mock_dlp_content_manager, IsScreenCaptureRestricted(testing::_)) + EXPECT_CALL(mock_dlp_content_manager, CheckScreenShareRestriction) .Times(1) - .WillOnce(testing::Return(true)); + .WillOnce([](const content::DesktopMediaID& media_id, + const std::u16string& application_title, + base::OnceCallback<void(bool)> callback) { + std::move(callback).Run(/*should_proceed=*/false); + }); blink::mojom::MediaStreamRequestResult result = blink::mojom::MediaStreamRequestResult::NOT_SUPPORTED; @@ -531,9 +588,13 @@ policy::MockDlpContentManagerAsh mock_dlp_content_manager; policy::ScopedDlpContentManagerAshForTesting scoped_dlp_content_manager( &mock_dlp_content_manager); - EXPECT_CALL(mock_dlp_content_manager, IsScreenCaptureRestricted(testing::_)) + EXPECT_CALL(mock_dlp_content_manager, CheckScreenShareRestriction) .Times(1) - .WillOnce(testing::Return(false)); + .WillOnce([](const content::DesktopMediaID& media_id, + const std::u16string& application_title, + base::OnceCallback<void(bool)> callback) { + std::move(callback).Run(/*should_proceed=*/true); + }); blink::mojom::MediaStreamRequestResult result = blink::mojom::MediaStreamRequestResult::NOT_SUPPORTED;
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc b/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc deleted file mode 100644 index 17fb72d..0000000 --- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc +++ /dev/null
@@ -1,104 +0,0 @@ -// Copyright 2017 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/page_load_metrics/observers/previews_ukm_observer.h" - -#include "base/metrics/histogram_functions.h" -#include "base/metrics/histogram_macros.h" -#include "base/time/time.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" -#include "chrome/browser/profiles/profile.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" -#include "components/page_load_metrics/browser/page_load_metrics_observer.h" -#include "components/page_load_metrics/browser/page_load_metrics_util.h" -#include "components/page_load_metrics/common/page_load_timing.h" -#include "content/public/browser/navigation_handle.h" -#include "content/public/browser/web_contents.h" -#include "services/metrics/public/cpp/ukm_builders.h" -#include "services/metrics/public/cpp/ukm_recorder.h" -#include "services/metrics/public/cpp/ukm_source.h" -#include "third_party/abseil-cpp/absl/types/optional.h" - -namespace previews { - -PreviewsUKMObserver::PreviewsUKMObserver() = default; - -PreviewsUKMObserver::~PreviewsUKMObserver() = default; - -page_load_metrics::PageLoadMetricsObserver::ObservePolicy -PreviewsUKMObserver::OnCommit(content::NavigationHandle* navigation_handle, - ukm::SourceId source_id) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - save_data_enabled_ = IsDataSaverEnabled(navigation_handle); - RecordPreviewsTypes(); - return STOP_OBSERVING; -} - -page_load_metrics::PageLoadMetricsObserver::ObservePolicy -PreviewsUKMObserver::OnStart(content::NavigationHandle* navigation_handle, - const GURL& currently_committed_url, - bool started_in_foreground) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!started_in_foreground) - return STOP_OBSERVING; - return CONTINUE_OBSERVING; -} - -page_load_metrics::PageLoadMetricsObserver::ObservePolicy -PreviewsUKMObserver::FlushMetricsOnAppEnterBackground( - const page_load_metrics::mojom::PageLoadTiming& timing) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - RecordPreviewsTypes(); - return STOP_OBSERVING; -} - -page_load_metrics::PageLoadMetricsObserver::ObservePolicy -PreviewsUKMObserver::OnHidden( - const page_load_metrics::mojom::PageLoadTiming& timing) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - RecordPreviewsTypes(); - return STOP_OBSERVING; -} - -void PreviewsUKMObserver::OnComplete( - const page_load_metrics::mojom::PageLoadTiming& timing) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - RecordPreviewsTypes(); -} - -void PreviewsUKMObserver::RecordPreviewsTypes() { - // Only record previews types when they are active. - if (!save_data_enabled_) { - return; - } - - ukm::builders::Previews builder(GetDelegate().GetPageUkmSourceId()); - - if (save_data_enabled_) - builder.Setsave_data_enabled(1); - - builder.Record(ukm::UkmRecorder::Get()); -} - -bool PreviewsUKMObserver::IsDataSaverEnabled( - content::NavigationHandle* navigation_handle) const { - Profile* profile = Profile::FromBrowserContext( - navigation_handle->GetWebContents()->GetBrowserContext()); - - data_reduction_proxy::DataReductionProxySettings* - data_reduction_proxy_settings = - DataReductionProxyChromeSettingsFactory::GetForBrowserContext( - profile); - if (!data_reduction_proxy_settings) { - DCHECK(profile->IsOffTheRecord()); - return false; - } - - return data_reduction_proxy_settings->IsDataReductionProxyEnabled(); -} - -} // namespace previews
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.h b/chrome/browser/page_load_metrics/observers/previews_ukm_observer.h deleted file mode 100644 index 8b8d18ec..0000000 --- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.h +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2017 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_PAGE_LOAD_METRICS_OBSERVERS_PREVIEWS_UKM_OBSERVER_H_ -#define CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_PREVIEWS_UKM_OBSERVER_H_ - -#include "base/sequence_checker.h" -#include "components/optimization_guide/proto/hints.pb.h" -#include "components/page_load_metrics/browser/page_load_metrics_observer.h" - -namespace content { -class NavigationHandle; -} // namespace content - -namespace previews { - -// Observer responsible for appending previews information to the PLM UKM -// report. -class PreviewsUKMObserver : public page_load_metrics::PageLoadMetricsObserver { - public: - PreviewsUKMObserver(); - - PreviewsUKMObserver(const PreviewsUKMObserver&) = delete; - PreviewsUKMObserver& operator=(const PreviewsUKMObserver&) = delete; - - ~PreviewsUKMObserver() override; - - // page_load_metrics::PageLoadMetricsObserver: - ObservePolicy OnStart(content::NavigationHandle* navigation_handle, - const GURL& currently_committed_url, - bool started_in_foreground) override; - ObservePolicy OnCommit(content::NavigationHandle* navigation_handle, - ukm::SourceId source_id) override; - ObservePolicy FlushMetricsOnAppEnterBackground( - const page_load_metrics::mojom::PageLoadTiming& timing) override; - ObservePolicy OnHidden( - const page_load_metrics::mojom::PageLoadTiming& timing) override; - void OnComplete( - const page_load_metrics::mojom::PageLoadTiming& timing) override; - - protected: - // Returns true if data saver feature is enabled in Chrome. Virtualized for - // testing. - virtual bool IsDataSaverEnabled( - content::NavigationHandle* navigation_handle) const; - - private: - void RecordPreviewsTypes(); - - bool save_data_enabled_ = false; - - SEQUENCE_CHECKER(sequence_checker_); -}; - -} // namespace previews - -#endif // CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_PREVIEWS_UKM_OBSERVER_H_
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc deleted file mode 100644 index 79af15aa4..0000000 --- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc +++ /dev/null
@@ -1,144 +0,0 @@ -// Copyright 2017 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/page_load_metrics/observers/previews_ukm_observer.h" - -#include <memory> -#include <unordered_map> - -#include "base/base64.h" -#include "base/metrics/metrics_hashes.h" -#include "build/build_config.h" -#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h" -#include "chrome/test/base/testing_browser_process.h" -#include "components/optimization_guide/proto/hints.pb.h" -#include "components/page_load_metrics/browser/metrics_web_contents_observer.h" -#include "components/page_load_metrics/browser/page_load_metrics_observer.h" -#include "components/page_load_metrics/browser/page_load_tracker.h" -#include "components/ukm/test_ukm_recorder.h" -#include "content/public/test/navigation_simulator.h" -#include "content/public/test/web_contents_tester.h" -#include "net/base/ip_endpoint.h" -#include "services/metrics/public/cpp/ukm_builders.h" -#include "services/metrics/public/cpp/ukm_source.h" -#include "third_party/abseil-cpp/absl/types/optional.h" - -namespace content { -class NavigationHandle; -} - -namespace previews { - -namespace { - -const char kDefaultTestUrl[] = "https://www.google.com/"; - -class TestPreviewsUKMObserver : public PreviewsUKMObserver { - public: - explicit TestPreviewsUKMObserver(bool save_data_enabled) - : save_data_enabled_(save_data_enabled) {} - - TestPreviewsUKMObserver(const TestPreviewsUKMObserver&) = delete; - TestPreviewsUKMObserver& operator=(const TestPreviewsUKMObserver&) = delete; - - ~TestPreviewsUKMObserver() override {} - - // page_load_metrics::PageLoadMetricsObserver implementation: - ObservePolicy OnCommit(content::NavigationHandle* navigation_handle, - ukm::SourceId source_id) override { - return PreviewsUKMObserver::OnCommit(navigation_handle, source_id); - } - - private: - bool IsDataSaverEnabled( - content::NavigationHandle* navigation_handle) const override { - return save_data_enabled_; - } - - const bool save_data_enabled_; -}; - -class PreviewsUKMObserverTest - : public page_load_metrics::PageLoadMetricsObserverTestHarness { - public: - PreviewsUKMObserverTest() {} - - PreviewsUKMObserverTest(const PreviewsUKMObserverTest&) = delete; - PreviewsUKMObserverTest& operator=(const PreviewsUKMObserverTest&) = delete; - - ~PreviewsUKMObserverTest() override {} - - void RunTest(bool save_data_enabled) { - save_data_enabled_ = save_data_enabled; - auto navigation = content::NavigationSimulator::CreateBrowserInitiated( - GURL(kDefaultTestUrl), web_contents()); - - navigation->Commit(); - } - - void ValidatePreviewsUKM(bool save_data_enabled_expected) { - using UkmEntry = ukm::builders::Previews; - auto entries = - tester()->test_ukm_recorder().GetEntriesByName(UkmEntry::kEntryName); - if (!save_data_enabled_expected) { - EXPECT_EQ(0u, entries.size()); - return; - } - EXPECT_EQ(1u, entries.size()); - - const auto* const entry = entries.front(); - tester()->test_ukm_recorder().ExpectEntrySourceHasUrl( - entry, GURL(kDefaultTestUrl)); - - EXPECT_EQ(save_data_enabled_expected, - tester()->test_ukm_recorder().EntryHasMetric( - entry, UkmEntry::ksave_data_enabledName)); - } - - void SetUp() override { - page_load_metrics::PageLoadMetricsObserverTestHarness::SetUp(); - } - - protected: - void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { - tracker->AddObserver( - std::make_unique<TestPreviewsUKMObserver>(save_data_enabled_)); - } - - private: - bool save_data_enabled_ = false; -}; - - -TEST_F(PreviewsUKMObserverTest, DataSaverEnabled) { - RunTest(true); - - tester()->NavigateToUntrackedUrl(); - - ValidatePreviewsUKM(true); -} - - - - -TEST_F(PreviewsUKMObserverTest, CheckReportingForHidden) { - RunTest(true); - - web_contents()->WasHidden(); - - ValidatePreviewsUKM(true); -} - -TEST_F(PreviewsUKMObserverTest, CheckReportingForFlushMetrics) { - RunTest(true); - - tester()->SimulateAppEnterBackground(); - - ValidatePreviewsUKM(true); -} - - -} // namespace - -} // namespace previews
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc index 02a3532f..3ac61f3c 100644 --- a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc
@@ -34,7 +34,6 @@ #include "chrome/browser/page_load_metrics/observers/page_anchors_metrics_observer.h" #include "chrome/browser/page_load_metrics/observers/portal_page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h" -#include "chrome/browser/page_load_metrics/observers/previews_ukm_observer.h" #include "chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/observers/scheme_page_load_metrics_observer.h" #include "chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.h" @@ -126,7 +125,6 @@ std::make_unique<MultiTabLoadingPageLoadMetricsObserver>()); tracker->AddObserver( std::make_unique<OptimizationGuidePageLoadMetricsObserver>()); - tracker->AddObserver(std::make_unique<previews::PreviewsUKMObserver>()); tracker->AddObserver( std::make_unique<ServiceWorkerPageLoadMetricsObserver>()); tracker->AddObserver(
diff --git a/chrome/browser/password_check/android/internal/java/strings/translations/android_password_check_strings_te.xtb b/chrome/browser/password_check/android/internal/java/strings/translations/android_password_check_strings_te.xtb index afb2e978..0c865c9 100644 --- a/chrome/browser/password_check/android/internal/java/strings/translations/android_password_check_strings_te.xtb +++ b/chrome/browser/password_check/android/internal/java/strings/translations/android_password_check_strings_te.xtb
@@ -20,7 +20,7 @@ <translation id="6342069812937806050">ఇప్పుడే</translation> <translation id="6407955178761087876">మీ పాస్వర్డ్ను మార్చడంలో Google Assistantను మీకు సహాయం చేయనివ్వండి</translation> <translation id="7253951228444156601">పాస్వర్డ్లను తనిఖీ చేస్తోంది…</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7693089333295158718">Chrome మీ పాస్వర్డ్లను తనిఖీ చేయలేకపోయింది. మళ్లీ ట్రై చేయండి.</translation> <translation id="7744192722284567281">డేటా ఉల్లంఘనలో కనుగొనబడింది</translation> <translation id="808894953321890993">పాస్వర్డ్ను మార్చు</translation>
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 9e75bab..3691b90 100644 --- a/chrome/browser/password_manager/multi_profile_credentials_filter_unittest.cc +++ b/chrome/browser/password_manager/multi_profile_credentials_filter_unittest.cc
@@ -93,6 +93,13 @@ AccountInfo SetupInterception() { std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); + account_info.full_name = "fullname"; + account_info.given_name = "givenname"; + account_info.hosted_domain = kNoHostedDomainFound; + account_info.locale = "en"; + account_info.picture_url = "https://example.com"; + DCHECK(account_info.IsValid()); + identity_test_env()->UpdateAccountInfoForAccount(account_info); Profile* profile_2 = profile_manager()->CreateTestingProfile("Profile 2"); ProfileAttributesEntry* entry = profile_manager() @@ -263,9 +270,18 @@ g_browser_process->local_state()->SetBoolean(prefs::kBrowserAddPersonEnabled, false); + std::string email = "user@example.org"; + AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); + account_info.full_name = "fullname"; + account_info.given_name = "givenname"; + account_info.hosted_domain = kNoHostedDomainFound; + account_info.locale = "en"; + account_info.picture_url = "https://example.com"; + DCHECK(account_info.IsValid()); + identity_test_env()->UpdateAccountInfoForAccount(account_info); + password_manager::PasswordForm form = - password_manager::SyncUsernameTestBase::SimpleGaiaForm( - "user@example.org"); + password_manager::SyncUsernameTestBase::SimpleGaiaForm(email.c_str()); ASSERT_TRUE(sync_filter_.ShouldSave(form)); // Not interception, credentials should be saved. ASSERT_FALSE(dice_web_signin_interceptor_->is_interception_in_progress());
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service.cc b/chrome/browser/policy/cloud/user_policy_signin_service.cc index 80818844..26d0110 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service.cc
@@ -68,7 +68,10 @@ // in the destructor because we want to shutdown the registration helper // before UserCloudPolicyManager shuts down the CloudPolicyClient. registration_helper_.reset(); - observed_profile_.Reset(); + if (base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync) && + g_browser_process->profile_manager()) { + observed_profile_.Reset(); + } UserPolicySigninServiceBase::PrepareForUserCloudPolicyManagerShutdown(); } @@ -118,8 +121,10 @@ const signin::PrimaryAccountChangeEvent& event) { UserPolicySigninServiceBase::OnPrimaryAccountChanged(event); - if (event.GetEventTypeFor(consent_level()) != - signin::PrimaryAccountChangeEvent::Type::kSet) { + if (event.GetEventTypeFor(signin::ConsentLevel::kSync) != + signin::PrimaryAccountChangeEvent::Type::kSet && + event.GetEventTypeFor(signin::ConsentLevel::kSignin) != + signin::PrimaryAccountChangeEvent::Type::kSet) { return; }
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_base.cc b/chrome/browser/policy/cloud/user_policy_signin_service_base.cc index 515af87..880171b3 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_base.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service_base.cc
@@ -102,18 +102,19 @@ signin::PrimaryAccountChangeEvent::Type::kCleared) { if (base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync)) { ProfileManager* profile_manager = g_browser_process->profile_manager(); - DCHECK(profile_manager); - ProfileAttributesEntry* entry = - profile_manager->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_->GetPath()); - if (entry) - entry->SetUserAcceptedAccountManagement(false); + // Some tests do not have a profile manager. + if (profile_manager) { + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_->GetPath()); + if (entry) + entry->SetUserAcceptedAccountManagement(false); + } + ShutdownUserCloudPolicyManager(); + } else if (event.GetEventTypeFor(signin::ConsentLevel::kSync) == + signin::PrimaryAccountChangeEvent::Type::kCleared) { + ShutdownUserCloudPolicyManager(); } - ShutdownUserCloudPolicyManager(); - } else if (event.GetEventTypeFor(signin::ConsentLevel::kSync) == - signin::PrimaryAccountChangeEvent::Type::kCleared && - !base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync)) { - ShutdownUserCloudPolicyManager(); } } @@ -301,7 +302,8 @@ signin::ConsentLevel::kSignin) : identity_manager()->HasPrimaryAccount( signin::ConsentLevel::kSignin)) && - chrome::enterprise_util::ProfileCanBeManaged(profile()); + (profile_can_be_managed_for_testing_ || + chrome::enterprise_util::ProfileCanBeManaged(profile())); } return check_for_refresh_token
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_base.h b/chrome/browser/policy/cloud/user_policy_signin_service_base.h index 5b5b7b0..ae24882 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_base.h +++ b/chrome/browser/policy/cloud/user_policy_signin_service_base.h
@@ -86,6 +86,10 @@ scoped_refptr<network::SharedURLLoaderFactory> profile_url_loader_factory, PolicyFetchCallback callback); + void set_profile_can_be_managed_for_testing(bool can_be_managed) { + profile_can_be_managed_for_testing_ = can_be_managed; + } + // signin::IdentityManager::Observer implementation: void OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event_details) override; @@ -175,6 +179,7 @@ scoped_refptr<network::SharedURLLoaderFactory> system_url_loader_factory_; signin::ConsentLevel consent_level_; + bool profile_can_be_managed_for_testing_ = false; base::WeakPtrFactory<UserPolicySigninServiceBase> weak_factory_{this}; };
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc b/chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc index 1072fdf..7db6c42 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc
@@ -154,6 +154,8 @@ profile_ = IdentityTestEnvironmentProfileAdaptor:: CreateProfileForIdentityTestEnvironment(builder); + UserPolicySigninServiceFactory::GetForProfile(profile_.get()) + ->set_profile_can_be_managed_for_testing(true); identity_test_env_adaptor_ = std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile_.get());
diff --git a/chrome/browser/policy/system_features_disable_list_policy_handler.cc b/chrome/browser/policy/system_features_disable_list_policy_handler.cc index c65db58..ab0a5dd 100644 --- a/chrome/browser/policy/system_features_disable_list_policy_handler.cc +++ b/chrome/browser/policy/system_features_disable_list_policy_handler.cc
@@ -27,6 +27,7 @@ const char kWebStoreFeature[] = "web_store"; const char kCanvasFeature[] = "canvas"; const char kExploreFeature[] = "explore"; +const char kCroshFeature[] = "crosh"; const char kBlockedDisableMode[] = "blocked"; const char kHiddenDisableMode[] = "hidden"; @@ -116,6 +117,8 @@ return SystemFeature::kCanvas; if (system_feature == kExploreFeature) return SystemFeature::kExplore; + if (system_feature == kCroshFeature) + return SystemFeature::kCrosh; LOG(ERROR) << "Unsupported system feature: " << system_feature; return kUnknownSystemFeature;
diff --git a/chrome/browser/policy/system_features_disable_list_policy_handler.h b/chrome/browser/policy/system_features_disable_list_policy_handler.h index 4ab08f8..6570e01 100644 --- a/chrome/browser/policy/system_features_disable_list_policy_handler.h +++ b/chrome/browser/policy/system_features_disable_list_policy_handler.h
@@ -29,7 +29,8 @@ kCanvas = 6, // The canvas web app on Chrome OS. kGoogleNewsDeprecated = 7, // The Google news app is no longer supported. kExplore = 8, // The explore web app on Chrome OS. - kMaxValue = kExplore + kCrosh = 9, // The Chrome OS shell. + kMaxValue = kCrosh }; // A disabling mode that decides the user experience when a system feature is @@ -48,6 +49,7 @@ extern const char kWebStoreFeature[]; extern const char kCanvasFeature[]; extern const char kExploreFeature[]; +extern const char kCroshFeature[]; extern const char kBlockedDisableMode[]; extern const char kHiddenDisableMode[];
diff --git a/chrome/browser/policy/system_features_disable_list_policy_handler_unittest.cc b/chrome/browser/policy/system_features_disable_list_policy_handler_unittest.cc index 2ec1c73..15ec01c7 100644 --- a/chrome/browser/policy/system_features_disable_list_policy_handler_unittest.cc +++ b/chrome/browser/policy/system_features_disable_list_policy_handler_unittest.cc
@@ -71,12 +71,12 @@ TEST_F(SystemFeaturesDisableListPolicyHandlerTest, ShouldHandleAllSettings) { ApplyPolicySettings({"camera", "os_settings", "browser_settings", "scanning", - "web_store", "canvas", "explore"}); + "web_store", "canvas", "explore", "crosh"}); VerifyPrefList({SystemFeature::kCamera, SystemFeature::kOsSettings, SystemFeature::kBrowserSettings, SystemFeature::kScanning, SystemFeature::kWebStore, SystemFeature::kCanvas, - SystemFeature::kExplore}); + SystemFeature::kExplore, SystemFeature::kCrosh}); std::vector<base::Bucket> expected_histogram{ base::Bucket(SystemFeature::kCamera, 1), @@ -85,7 +85,8 @@ base::Bucket(SystemFeature::kScanning, 1), base::Bucket(SystemFeature::kWebStore, 1), base::Bucket(SystemFeature::kCanvas, 1), - base::Bucket(SystemFeature::kExplore, 1)}; + base::Bucket(SystemFeature::kExplore, 1), + base::Bucket(SystemFeature::kCrosh, 1)}; EXPECT_EQ( histogram_tester_.GetAllSamples(kSystemFeaturesDisableListHistogram),
diff --git a/chrome/browser/predictors/prefetch_manager.cc b/chrome/browser/predictors/prefetch_manager.cc index 1d3dbf1..a2ea4e8 100644 --- a/chrome/browser/predictors/prefetch_manager.cc +++ b/chrome/browser/predictors/prefetch_manager.cc
@@ -59,19 +59,19 @@ "C) Disable 'Make searches and browsing better' under Settings > " " Sync and Google services > Make searches and browsing better" chrome_policy { - URLBlacklist { - URLBlacklist: { entries: '*' } + URLBlocklist { + URLBlocklist: { entries: '*' } } } chrome_policy { - URLWhitelist { - URLWhitelist { } + URLAllowlist { + URLAllowlist { } } } } comments: "This feature can be safely disabled, but enabling it may result in " - "faster page loads. Using either URLBlacklist or URLWhitelist policies " + "faster page loads. Using either URLBlocklist or URLAllowlist policies " "(or a combination of both) limits the scope of these requests." )");
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 41f98c3..63386788 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -1826,6 +1826,9 @@ // Added 01/2022. profile_prefs->ClearPref(kHasSeenLiteModeInfoBar); + // Added 01/2022. + syncer::SyncTransportDataPrefs::MigrateInvalidationVersions(profile_prefs); + // Please don't delete the following line. It is used by PRESUBMIT.py. // END_MIGRATE_OBSOLETE_PROFILE_PREFS }
diff --git a/chrome/browser/printing/cloud_print/DEPS b/chrome/browser/printing/cloud_print/DEPS deleted file mode 100644 index 0c3c5ceb..0000000 --- a/chrome/browser/printing/cloud_print/DEPS +++ /dev/null
@@ -1,5 +0,0 @@ -specific_include_rules = { - ".*test\.cc": [ - "+services/network/network_context.h", - ] -}
diff --git a/chrome/browser/printing/cloud_print/DIR_METADATA b/chrome/browser/printing/cloud_print/DIR_METADATA deleted file mode 100644 index 66c1511..0000000 --- a/chrome/browser/printing/cloud_print/DIR_METADATA +++ /dev/null
@@ -1 +0,0 @@ -mixins: "//cloud_print/COMMON_METADATA"
diff --git a/chrome/browser/printing/cloud_print/OWNERS b/chrome/browser/printing/cloud_print/OWNERS deleted file mode 100644 index be0f423b..0000000 --- a/chrome/browser/printing/cloud_print/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -file://cloud_print/OWNERS
diff --git a/chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc b/chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc deleted file mode 100644 index bf50634..0000000 --- a/chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc +++ /dev/null
@@ -1,224 +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 "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" - -#include <stddef.h> - -#include <memory> -#include <utility> -#include <vector> - -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/command_line.h" -#include "base/files/file_util.h" -#include "base/json/json_reader.h" -#include "base/location.h" -#include "base/strings/utf_string_conversions.h" -#include "base/task/post_task.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/service_process/service_process_control.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/pref_names.h" -#include "components/prefs/pref_service.h" -#include "content/public/browser/browser_thread.h" -#include "extensions/browser/extension_file_task_runner.h" - -using content::BrowserThread; - -namespace { - -void ForwardGetPrintersResult(CloudPrintProxyService::PrintersCallback callback, - const std::vector<std::string>& printers) { - std::move(callback).Run(printers); -} - -std::string ReadCloudPrintSetupProxyList(const base::FilePath& path) { - std::string printers_json; - base::ReadFileToString(path, &printers_json); - return printers_json; -} - -} // namespace - -CloudPrintProxyService::CloudPrintProxyService(Profile* profile) - : profile_(profile) {} - -CloudPrintProxyService::~CloudPrintProxyService() { -} - -void CloudPrintProxyService::Initialize() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (profile_->GetPrefs()->HasPrefPath(prefs::kCloudPrintEmail) && - (!profile_->GetPrefs()->GetString(prefs::kCloudPrintEmail).empty() || - !profile_->GetPrefs()->GetBoolean(prefs::kCloudPrintProxyEnabled))) { - // If the cloud print proxy is enabled, or the policy preventing it from - // being enabled is set, establish a channel with the service process and - // update the status. This will check the policy when the status is sent - // back. - RefreshStatusFromService(); - } - - pref_change_registrar_.Init(profile_->GetPrefs()); - pref_change_registrar_.Add( - prefs::kCloudPrintProxyEnabled, - base::BindRepeating( - base::IgnoreResult( - &CloudPrintProxyService::ApplyCloudPrintConnectorPolicy), - base::Unretained(this))); -} - -void CloudPrintProxyService::RefreshStatusFromService() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - InvokeServiceTask( - base::BindOnce(&CloudPrintProxyService::RefreshCloudPrintProxyStatus, - weak_factory_.GetWeakPtr())); -} - -void CloudPrintProxyService::EnableForUserWithRobot( - const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_preferences) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (profile_->GetPrefs()->GetBoolean(prefs::kCloudPrintProxyEnabled)) { - InvokeServiceTask( - base::BindOnce(&CloudPrintProxyService::EnableCloudPrintProxyWithRobot, - weak_factory_.GetWeakPtr(), robot_auth_code, robot_email, - user_email, std::move(user_preferences))); - } -} - -void CloudPrintProxyService::DisableForUser() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - InvokeServiceTask( - base::BindOnce(&CloudPrintProxyService::DisableCloudPrintProxy, - weak_factory_.GetWeakPtr())); -} - -bool CloudPrintProxyService::ApplyCloudPrintConnectorPolicy() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (!profile_->GetPrefs()->GetBoolean(prefs::kCloudPrintProxyEnabled)) { - std::string email = - profile_->GetPrefs()->GetString(prefs::kCloudPrintEmail); - if (!email.empty()) { - DisableForUser(); - profile_->GetPrefs()->SetString(prefs::kCloudPrintEmail, std::string()); - return false; - } - } - return true; -} - -void CloudPrintProxyService::GetPrinters(PrintersCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (!profile_->GetPrefs()->GetBoolean(prefs::kCloudPrintProxyEnabled)) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), std::vector<std::string>())); - return; - } - - base::FilePath list_path( - base::CommandLine::ForCurrentProcess()->GetSwitchValuePath( - switches::kCloudPrintSetupProxy)); - if (list_path.empty()) { - InvokeServiceTask( - base::BindOnce(&CloudPrintProxyService::GetCloudPrintProxyPrinters, - weak_factory_.GetWeakPtr(), std::move(callback))); - return; - } - - base::PostTaskAndReplyWithResult( - extensions::GetExtensionFileTaskRunner().get(), FROM_HERE, - base::BindOnce(&ReadCloudPrintSetupProxyList, list_path), - base::BindOnce(&CloudPrintProxyService::OnReadCloudPrintSetupProxyList, - weak_factory_.GetWeakPtr(), std::move(callback))); -} - -void CloudPrintProxyService::GetCloudPrintProxyPrinters( - PrintersCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - ServiceProcessControl* process_control = GetServiceProcessControl(); - DCHECK(process_control->IsConnected()); - GetCloudPrintProxy().GetPrinters( - base::BindOnce(&ForwardGetPrintersResult, std::move(callback))); -} - -void CloudPrintProxyService::RefreshCloudPrintProxyStatus() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - ServiceProcessControl* process_control = GetServiceProcessControl(); - DCHECK(process_control->IsConnected()); - auto callback = base::BindOnce(&CloudPrintProxyService::ProxyInfoCallback, - base::Unretained(this)); - GetCloudPrintProxy().GetCloudPrintProxyInfo(std::move(callback)); -} - -void CloudPrintProxyService::EnableCloudPrintProxyWithRobot( - const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_preferences) { - ServiceProcessControl* process_control = GetServiceProcessControl(); - DCHECK(process_control->IsConnected()); - GetCloudPrintProxy().EnableCloudPrintProxyWithRobot( - robot_auth_code, robot_email, user_email, std::move(user_preferences)); - - // Assume the IPC worked. - profile_->GetPrefs()->SetString(prefs::kCloudPrintEmail, user_email); -} - -void CloudPrintProxyService::DisableCloudPrintProxy() { - ServiceProcessControl* process_control = GetServiceProcessControl(); - DCHECK(process_control->IsConnected()); - GetCloudPrintProxy().DisableCloudPrintProxy(); - // Assume the IPC worked. - profile_->GetPrefs()->SetString(prefs::kCloudPrintEmail, std::string()); -} - -void CloudPrintProxyService::ProxyInfoCallback(bool enabled, - const std::string& email, - const std::string& proxy_id) { - proxy_id_ = proxy_id; - profile_->GetPrefs()->SetString(prefs::kCloudPrintEmail, - enabled ? email : std::string()); - ApplyCloudPrintConnectorPolicy(); -} - -bool CloudPrintProxyService::InvokeServiceTask(base::OnceClosure task) { - GetServiceProcessControl()->Launch(std::move(task), base::OnceClosure()); - return true; -} - -ServiceProcessControl* CloudPrintProxyService::GetServiceProcessControl() { - return ServiceProcessControl::GetInstance(); -} - -cloud_print::mojom::CloudPrint& CloudPrintProxyService::GetCloudPrintProxy() { - if (!cloud_print_proxy_ || !cloud_print_proxy_.is_connected()) { - cloud_print_proxy_.reset(); - GetServiceProcessControl()->remote_interfaces().GetInterface( - cloud_print_proxy_.BindNewPipeAndPassReceiver()); - } - return *cloud_print_proxy_; -} - -void CloudPrintProxyService::OnReadCloudPrintSetupProxyList( - PrintersCallback callback, - const std::string& printers_json) { - absl::optional<base::Value> value = base::JSONReader::Read(printers_json); - std::vector<std::string> printers; - if (value && value->is_list()) { - for (const auto& element : value->GetList()) { - if (element.is_string()) - printers.push_back(element.GetString()); - } - } - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), printers)); -}
diff --git a/chrome/browser/printing/cloud_print/cloud_print_proxy_service.h b/chrome/browser/printing/cloud_print/cloud_print_proxy_service.h deleted file mode 100644 index 9c09750..0000000 --- a/chrome/browser/printing/cloud_print/cloud_print_proxy_service.h +++ /dev/null
@@ -1,111 +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 CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_ - -#include <string> -#include <vector> - -#include "base/callback_forward.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/weak_ptr.h" -#include "base/values.h" -#include "build/build_config.h" -#include "build/chromeos_buildflags.h" -#include "chrome/common/cloud_print.mojom.h" -#include "components/keyed_service/core/keyed_service.h" -#include "components/prefs/pref_change_registrar.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "printing/buildflags/buildflags.h" - -#if !BUILDFLAG(ENABLE_PRINT_PREVIEW) || BUILDFLAG(IS_CHROMEOS_ASH) -#error "Print Preview must be enabled / Not supported on ChromeOS" -#endif - -class Profile; -class ServiceProcessControl; - -// Layer between the browser user interface and the cloud print proxy code -// running in the service process. -class CloudPrintProxyService : public KeyedService { - public: - explicit CloudPrintProxyService(Profile* profile); - - CloudPrintProxyService(const CloudPrintProxyService&) = delete; - CloudPrintProxyService& operator=(const CloudPrintProxyService&) = delete; - - ~CloudPrintProxyService() override; - - using PrintersCallback = - base::OnceCallback<void(const std::vector<std::string>&)>; - - // Initializes the object. This should be called every time an object of this - // class is constructed. - void Initialize(); - - // Returns list of printer names available for registration. - void GetPrinters(PrintersCallback callback); - - // Enables/disables cloud printing for the user - virtual void EnableForUserWithRobot(const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_settings); - virtual void DisableForUser(); - - // Query the service process for the status of the cloud print proxy and - // update the browser prefs. - void RefreshStatusFromService(); - - const std::string& proxy_id() const { return proxy_id_; } - - private: - // NotificationDelegate implementation for the token expired notification. - class TokenExpiredNotificationDelegate; - friend class TokenExpiredNotificationDelegate; - - // Methods that send an IPC to the service. - void GetCloudPrintProxyPrinters(PrintersCallback callback); - void RefreshCloudPrintProxyStatus(); - void EnableCloudPrintProxyWithRobot(const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_preferences); - void DisableCloudPrintProxy(); - - // Callback that gets the cloud print proxy info. - void ProxyInfoCallback(bool enabled, - const std::string& email, - const std::string& proxy_id); - - // Invoke a task that gets run after the service process successfully - // launches. The task typically involves sending an IPC to the service - // process. - bool InvokeServiceTask(base::OnceClosure task); - - // Checks the policy. Returns true if nothing needs to be done (the policy is - // not set or the connector is not enabled). - bool ApplyCloudPrintConnectorPolicy(); - - cloud_print::mojom::CloudPrint& GetCloudPrintProxy(); - - // Virtual for testing. - virtual ServiceProcessControl* GetServiceProcessControl(); - - void OnReadCloudPrintSetupProxyList(PrintersCallback callback, - const std::string& printers_json); - - const raw_ptr<Profile> profile_; - std::string proxy_id_; - - // For watching for connector policy changes. - PrefChangeRegistrar pref_change_registrar_; - - mojo::Remote<cloud_print::mojom::CloudPrint> cloud_print_proxy_; - - base::WeakPtrFactory<CloudPrintProxyService> weak_factory_{this}; -}; - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_
diff --git a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.cc b/chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.cc deleted file mode 100644 index dd97c599..0000000 --- a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.cc +++ /dev/null
@@ -1,42 +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 "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h" - -#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" -#include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" - -// static -CloudPrintProxyService* CloudPrintProxyServiceFactory::GetForProfile( - Profile* profile) { - return static_cast<CloudPrintProxyService*>( - GetInstance()->GetServiceForBrowserContext(profile, true)); -} - -CloudPrintProxyServiceFactory* CloudPrintProxyServiceFactory::GetInstance() { - return base::Singleton<CloudPrintProxyServiceFactory>::get(); -} - -CloudPrintProxyServiceFactory::CloudPrintProxyServiceFactory() - : BrowserContextKeyedServiceFactory( - "CloudPrintProxyService", - BrowserContextDependencyManager::GetInstance()) { -} - -CloudPrintProxyServiceFactory::~CloudPrintProxyServiceFactory() { -} - -KeyedService* CloudPrintProxyServiceFactory::BuildServiceInstanceFor( - content::BrowserContext* profile) const { - CloudPrintProxyService* service = - new CloudPrintProxyService(static_cast<Profile*>(profile)); - service->Initialize(); - - return service; -} - -bool CloudPrintProxyServiceFactory::ServiceIsNULLWhileTesting() const { - return true; -}
diff --git a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h b/chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h deleted file mode 100644 index c14d05a4..0000000 --- a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h +++ /dev/null
@@ -1,44 +0,0 @@ -// Copyright (c) 2011 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_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_FACTORY_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_FACTORY_H_ - -#include "base/memory/singleton.h" -#include "build/build_config.h" -#include "build/chromeos_buildflags.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" -#include "printing/buildflags/buildflags.h" - -#if !BUILDFLAG(ENABLE_PRINT_PREVIEW) || BUILDFLAG(IS_CHROMEOS_ASH) -#error "Print Preview must be enabled / Not supported on ChromeOS" -#endif - -class CloudPrintProxyService; -class Profile; - -// Singleton that owns all CloudPrintProxyServices and associates them with -// Profiles. Listens for the Profile's destruction notification and cleans up -// the associated CloudPrintProxyService. -class CloudPrintProxyServiceFactory : public BrowserContextKeyedServiceFactory { - public: - // Returns the CloudPrintProxyService for |profile|, creating if not yet - // created. - static CloudPrintProxyService* GetForProfile(Profile* profile); - - static CloudPrintProxyServiceFactory* GetInstance(); - - private: - friend struct base::DefaultSingletonTraits<CloudPrintProxyServiceFactory>; - - CloudPrintProxyServiceFactory(); - ~CloudPrintProxyServiceFactory() override; - - // BrowserContextKeyedServiceFactory: - KeyedService* BuildServiceInstanceFor( - content::BrowserContext* profile) const override; - bool ServiceIsNULLWhileTesting() const override; -}; - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_FACTORY_H_
diff --git a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc b/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc deleted file mode 100644 index 1e4d705..0000000 --- a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc +++ /dev/null
@@ -1,451 +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 "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" - -#include <stdint.h> - -#include <memory> -#include <string> -#include <tuple> -#include <utility> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/location.h" -#include "base/run_loop.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h" -#include "chrome/browser/service_process/service_process_control.h" -#include "chrome/browser/ui/startup/startup_browser_creator.h" -#include "chrome/browser/ui/startup/startup_types.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/cloud_print.mojom.h" -#include "chrome/common/cloud_print/cloud_print_proxy_info.h" -#include "chrome/common/pref_names.h" -#include "chrome/test/base/testing_browser_process.h" -#include "chrome/test/base/testing_profile.h" -#include "chrome/test/base/testing_profile_manager.h" -#include "components/prefs/testing_pref_service.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/test/browser_task_environment.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver_set.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using ::testing::Assign; -using ::testing::AtMost; -using ::testing::DeleteArg; -using ::testing::DoAll; -using ::testing::Invoke; -using ::testing::Property; -using ::testing::Return; -using ::testing::ReturnPointee; -using ::testing::WithArgs; -using ::testing::WithoutArgs; -using ::testing::_; - -class MockServiceProcessControl : public ServiceProcessControl { - public: - static std::string EnabledUserId(); - - MockServiceProcessControl() : connected_(false) { } - - ~MockServiceProcessControl() override {} - - MOCK_CONST_METHOD0(IsConnected, bool()); - - void Launch(base::OnceClosure success_task, - base::OnceClosure failure_task) override; - - MOCK_METHOD0(Disconnect, void()); - - void SetConnectSuccessMockExpectations(); - - private: - bool connected_; - cloud_print::CloudPrintProxyInfo info_; -}; - -// static -std::string MockServiceProcessControl::EnabledUserId() { - return std::string("dorothy@somewhere.otr"); -} - -void CallTask(base::OnceClosure task) { - if (task) - std::move(task).Run(); -} - -void MockServiceProcessControl::Launch(base::OnceClosure success_task, - base::OnceClosure failure_task) { - connected_ = true; - CallTask(std::move(success_task)); -} - -void MockServiceProcessControl::SetConnectSuccessMockExpectations() { - EXPECT_CALL(*this, IsConnected()).WillRepeatedly(ReturnPointee(&connected_)); - - EXPECT_CALL(*this, Disconnect()).Times(AtMost(1)) - .WillRepeatedly(Assign(&connected_, false)); -} - -class MockCloudPrintProxy : public cloud_print::mojom::CloudPrint { - public: - void AddReceiver( - mojo::PendingReceiver<cloud_print::mojom::CloudPrint> receiver) { - receivers_.Add(this, std::move(receiver)); - } - - void ReturnDisabledInfo() { - cloud_proxy_info_expectation_set_ = true; - cloud_proxy_info_.enabled = false; - cloud_proxy_info_.email.clear(); - } - - void ReturnEnabledInfo() { - cloud_proxy_info_expectation_set_ = true; - cloud_proxy_info_.enabled = true; - cloud_proxy_info_.email = MockServiceProcessControl::EnabledUserId(); - } - - bool has_been_enabled() { - receivers_.FlushForTesting(); - return enabled_; - } - bool has_been_disabled() { - receivers_.FlushForTesting(); - return disabled_; - } - - private: - void GetCloudPrintProxyInfo( - GetCloudPrintProxyInfoCallback callback) override { - EXPECT_TRUE(cloud_proxy_info_expectation_set_); - std::move(callback).Run(cloud_proxy_info_.enabled, cloud_proxy_info_.email, - cloud_proxy_info_.proxy_id); - } - void GetPrinters(GetPrintersCallback callback) override { NOTREACHED(); } - void DisableCloudPrintProxy() override { disabled_ = true; } - - void EnableCloudPrintProxyWithRobot(const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_settings) override { - enabled_ = true; - } - - mojo::ReceiverSet<cloud_print::mojom::CloudPrint> receivers_; - - bool cloud_proxy_info_expectation_set_ = false; - cloud_print::CloudPrintProxyInfo cloud_proxy_info_; - - bool disabled_ = false; - bool enabled_ = false; -}; - -class TestCloudPrintProxyService : public CloudPrintProxyService { - public: - explicit TestCloudPrintProxyService(Profile* profile) - : CloudPrintProxyService(profile) { - service_manager::InterfaceProvider::TestApi test_api( - &process_control_.remote_interfaces()); - test_api.SetBinderForName( - "cloud_print.mojom.CloudPrint", - base::BindRepeating( - &TestCloudPrintProxyService::HandleCloudPrintProxyRequest, - base::Unretained(this))); - mojo::PendingRemote<service_manager::mojom::InterfaceProvider> handle; - std::ignore = handle.InitWithNewPipeAndPassReceiver(); - process_control_.SetMojoHandle(std::move(handle)); - } - - ~TestCloudPrintProxyService() override { - service_manager::InterfaceProvider::TestApi test_api( - &ServiceProcessControl::GetInstance()->remote_interfaces()); - test_api.ClearBinderForName("cloud_print.mojom.CloudPrint"); - } - - void Initialize() { - CloudPrintProxyService::Initialize(); - base::RunLoop().RunUntilIdle(); - } - - void RefreshStatusFromService() { - CloudPrintProxyService::RefreshStatusFromService(); - base::RunLoop().RunUntilIdle(); - } - - ServiceProcessControl* GetServiceProcessControl() override { - return &process_control_; - } - - MockServiceProcessControl* GetMockServiceProcessControl() { - return &process_control_; - } - - MockCloudPrintProxy& GetMockCloudPrintProxy() { return mock_proxy_; } - - void EnableForUser() { - EnableForUserWithRobot("123", "123@gmail.com", - MockServiceProcessControl::EnabledUserId(), - base::Value(base::Value::Type::DICTIONARY)); - } - - private: - void HandleCloudPrintProxyRequest(mojo::ScopedMessagePipeHandle handle) { - mock_proxy_.AddReceiver( - mojo::PendingReceiver<cloud_print::mojom::CloudPrint>( - std::move(handle))); - } - - MockServiceProcessControl process_control_; - MockCloudPrintProxy mock_proxy_; -}; - -class CloudPrintProxyPolicyTest : public ::testing::Test { - public: - CloudPrintProxyPolicyTest() = default; - - bool LaunchBrowser(const base::CommandLine& command_line, Profile* profile) { - StartupBrowserCreator browser_creator; - return browser_creator.ProcessCmdLineImpl( - command_line, base::FilePath(), chrome::startup::IsProcessStartup::kNo, - profile, StartupBrowserCreator::Profiles()); - } - - protected: - content::BrowserTaskEnvironment task_environment_; - TestingProfile profile_; -}; - -TEST_F(CloudPrintProxyPolicyTest, VerifyExpectations) { - MockServiceProcessControl mock_control; - mock_control.SetConnectSuccessMockExpectations(); - - EXPECT_FALSE(mock_control.IsConnected()); - mock_control.Launch(base::OnceClosure(), base::OnceClosure()); - EXPECT_TRUE(mock_control.IsConnected()); - mock_control.Launch(base::OnceClosure(), base::OnceClosure()); - EXPECT_TRUE(mock_control.IsConnected()); - mock_control.Disconnect(); - EXPECT_FALSE(mock_control.IsConnected()); -} - -TEST_F(CloudPrintProxyPolicyTest, StartWithNoPolicyProxyDisabled) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockCloudPrintProxy().ReturnDisabledInfo(); - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>( - MockServiceProcessControl::EnabledUserId())); - - service.Initialize(); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); -} - -TEST_F(CloudPrintProxyPolicyTest, StartWithNoPolicyProxyEnabled) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnEnabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>(std::string())); - - service.Initialize(); - service.RefreshStatusFromService(); - - EXPECT_EQ(MockServiceProcessControl::EnabledUserId(), - prefs->GetString(prefs::kCloudPrintEmail)); -} - -TEST_F(CloudPrintProxyPolicyTest, StartWithPolicySetProxyDisabled) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnDisabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>(std::string())); - prefs->SetManagedPref(prefs::kCloudPrintProxyEnabled, - std::make_unique<base::Value>(false)); - - service.Initialize(); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); -} - -TEST_F(CloudPrintProxyPolicyTest, StartWithPolicySetProxyEnabled) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnEnabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>(std::string())); - prefs->SetManagedPref(prefs::kCloudPrintProxyEnabled, - std::make_unique<base::Value>(false)); - - service.Initialize(); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - EXPECT_TRUE(service.GetMockCloudPrintProxy().has_been_disabled()); -} - -TEST_F(CloudPrintProxyPolicyTest, StartWithNoPolicyProxyDisabledThenSetPolicy) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnDisabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>( - MockServiceProcessControl::EnabledUserId())); - - service.Initialize(); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - - prefs->SetManagedPref(prefs::kCloudPrintProxyEnabled, - std::make_unique<base::Value>(false)); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); -} - -TEST_F(CloudPrintProxyPolicyTest, StartWithNoPolicyProxyEnabledThenSetPolicy) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnEnabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>(std::string())); - - service.Initialize(); - service.RefreshStatusFromService(); - - EXPECT_EQ(MockServiceProcessControl::EnabledUserId(), - prefs->GetString(prefs::kCloudPrintEmail)); - - prefs->SetManagedPref(prefs::kCloudPrintProxyEnabled, - std::make_unique<base::Value>(false)); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - EXPECT_TRUE(service.GetMockCloudPrintProxy().has_been_disabled()); -} - -TEST_F(CloudPrintProxyPolicyTest, - StartWithPolicySetProxyDisabledThenClearPolicy) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnDisabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>(std::string())); - prefs->SetManagedPref(prefs::kCloudPrintProxyEnabled, - std::make_unique<base::Value>(false)); - - service.Initialize(); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - prefs->RemoveManagedPref(prefs::kCloudPrintProxyEnabled); - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); -} - -TEST_F(CloudPrintProxyPolicyTest, - StartWithPolicySetProxyEnabledThenClearPolicy) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnEnabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>(std::string())); - prefs->SetManagedPref(prefs::kCloudPrintProxyEnabled, - std::make_unique<base::Value>(false)); - - service.Initialize(); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - prefs->RemoveManagedPref(prefs::kCloudPrintProxyEnabled); - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - EXPECT_TRUE(service.GetMockCloudPrintProxy().has_been_disabled()); -} - -TEST_F(CloudPrintProxyPolicyTest, StartWithNoPolicyProxyDisabledThenEnable) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnDisabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>( - MockServiceProcessControl::EnabledUserId())); - - service.Initialize(); - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - - service.EnableForUser(); - - EXPECT_EQ(MockServiceProcessControl::EnabledUserId(), - prefs->GetString(prefs::kCloudPrintEmail)); - EXPECT_TRUE(service.GetMockCloudPrintProxy().has_been_enabled()); -} - -TEST_F(CloudPrintProxyPolicyTest, - StartWithPolicySetProxyEnabledThenClearPolicyAndEnable) { - TestCloudPrintProxyService service(&profile_); - - service.GetMockServiceProcessControl()->SetConnectSuccessMockExpectations(); - service.GetMockCloudPrintProxy().ReturnEnabledInfo(); - - sync_preferences::TestingPrefServiceSyncable* prefs = - profile_.GetTestingPrefService(); - prefs->SetUserPref(prefs::kCloudPrintEmail, - std::make_unique<base::Value>(std::string())); - prefs->SetManagedPref(prefs::kCloudPrintProxyEnabled, - std::make_unique<base::Value>(false)); - - service.Initialize(); - - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - service.EnableForUser(); - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - - prefs->RemoveManagedPref(prefs::kCloudPrintProxyEnabled); - EXPECT_EQ(std::string(), prefs->GetString(prefs::kCloudPrintEmail)); - - service.EnableForUser(); - - EXPECT_EQ(MockServiceProcessControl::EnabledUserId(), - prefs->GetString(prefs::kCloudPrintEmail)); - EXPECT_TRUE(service.GetMockCloudPrintProxy().has_been_enabled()); -}
diff --git a/chrome/browser/printing/cloud_print/test/DEPS b/chrome/browser/printing/cloud_print/test/DEPS deleted file mode 100644 index 9318320..0000000 --- a/chrome/browser/printing/cloud_print/test/DEPS +++ /dev/null
@@ -1,6 +0,0 @@ -include_rules = [ - # Service-side mockup tests need service classes to mock. - "+chrome/service", - - "+mojo/core/embedder", -]
diff --git a/chrome/browser/printing/cloud_print/test/cloud_print_policy_browsertest.cc b/chrome/browser/printing/cloud_print/test/cloud_print_policy_browsertest.cc deleted file mode 100644 index f1eba272..0000000 --- a/chrome/browser/printing/cloud_print/test/cloud_print_policy_browsertest.cc +++ /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. - -#include "base/command_line.h" -#include "base/process/kill.h" -#include "base/process/launch.h" -#include "base/test/test_timeouts.h" -#include "build/build_config.h" -#include "build/chromeos_buildflags.h" -#include "chrome/browser/chrome_notification_types.h" -#include "chrome/common/chrome_result_codes.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "chrome/test/base/ui_test_utils.h" -#include "content/public/browser/notification_service.h" -#include "content/public/common/result_codes.h" -#include "content/public/test/browser_test.h" - -// These tests don't apply to Mac or Lacros; see GetCommandLineForRelaunch -// for details. -#if defined(OS_MAC) || BUILDFLAG(IS_CHROMEOS_LACROS) -#error Not supported on this platform. -#endif - -namespace { - -class CloudPrintPolicyTest : public InProcessBrowserTest { - public: - CloudPrintPolicyTest() {} -}; - -IN_PROC_BROWSER_TEST_F(CloudPrintPolicyTest, NormalPassedFlag) { - base::FilePath test_file_path = ui_test_utils::GetTestFilePath( - base::FilePath(), base::FilePath().AppendASCII("empty.html")); - base::CommandLine new_command_line(GetCommandLineForRelaunch()); - new_command_line.AppendArgPath(test_file_path); - - ui_test_utils::TabAddedWaiter tab_add(browser()); - - base::Process process = - base::LaunchProcess(new_command_line, base::LaunchOptionsForTest()); - EXPECT_TRUE(process.IsValid()); - - tab_add.Wait(); - - int exit_code = -100; - bool exited = process.WaitForExitWithTimeout(TestTimeouts::action_timeout(), - &exit_code); - EXPECT_TRUE(exited); - EXPECT_EQ(chrome::RESULT_CODE_NORMAL_EXIT_PROCESS_NOTIFIED, exit_code); -} - -} // namespace
diff --git a/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc b/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc deleted file mode 100644 index 2d06847..0000000 --- a/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc +++ /dev/null
@@ -1,498 +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. - -// Create a service process that uses a Mock to respond to the browser in order -// to test launching the browser using the cloud print policy check command -// line switch. - -#include <stdint.h> - -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/command_line.h" -#include "base/files/scoped_temp_dir.h" -#include "base/memory/ptr_util.h" -#include "base/message_loop/message_pump.h" -#include "base/message_loop/message_pump_type.h" -#include "base/process/kill.h" -#include "base/process/process.h" -#include "base/rand_util.h" -#include "base/run_loop.h" -#include "base/strings/stringprintf.h" -#include "base/synchronization/waitable_event.h" -#include "base/task/single_thread_task_executor.h" -#include "base/task/single_thread_task_runner.h" -#include "base/task/thread_pool.h" -#include "base/test/multiprocess_test.h" -#include "base/test/test_timeouts.h" -#include "base/threading/platform_thread.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/time/default_tick_clock.h" -#include "base/time/time.h" -#include "build/build_config.h" -#include "chrome/browser/chrome_content_browser_client.h" -#include "chrome/browser/prefs/browser_prefs.h" -#include "chrome/browser/service_process/service_process_control.h" -#include "chrome/browser/ui/startup/startup_browser_creator.h" -#include "chrome/browser/ui/startup/startup_types.h" -#include "chrome/common/chrome_content_client.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/cloud_print/cloud_print_proxy_info.h" -#include "chrome/common/pref_names.h" -#include "chrome/common/service_process_util.h" -#include "chrome/service/cloud_print/cloud_print_message_handler.h" -#include "chrome/service/service_ipc_server.h" -#include "chrome/service/service_process.h" -#include "chrome/test/base/chrome_unit_test_suite.h" -#include "chrome/test/base/test_launcher_utils.h" -#include "chrome/test/base/testing_browser_process.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" -#include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/notification_service.h" -#include "content/public/common/content_paths.h" -#include "content/public/test/browser_task_environment.h" -#include "content/public/test/test_utils.h" -#include "ipc/ipc.mojom.h" -#include "ipc/ipc_channel_mojo.h" -#include "ipc/ipc_channel_proxy.h" -#include "mojo/core/embedder/embedder.h" -#include "mojo/core/embedder/scoped_ipc_support.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "mojo/public/cpp/platform/named_platform_channel.h" -#include "mojo/public/cpp/system/isolated_connection.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "testing/multiprocess_func_list.h" - -#if defined(OS_MAC) -#include "chrome/common/mac/mock_launchd.h" -#endif - -using ::testing::AnyNumber; -using ::testing::Assign; -using ::testing::AtLeast; -using ::testing::DoAll; -using ::testing::Invoke; -using ::testing::Mock; -using ::testing::Property; -using ::testing::Return; -using ::testing::WithoutArgs; -using ::testing::_; -namespace { - -enum MockServiceProcessExitCodes { - kMissingSwitch = 1, - kInitializationFailure, - kExpectationsNotMet, - kShutdownNotGood -}; - -#if defined(OS_MAC) -const char kTestExecutablePath[] = "test-executable-path"; -#endif - -bool g_good_shutdown = false; - -void ShutdownTask() { - g_good_shutdown = true; - g_service_process->Shutdown(); -} - -class TestStartupClientChannelListener : public IPC::Listener { - public: - bool OnMessageReceived(const IPC::Message& message) override { return false; } -}; - -void ConnectAsync(mojo::ScopedMessagePipeHandle handle, - mojo::NamedPlatformChannel::ServerName server_name, - mojo::IsolatedConnection* mojo_connection) { - mojo::PlatformChannelEndpoint endpoint = - mojo::NamedPlatformChannel::ConnectToServer(server_name); - if (!endpoint.is_valid()) - return; - - mojo::FuseMessagePipes(mojo_connection->Connect(std::move(endpoint)), - std::move(handle)); -} - -const char kProcessChannelID[] = "process-channel-id"; - -} // namespace - -class TestServiceProcess : public ServiceProcess { - public: - TestServiceProcess() { } - ~TestServiceProcess() override {} - - bool Initialize(base::OnceClosure quit_closure, - std::unique_ptr<ServiceProcessState> state); -}; - -bool TestServiceProcess::Initialize( - base::OnceClosure quit_closure, - std::unique_ptr<ServiceProcessState> state) { - quit_closure_ = std::move(quit_closure); - service_process_state_ = std::move(state); - - base::Thread::Options options(base::MessagePumpType::IO, 0); - io_thread_ = std::make_unique<base::Thread>("TestServiceProcess_IO"); - return io_thread_->StartWithOptions(std::move(options)); -} - -// This mocks the service side IPC message handler, allowing us to have a -// minimal service process. -class MockServiceIPCServer : public ServiceIPCServer { - public: - static std::string EnabledUserId(); - - MockServiceIPCServer( - ServiceIPCServer::Client* client, - scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, - base::WaitableEvent* shutdown_event) - : ServiceIPCServer(client, io_task_runner, shutdown_event) {} - - MOCK_METHOD1(OnChannelConnected, void(int32_t peer_pid)); - MOCK_METHOD0(OnChannelError, void()); - MOCK_METHOD0(ShutDown, void()); - - void SetServiceEnabledExpectations(); - - private: - cloud_print::CloudPrintProxyInfo info_; -}; - -// static -std::string MockServiceIPCServer::EnabledUserId() { - return std::string("kitteh@canhazcheezburger.cat"); -} - -void MockServiceIPCServer::SetServiceEnabledExpectations() { - EXPECT_CALL(*this, OnChannelError()).Times(0); - EXPECT_CALL(*this, ShutDown()) - .Times(1) - .WillOnce(DoAll( - Assign(&g_good_shutdown, true), - WithoutArgs(Invoke(g_service_process, &::ServiceProcess::Shutdown)))); -} - -using SetExpectationsCallback = - base::OnceCallback<void(MockServiceIPCServer* server)>; - -// The return value from this routine is used as the exit code for the mock -// service process. Any non-zero return value will be printed out and can help -// determine the failure. -int CloudPrintMockService_Main(SetExpectationsCallback set_expectations) { - base::PlatformThread::SetName("Main Thread"); - base::SingleThreadTaskExecutor executor(base::MessagePumpType::UI); - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - content::RegisterPathProvider(); - - base::FilePath user_data_dir = - command_line->GetSwitchValuePath(switches::kUserDataDir); - CHECK(!user_data_dir.empty()); - CHECK(test_launcher_utils::OverrideUserDataDir(user_data_dir)); - - base::RunLoop run_loop; -#if defined(OS_MAC) - if (!command_line->HasSwitch(kTestExecutablePath)) - return kMissingSwitch; - base::FilePath executable_path = - command_line->GetSwitchValuePath(kTestExecutablePath); - EXPECT_FALSE(executable_path.empty()); - MockLaunchd mock_launchd(executable_path, executor.task_runner(), - run_loop.QuitClosure(), true); - Launchd::ScopedInstance use_mock(&mock_launchd); -#endif - - ServiceProcessState* state(new ServiceProcessState); - bool service_process_state_initialized = state->Initialize(); - EXPECT_TRUE(service_process_state_initialized); - if (!service_process_state_initialized) - return kInitializationFailure; - - TestServiceProcess service_process; - EXPECT_EQ(&service_process, g_service_process); - - // Takes ownership of the pointer, but we can use it since we have the same - // lifetime. - EXPECT_TRUE(service_process.Initialize(run_loop.QuitClosure(), - base::WrapUnique(state))); - - // Needed for IPC. - mojo::core::Init(); - mojo::core::ScopedIPCSupport ipc_support( - service_process.io_task_runner(), - mojo::core::ScopedIPCSupport::ShutdownPolicy::FAST); - - MockServiceIPCServer server(&service_process, - service_process.io_task_runner(), - service_process.GetShutdownEventForTesting()); - server.binder_registry().AddInterface(base::BindRepeating( - &cloud_print::CloudPrintMessageHandler::Create, &service_process)); - - // Here is where the expectations/mock responses need to be set up. - std::move(set_expectations).Run(&server); - - EXPECT_TRUE(server.Init()); - EXPECT_TRUE(state->SignalReady(service_process.io_task_runner().get(), - base::BindOnce(&ShutdownTask))); -#if defined(OS_MAC) - mock_launchd.SignalReady(); -#endif - - // Connect up the parent/child IPC channel to signal that the test can - // continue. - TestStartupClientChannelListener listener; - EXPECT_TRUE(base::CommandLine::ForCurrentProcess()->HasSwitch( - kProcessChannelID)); - auto server_name = mojo::NamedPlatformChannel::ServerNameFromUTF8( - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - kProcessChannelID)); - mojo::IsolatedConnection mojo_connection; - std::unique_ptr<IPC::ChannelProxy> startup_channel = - IPC::ChannelProxy::Create( - mojo_connection - .Connect(mojo::NamedPlatformChannel::ConnectToServer(server_name)) - .release(), - IPC::Channel::MODE_CLIENT, &listener, - service_process.io_task_runner(), - base::ThreadTaskRunnerHandle::Get()); - - run_loop.Run(); - if (!Mock::VerifyAndClearExpectations(&server)) - return kExpectationsNotMet; - if (!g_good_shutdown) - return kShutdownNotGood; - return 0; -} - -void SetServiceEnabledExpectations(MockServiceIPCServer* server) { - server->SetServiceEnabledExpectations(); -} - -MULTIPROCESS_TEST_MAIN(CloudPrintMockService_StartEnabledWaitForQuit) { - return CloudPrintMockService_Main( - base::BindOnce(&SetServiceEnabledExpectations)); -} - -class CloudPrintProxyPolicyStartupTest : public base::MultiProcessTest, - public IPC::Listener { - public: - CloudPrintProxyPolicyStartupTest(); - ~CloudPrintProxyPolicyStartupTest() override; - - void SetUp() override; - void TearDown() override; - - scoped_refptr<base::SingleThreadTaskRunner> IOTaskRunner() { - return content::GetIOThreadTaskRunner({}); - } - base::Process Launch(const std::string& name); - void WaitForConnect(mojo::IsolatedConnection* mojo_connection); - void ShutdownAndWaitForExitWithTimeout(base::Process process); - - // IPC::Listener implementation - bool OnMessageReceived(const IPC::Message& message) override { return false; } - void OnChannelConnected(int32_t peer_pid) override; - - // MultiProcessTest implementation. - base::CommandLine MakeCmdLine(const std::string& procname) override; - - bool LaunchBrowser(const base::CommandLine& command_line, Profile* profile) { - StartupBrowserCreator browser_creator; - return browser_creator.ProcessCmdLineImpl( - command_line, base::FilePath(), chrome::startup::IsProcessStartup::kNo, - profile, StartupBrowserCreator::Profiles()); - } - - protected: - content::BrowserTaskEnvironment task_environment_; - base::ScopedTempDir temp_user_data_dir_; - - mojo::NamedPlatformChannel::ServerName startup_server_name_; - mojo::IsolatedConnection mojo_connection_; - std::unique_ptr<IPC::ChannelProxy> startup_channel_; - std::unique_ptr<ChromeContentClient> content_client_; - std::unique_ptr<ChromeContentBrowserClient> browser_content_client_; - -#if defined(OS_MAC) - base::ScopedTempDir temp_dir_; - base::FilePath executable_path_, bundle_path_; - std::unique_ptr<MockLaunchd> mock_launchd_; - std::unique_ptr<Launchd::ScopedInstance> scoped_launchd_instance_; -#endif - - private: - class WindowedChannelConnectionObserver { - public: - WindowedChannelConnectionObserver() - : seen_(false), - running_(false) { } - - void Wait() { - if (seen_) - return; - running_ = true; - content::RunMessageLoop(); - } - - void Notify() { - seen_ = true; - if (running_) - base::RunLoop::QuitCurrentWhenIdleDeprecated(); - } - - private: - bool seen_; - bool running_; - }; - - WindowedChannelConnectionObserver observer_; -}; - -CloudPrintProxyPolicyStartupTest::CloudPrintProxyPolicyStartupTest() - : task_environment_(content::BrowserTaskEnvironment::REAL_IO_THREAD) { - // Although is really a unit test which runs in the browser_tests binary, it - // doesn't get the unit setup which normally happens in the unit test binary. - ChromeUnitTestSuite::InitializeProviders(); - ChromeUnitTestSuite::InitializeResourceBundle(); -} - -CloudPrintProxyPolicyStartupTest::~CloudPrintProxyPolicyStartupTest() { -} - -void CloudPrintProxyPolicyStartupTest::SetUp() { - content_client_ = std::make_unique<ChromeContentClient>(); - content::SetContentClient(content_client_.get()); - browser_content_client_ = std::make_unique<ChromeContentBrowserClient>(); - content::SetBrowserClientForTesting(browser_content_client_.get()); - - TestingBrowserProcess::CreateInstance(); - // Ensure test does not use the standard profile directory. This is copied - // from InProcessBrowserTest::SetUp(). These tests require a more complex - // process startup so they are unable to just inherit from - // InProcessBrowserTest. - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - base::FilePath user_data_dir = - command_line->GetSwitchValuePath(switches::kUserDataDir); - if (user_data_dir.empty()) { - ASSERT_TRUE(temp_user_data_dir_.CreateUniqueTempDir() && - temp_user_data_dir_.IsValid()) - << "Could not create temporary user data directory \"" - << temp_user_data_dir_.GetPath().value() << "\"."; - - user_data_dir = temp_user_data_dir_.GetPath(); - command_line->AppendSwitchPath(switches::kUserDataDir, user_data_dir); - } - ASSERT_TRUE(test_launcher_utils::OverrideUserDataDir(user_data_dir)); - -#if defined(OS_MAC) - EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); - EXPECT_TRUE(MockLaunchd::MakeABundle(temp_dir_.GetPath(), - "CloudPrintProxyTest", &bundle_path_, - &executable_path_)); - mock_launchd_ = std::make_unique<MockLaunchd>( - executable_path_, base::ThreadTaskRunnerHandle::Get(), base::DoNothing(), - false); - scoped_launchd_instance_ = - std::make_unique<Launchd::ScopedInstance>(mock_launchd_.get()); -#endif -} - -void CloudPrintProxyPolicyStartupTest::TearDown() { - browser_content_client_.reset(); - content_client_.reset(); - content::SetContentClient(NULL); - - TestingBrowserProcess::DeleteInstance(); -} - -base::Process CloudPrintProxyPolicyStartupTest::Launch( - const std::string& name) { - EXPECT_FALSE(CheckServiceProcessReady()); - - startup_server_name_ = mojo::NamedPlatformChannel::ServerNameFromUTF8( - base::StringPrintf("%" CrPRIdPid ".%p.%d", base::GetCurrentProcId(), this, - base::RandInt(0, std::numeric_limits<int>::max()))); - - mojo::NamedPlatformChannel::Options options; - options.server_name = startup_server_name_; - mojo::NamedPlatformChannel channel_server(options); - startup_channel_ = IPC::ChannelProxy::Create( - mojo_connection_.Connect(channel_server.TakeServerEndpoint()).release(), - IPC::Channel::MODE_SERVER, this, IOTaskRunner(), - base::ThreadTaskRunnerHandle::Get()); - - base::Process process = SpawnChild(name); - EXPECT_TRUE(process.IsValid()); - return process; -} - -void CloudPrintProxyPolicyStartupTest::WaitForConnect( - mojo::IsolatedConnection* mojo_connection) { - observer_.Wait(); - EXPECT_TRUE(CheckServiceProcessReady()); - EXPECT_TRUE(base::ThreadTaskRunnerHandle::Get().get()); - - mojo::MessagePipe pipe; - base::ThreadPool::PostTask( - FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::BindOnce(&ConnectAsync, std::move(pipe.handle1), - GetServiceProcessServerName(), mojo_connection)); - ServiceProcessControl::GetInstance()->SetMojoHandle( - mojo::PendingRemote<service_manager::mojom::InterfaceProvider>( - std::move(pipe.handle0), 0U)); -} - -void CloudPrintProxyPolicyStartupTest::ShutdownAndWaitForExitWithTimeout( - base::Process process) { - mojo::Remote<chrome::mojom::ServiceProcess> service_process; - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - service_process.BindNewPipeAndPassReceiver()); - service_process->ShutDown(); - - int exit_code = -100; - bool exited = process.WaitForExitWithTimeout(TestTimeouts::action_timeout(), - &exit_code); - EXPECT_TRUE(exited); - EXPECT_EQ(0, exit_code); -} - -void CloudPrintProxyPolicyStartupTest::OnChannelConnected(int32_t peer_pid) { - observer_.Notify(); -} - -base::CommandLine CloudPrintProxyPolicyStartupTest::MakeCmdLine( - const std::string& procname) { - base::CommandLine cl = MultiProcessTest::MakeCmdLine(procname); - cl.AppendSwitchNative(kProcessChannelID, startup_server_name_); -#if defined(OS_MAC) - cl.AppendSwitchASCII(kTestExecutablePath, executable_path_.value()); -#endif - return cl; -} - -// Disabling this test since it creates multiple isolated mojo connections -// which is temporarily removed feature. -// The production code should not be doing this and the whole code is scheduled -// for removal. (See crbug.com/1162164) -TEST_F(CloudPrintProxyPolicyStartupTest, DISABLED_StartAndShutdown) { - mojo::core::Init(); - mojo::core::ScopedIPCSupport ipc_support( - content::GetIOThreadTaskRunner({}), - mojo::core::ScopedIPCSupport::ShutdownPolicy::FAST); - - base::Process process = - Launch("CloudPrintMockService_StartEnabledWaitForQuit"); - mojo::IsolatedConnection mojo_connection; - WaitForConnect(&mojo_connection); - ShutdownAndWaitForExitWithTimeout(std::move(process)); - ServiceProcessControl::GetInstance()->Disconnect(); - content::RunAllPendingInMessageLoop(); -}
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc index 616496d..0cfb936 100644 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -198,10 +198,6 @@ #include "extensions/browser/browser_context_keyed_service_factories.h" #endif -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !BUILDFLAG(IS_CHROMEOS_ASH) -#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h" -#endif - #if BUILDFLAG(ENABLE_SESSION_SERVICE) #include "chrome/browser/sessions/exit_type_service_factory.h" #include "chrome/browser/sessions/session_service_factory.h" @@ -323,9 +319,6 @@ ChromeBrowsingDataRemoverDelegateFactory::GetInstance(); ChromeSigninClientFactory::GetInstance(); ClientHintsFactory::GetInstance(); -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !BUILDFLAG(IS_CHROMEOS_ASH) - CloudPrintProxyServiceFactory::GetInstance(); -#endif ConsentAuditorFactory::GetInstance(); CookieSettingsFactory::GetInstance(); #if !defined(OS_ANDROID)
diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc index 33796b78..0645dbc 100644 --- a/chrome/browser/profiles/profile_attributes_entry.cc +++ b/chrome/browser/profiles/profile_attributes_entry.cc
@@ -778,8 +778,8 @@ { // Bundle the changes in a single update. - DictionaryPrefUpdateDeprecated update(prefs_, prefs::kProfileAttributes); - base::DictionaryValue* attributes_dict = update.Get(); + DictionaryPrefUpdate update(prefs_, prefs::kProfileAttributes); + base::Value* attributes_dict = update.Get(); base::Value* entry = attributes_dict->FindDictKey(storage_key_); if (!entry) { entry = attributes_dict->SetKey( @@ -990,8 +990,8 @@ if (old_value && *old_value == value) return false; - DictionaryPrefUpdateDeprecated update(prefs_, prefs::kProfileAttributes); - base::DictionaryValue* attributes_dict = update.Get(); + DictionaryPrefUpdate update(prefs_, prefs::kProfileAttributes); + base::Value* attributes_dict = update.Get(); base::Value* entry = attributes_dict->FindDictKey(storage_key_); if (!entry) { entry = attributes_dict->SetKey(storage_key_, @@ -1006,8 +1006,8 @@ if (!old_value) return false; - DictionaryPrefUpdateDeprecated update(prefs_, prefs::kProfileAttributes); - base::DictionaryValue* attributes_dict = update.Get(); + DictionaryPrefUpdate update(prefs_, prefs::kProfileAttributes); + base::Value* attributes_dict = update.Get(); base::Value* entry = attributes_dict->FindDictKey(storage_key_); DCHECK(entry); entry->RemoveKey(key);
diff --git a/chrome/browser/profiles/profile_attributes_storage.cc b/chrome/browser/profiles/profile_attributes_storage.cc index 880924b..1cec71f 100644 --- a/chrome/browser/profiles/profile_attributes_storage.cc +++ b/chrome/browser/profiles/profile_attributes_storage.cc
@@ -267,8 +267,8 @@ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})), user_data_dir_(user_data_dir) { // Populate the attributes storage. - DictionaryPrefUpdateDeprecated update(prefs_, prefs::kProfileAttributes); - base::DictionaryValue* attributes = update.Get(); + DictionaryPrefUpdate update(prefs_, prefs::kProfileAttributes); + base::Value* attributes = update.Get(); for (auto kv : attributes->DictItems()) { base::Value& info = kv.second; std::string* name = info.FindStringKey(ProfileAttributesEntry::kNameKey); @@ -343,8 +343,8 @@ void ProfileAttributesStorage::AddProfile(ProfileAttributesInitParams params) { std::string key = StorageKeyFromProfilePath(params.profile_path); - DictionaryPrefUpdateDeprecated update(prefs_, prefs::kProfileAttributes); - base::DictionaryValue* attributes = update.Get(); + DictionaryPrefUpdate update(prefs_, prefs::kProfileAttributes); + base::Value* attributes = update.Get(); base::Value info(base::Value::Type::DICTIONARY); info.SetStringKey(ProfileAttributesEntry::kNameKey, params.profile_name); @@ -426,8 +426,8 @@ for (auto& observer : observer_list_) observer.OnProfileWillBeRemoved(profile_path); - DictionaryPrefUpdateDeprecated update(prefs_, prefs::kProfileAttributes); - base::DictionaryValue* attributes = update.Get(); + DictionaryPrefUpdate update(prefs_, prefs::kProfileAttributes); + base::Value* attributes = update.Get(); std::string key = StorageKeyFromProfilePath(profile_path); attributes->RemoveKey(key); profile_attributes_entries_.erase(profile_path.value());
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc index efb5169..7646b95a 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc
@@ -283,8 +283,8 @@ ProfilesToDelete()[path] = ProfileDeletionStage::MARKED; // Remember that this profile was deleted and files should have been deleted // on shutdown. In case of a crash remaining files are removed on next start. - ListPrefUpdateDeprecated deleted_profiles(g_browser_process->local_state(), - prefs::kProfilesDeleted); + ListPrefUpdate deleted_profiles(g_browser_process->local_state(), + prefs::kProfilesDeleted); deleted_profiles->Append(base::FilePathToValue(path)); } @@ -359,8 +359,8 @@ // Called after a deleted profile was checked and cleaned up. void ProfileCleanedUp(base::Value profile_path_value) { - ListPrefUpdateDeprecated deleted_profiles(g_browser_process->local_state(), - prefs::kProfilesDeleted); + ListPrefUpdate deleted_profiles(g_browser_process->local_state(), + prefs::kProfilesDeleted); deleted_profiles->EraseListValue(profile_path_value); } @@ -427,8 +427,8 @@ void RemoveFromLastActiveProfilesPrefList(base::FilePath path) { PrefService* local_state = g_browser_process->local_state(); DCHECK(local_state); - ListPrefUpdateDeprecated update(local_state, prefs::kProfilesLastActive); - base::ListValue* profile_list = update.Get(); + ListPrefUpdate update(local_state, prefs::kProfilesLastActive); + base::Value* profile_list = update.Get(); base::Value entry_value = base::Value(path.BaseName().AsUTF8Unsafe()); profile_list->EraseListValue(entry_value); } @@ -2253,8 +2253,8 @@ void ProfileManager::SaveActiveProfiles() { PrefService* local_state = g_browser_process->local_state(); DCHECK(local_state); - ListPrefUpdateDeprecated update(local_state, prefs::kProfilesLastActive); - base::ListValue* profile_list = update.Get(); + ListPrefUpdate update(local_state, prefs::kProfilesLastActive); + base::Value* profile_list = update.Get(); profile_list->ClearList();
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc index 8bb35dd..d304fe7 100644 --- a/chrome/browser/profiles/profile_manager_unittest.cc +++ b/chrome/browser/profiles/profile_manager_unittest.cc
@@ -1544,12 +1544,12 @@ local_state->SetString(prefs::kProfileLastUsed, profile_name1); // Set the last used profiles. - ListPrefUpdateDeprecated update(local_state, prefs::kProfilesLastActive); - base::ListValue* initial_last_active_profile_list = update.Get(); + ListPrefUpdate update(local_state, prefs::kProfilesLastActive); + base::Value* initial_last_active_profile_list = update.Get(); initial_last_active_profile_list->Append( - std::make_unique<base::Value>(path1.BaseName().MaybeAsASCII())); + base::Value(path1.BaseName().MaybeAsASCII())); initial_last_active_profile_list->Append( - std::make_unique<base::Value>(path2.BaseName().MaybeAsASCII())); + base::Value(path2.BaseName().MaybeAsASCII())); profile_manager->CleanUpEphemeralProfiles(); content::RunAllTasksUntilIdle(); @@ -1615,12 +1615,12 @@ local_state->SetString(prefs::kProfileLastUsed, guest_profile_name); // Set the last used profiles. - ListPrefUpdateDeprecated update(local_state, prefs::kProfilesLastActive); - base::ListValue* initial_last_active_profile_list = update.Get(); + ListPrefUpdate update(local_state, prefs::kProfilesLastActive); + base::Value* initial_last_active_profile_list = update.Get(); initial_last_active_profile_list->Append( - std::make_unique<base::Value>(guest_path.BaseName().MaybeAsASCII())); + base::Value(guest_path.BaseName().MaybeAsASCII())); initial_last_active_profile_list->Append( - std::make_unique<base::Value>(path.BaseName().MaybeAsASCII())); + base::Value(path.BaseName().MaybeAsASCII())); profile_manager->CleanUpEphemeralProfiles(); content::RunAllTasksUntilIdle();
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb index 9bcfa56..6b34a4e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
@@ -627,7 +627,7 @@ <translation id="5302089807023311274">Reference i bibliografi</translation> <translation id="530391007967514163">Prøv at hoppe efter overskrift for at navigere i teksten nedenfor.</translation> <translation id="5304943142864553931">fanen <ph name="TITLE" /></translation> -<translation id="5308380583665731573">Få forbindelse</translation> +<translation id="5308380583665731573">Opret forbindelse</translation> <translation id="5310788376443009632">fjernet:</translation> <translation id="5316825363044614340">gå til næste linje</translation> <translation id="5320727453979144100">Sticky-tilstand er aktiveret</translation>
diff --git a/chrome/browser/resources/chromeos/login/screens/oobe/enterprise_enrollment.js b/chrome/browser/resources/chromeos/login/screens/oobe/enterprise_enrollment.js index 00a3303..87141e0d 100644 --- a/chrome/browser/resources/chromeos/login/screens/oobe/enterprise_enrollment.js +++ b/chrome/browser/resources/chromeos/login/screens/oobe/enterprise_enrollment.js
@@ -129,11 +129,6 @@ }, readOnly: true, }, - - isBranded: { - type: Boolean, - value: true, - }, }; } @@ -152,8 +147,8 @@ get EXTERNAL_API() { return [ 'doReload', 'setAdJoinConfiguration', 'setAdJoinParams', - 'setEnterpriseDomainInfo', 'setIsBrandedBuild', 'showAttributePromptStep', - 'showError', 'showOSNotInstalledError', 'showStep' + 'setEnterpriseDomainInfo', 'showAttributePromptStep', 'showError', + 'showStep' ]; } @@ -507,15 +502,6 @@ } } - showOSNotInstalledError() { - this.canRetryAfterError_ = false; - this.errorText_ = this.i18nDynamic( - this.locale, 'oauthOSNotInstalledError', - this.isBranded ? loadTimeData.getString('osInstallCloudReadyOS') : - loadTimeData.getString('osInstallChromiumOS')); - this.showStep(OobeTypes.EnrollmentStep.ERROR); - } - /** * Provides the label for the generic cancel button (Skip / Enroll Manually) * @@ -575,13 +561,6 @@ onTPMCheckCanceled_() { this.userActed('cancel-tpm-check'); } - - /** - * @param {boolean} is_branded - */ - setIsBrandedBuild(is_branded) { - this.isBranded = is_branded; - } } customElements.define(
diff --git a/chrome/browser/resources/chromeos/login/test_api/test_api.js b/chrome/browser/resources/chromeos/login/test_api/test_api.js index 30a8dc4..9188e6e 100644 --- a/chrome/browser/resources/chromeos/login/test_api/test_api.js +++ b/chrome/browser/resources/chromeos/login/test_api/test_api.js
@@ -191,6 +191,10 @@ return this.isVisible() && this.eulaStep.isVisible() && this.nextButton.isVisible(); } + + getNextButtonName() { + return loadTimeData.getString('oobeEulaAcceptAndContinueButtonText'); + } } class UpdateScreenTester extends ScreenElementApi {
diff --git a/chrome/browser/service_process/DIR_METADATA b/chrome/browser/service_process/DIR_METADATA deleted file mode 100644 index 67273c4..0000000 --- a/chrome/browser/service_process/DIR_METADATA +++ /dev/null
@@ -1,3 +0,0 @@ -monorail: { - component: "Services>CloudPrint" -}
diff --git a/chrome/browser/service_process/OWNERS b/chrome/browser/service_process/OWNERS deleted file mode 100644 index be0f423b..0000000 --- a/chrome/browser/service_process/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -file://cloud_print/OWNERS
diff --git a/chrome/browser/service_process/service_process_control.cc b/chrome/browser/service_process/service_process_control.cc deleted file mode 100644 index 1b0cfc3f..0000000 --- a/chrome/browser/service_process/service_process_control.cc +++ /dev/null
@@ -1,323 +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 "chrome/browser/service_process/service_process_control.h" - -#include <utility> - -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/command_line.h" -#include "base/files/file_path.h" -#include "base/location.h" -#include "base/memory/ref_counted.h" -#include "base/process/kill.h" -#include "base/process/launch.h" -#include "base/task/single_thread_task_runner.h" -#include "base/task/thread_pool.h" -#include "base/threading/thread.h" -#include "base/threading/thread_restrictions.h" -#include "base/threading/thread_task_runner_handle.h" -#include "build/build_config.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/upgrade_detector/upgrade_detector.h" -#include "chrome/common/service_process_util.h" -#include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/child_process_launcher_utils.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/platform/named_platform_channel.h" -#include "mojo/public/cpp/system/isolated_connection.h" - -using content::BrowserThread; - -namespace { - -// The number of and initial delay between retry attempts when connecting to the -// service process. These are applied with exponential backoff and are necessary -// to avoid inherent raciness in how the service process listens for incoming -// connections, particularly on Windows. -const size_t kMaxConnectionAttempts = 10; -constexpr base::TimeDelta kInitialConnectionRetryDelay = base::Milliseconds(20); - -void ConnectAsyncWithBackoff( - mojo::PendingReceiver<service_manager::mojom::InterfaceProvider> - interface_provider_receiver, - mojo::NamedPlatformChannel::ServerName server_name, - size_t num_retries_left, - base::TimeDelta retry_delay, - scoped_refptr<base::TaskRunner> response_task_runner, - base::OnceCallback<void(std::unique_ptr<mojo::IsolatedConnection>)> - response_callback) { - mojo::PlatformChannelEndpoint endpoint = - mojo::NamedPlatformChannel::ConnectToServer(server_name); - if (!endpoint.is_valid()) { - if (num_retries_left == 0) { - response_task_runner->PostTask( - FROM_HERE, base::BindOnce(std::move(response_callback), nullptr)); - } else { - base::ThreadPool::PostDelayedTask( - FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::BindOnce( - &ConnectAsyncWithBackoff, std::move(interface_provider_receiver), - server_name, num_retries_left - 1, retry_delay * 2, - std::move(response_task_runner), std::move(response_callback)), - retry_delay); - } - } else { - auto mojo_connection = std::make_unique<mojo::IsolatedConnection>(); - mojo::FuseMessagePipes(mojo_connection->Connect(std::move(endpoint)), - interface_provider_receiver.PassPipe()); - response_task_runner->PostTask(FROM_HERE, - base::BindOnce(std::move(response_callback), - std::move(mojo_connection))); - } -} - -} // namespace - -// ServiceProcessControl implementation. -ServiceProcessControl::ServiceProcessControl() - : apply_changes_from_upgrade_observer_(false) {} - -ServiceProcessControl::~ServiceProcessControl() = default; - -void ServiceProcessControl::ConnectInternal() { - // If the channel has already been established then we run the task - // and return. - if (service_process_) { - RunConnectDoneTasks(); - return; - } - - // Actually going to connect. - DVLOG(1) << "Connecting to Service Process IPC Server"; - - mojo::PendingRemote<service_manager::mojom::InterfaceProvider> - remote_interfaces; - auto interface_provider_receiver = - remote_interfaces.InitWithNewPipeAndPassReceiver(); - SetMojoHandle(std::move(remote_interfaces)); - base::ThreadPool::PostTask( - FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::BindOnce( - &ConnectAsyncWithBackoff, std::move(interface_provider_receiver), - GetServiceProcessServerName(), kMaxConnectionAttempts, - kInitialConnectionRetryDelay, base::ThreadTaskRunnerHandle::Get(), - base::BindOnce(&ServiceProcessControl::OnPeerConnectionComplete, - weak_factory_.GetWeakPtr()))); -} - -void ServiceProcessControl::OnPeerConnectionComplete( - std::unique_ptr<mojo::IsolatedConnection> connection) { - // Hold onto the connection object so the connection is kept alive. - mojo_connection_ = std::move(connection); -} - -void ServiceProcessControl::SetMojoHandle( - mojo::PendingRemote<service_manager::mojom::InterfaceProvider> handle) { - remote_interfaces_.Close(); - remote_interfaces_.Bind(std::move(handle)); - remote_interfaces_.SetConnectionLostClosure(base::BindOnce( - &ServiceProcessControl::OnChannelError, base::Unretained(this))); - - // TODO(hclam): Handle error connecting to channel. - remote_interfaces_.GetInterface( - service_process_.BindNewPipeAndPassReceiver()); - service_process_->Hello(base::BindOnce( - &ServiceProcessControl::OnChannelConnected, base::Unretained(this))); -} - -void ServiceProcessControl::RunConnectDoneTasks() { - // The tasks executed here may add more tasks to the vector. So copy - // them to the stack before executing them. This way recursion is - // avoided. - TaskList tasks; - - if (IsConnected()) { - tasks.swap(connect_success_tasks_); - RunAllTasksHelper(&tasks); - DCHECK(tasks.empty()); - connect_failure_tasks_.clear(); - } else { - tasks.swap(connect_failure_tasks_); - RunAllTasksHelper(&tasks); - DCHECK(tasks.empty()); - connect_success_tasks_.clear(); - } -} - -// static -void ServiceProcessControl::RunAllTasksHelper(TaskList* task_list) { - auto index = task_list->begin(); - while (index != task_list->end()) { - std::move(*index).Run(); - index = task_list->erase(index); - } -} - -bool ServiceProcessControl::IsConnected() const { - return !!service_process_; -} - -void ServiceProcessControl::Launch(base::OnceClosure success_task, - base::OnceClosure failure_task) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - if (success_task) - connect_success_tasks_.emplace_back(std::move(success_task)); - - if (failure_task) - connect_failure_tasks_.emplace_back(std::move(failure_task)); - - // If we already in the process of launching, then we are done. - if (launcher_.get()) - return; - - // If the service process is already running then connects to it. - if (CheckServiceProcessReady()) { - ConnectInternal(); - return; - } - - std::unique_ptr<base::CommandLine> cmd_line( - CreateServiceProcessCommandLine()); - // And then start the process asynchronously. - launcher_ = new Launcher(std::move(cmd_line)); - launcher_->Run(base::BindOnce(&ServiceProcessControl::OnProcessLaunched, - base::Unretained(this))); -} - -void ServiceProcessControl::Disconnect() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - mojo_connection_.reset(); - remote_interfaces_.Close(); - service_process_.reset(); - UpgradeDetector::GetInstance()->RemoveObserver(this); -} - -void ServiceProcessControl::OnProcessLaunched() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (launcher_->launched()) { - saved_pid_ = launcher_->saved_pid(); - // After we have successfully created the service process we try to connect - // to it. The launch task is transfered to a connect task. - ConnectInternal(); - } else { - // If we don't have process handle that means launching the service process - // has failed. - RunConnectDoneTasks(); - } - - // We don't need the launcher anymore. - launcher_.reset(); -} - -void ServiceProcessControl::OnUpgradeRecommended() { - if (apply_changes_from_upgrade_observer_) - service_process_->UpdateAvailable(); -} - -void ServiceProcessControl::OnChannelConnected() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - UpgradeDetector::GetInstance()->AddObserver(this); - - // We just established a channel with the service process. Notify it if an - // upgrade is available. - if (UpgradeDetector::GetInstance()->notify_upgrade()) - service_process_->UpdateAvailable(); - else - apply_changes_from_upgrade_observer_ = true; - - RunConnectDoneTasks(); -} - -void ServiceProcessControl::OnChannelError() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - Disconnect(); - RunConnectDoneTasks(); -} - -bool ServiceProcessControl::Shutdown() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (!service_process_) - return false; - service_process_->ShutDown(); - Disconnect(); - return true; -} - -// static -ServiceProcessControl* ServiceProcessControl::GetInstance() { - return base::Singleton<ServiceProcessControl>::get(); -} - -ServiceProcessControl::Launcher::Launcher( - std::unique_ptr<base::CommandLine> cmd_line) - : cmd_line_(std::move(cmd_line)), launched_(false), retry_count_(0) {} - -// Execute the command line to start the process asynchronously. -// After the command is executed, |task| is called with the process handle on -// the UI thread. -void ServiceProcessControl::Launcher::Run(base::OnceClosure task) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - notify_task_ = std::move(task); - content::GetProcessLauncherTaskRunner()->PostTask( - FROM_HERE, base::BindOnce(&Launcher::DoRun, this)); -} - -ServiceProcessControl::Launcher::~Launcher() { -} - - -void ServiceProcessControl::Launcher::Notify() { - DCHECK(!notify_task_.is_null()); - std::move(notify_task_).Run(); -} - -#if !defined(OS_MAC) -void ServiceProcessControl::Launcher::DoDetectLaunched() { - DCHECK(!notify_task_.is_null()); - - const uint32_t kMaxLaunchDetectRetries = 10; - launched_ = CheckServiceProcessReady(); - - int exit_code = 0; - if (launched_ || (retry_count_ >= kMaxLaunchDetectRetries) || - process_.WaitForExitWithTimeout(base::TimeDelta(), &exit_code)) { - process_.Close(); - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(&Launcher::Notify, this)); - return; - } - retry_count_++; - - // If the service process is not launched yet then check again in 2 seconds. - const base::TimeDelta kDetectLaunchRetry = base::Seconds(2); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(&Launcher::DoDetectLaunched, this), - kDetectLaunchRetry); -} - -void ServiceProcessControl::Launcher::DoRun() { - DCHECK(!notify_task_.is_null()); - - base::LaunchOptions options; -#if defined(OS_WIN) - options.start_hidden = true; -#endif - process_ = base::LaunchProcess(*cmd_line_, options); - if (process_.IsValid()) { - saved_pid_ = process_.Pid(); - content::GetIOThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(&Launcher::DoDetectLaunched, this)); - } else { - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(&Launcher::Notify, this)); - } -} -#endif // !OS_MAC
diff --git a/chrome/browser/service_process/service_process_control.h b/chrome/browser/service_process/service_process_control.h deleted file mode 100644 index e82157d..0000000 --- a/chrome/browser/service_process/service_process_control.h +++ /dev/null
@@ -1,187 +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 CHROME_BROWSER_SERVICE_PROCESS_SERVICE_PROCESS_CONTROL_H_ -#define CHROME_BROWSER_SERVICE_PROCESS_SERVICE_PROCESS_CONTROL_H_ - -#include <stdint.h> - -#include <memory> -#include <queue> -#include <set> -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/containers/id_map.h" -#include "base/memory/singleton.h" -#include "base/memory/weak_ptr.h" -#include "base/process/process.h" -#include "build/build_config.h" -#include "build/chromeos_buildflags.h" -#include "chrome/browser/upgrade_detector/upgrade_observer.h" -#include "chrome/common/service_process.mojom.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "services/service_manager/public/cpp/interface_provider.h" - -#if BUILDFLAG(IS_CHROMEOS_ASH) -#error "Not supported on ChromeOS" -#endif - -namespace base { -class CommandLine; -} - -namespace mojo { -class IsolatedConnection; -} - -// A ServiceProcessControl works as a portal between the service process and -// the browser process. -// -// It is used to start and terminate the service process. It is also used -// to send and receive IPC messages from the service process. -// -// THREADING -// -// This class is accessed on the UI thread through some UI actions. -class ServiceProcessControl : public UpgradeObserver { - public: - // Returns the singleton instance of this class. - static ServiceProcessControl* GetInstance(); - - ServiceProcessControl(const ServiceProcessControl&) = delete; - ServiceProcessControl& operator=(const ServiceProcessControl&) = delete; - - // Return true if this object is connected to the service. - // Virtual for testing. - virtual bool IsConnected() const; - - // If no service process is currently running, creates a new service process - // and connects to it. If a service process is already running this method - // will try to connect to it. - // |success_task| is called when we have successfully launched the process - // and connected to it. - // |failure_task| is called when we failed to connect to the service process. - // It is OK to pass the same value for |success_task| and |failure_task|. In - // this case, the task is invoked on success or failure. - // Note that if we are already connected to service process then - // |success_task| can be invoked in the context of the Launch call. - // Virtual for testing. - virtual void Launch(base::OnceClosure success_task, - base::OnceClosure failure_task); - - // Disconnect the IPC channel from the service process. - // Virtual for testing. - virtual void Disconnect(); - - // UpgradeObserver implementation. - void OnUpgradeRecommended() override; - - // Send a shutdown message to the service process. IPC channel will be - // destroyed after calling this method. - // Return true if the message was sent. - // Virtual for testing. - virtual bool Shutdown(); - - service_manager::InterfaceProvider& remote_interfaces() { - return remote_interfaces_; - } - - base::ProcessId GetLaunchedPidForTesting() const { return saved_pid_; } - - private: - // This class is responsible for launching the service process on the - // PROCESS_LAUNCHER thread. - class Launcher - : public base::RefCountedThreadSafe<ServiceProcessControl::Launcher> { - public: - explicit Launcher(std::unique_ptr<base::CommandLine> cmd_line); - // Execute the command line to start the process asynchronously. After the - // command is executed |task| is called with the process handle on the UI - // thread. - void Run(base::OnceClosure task); - - bool launched() const { return launched_; } - base::ProcessId saved_pid() const { return saved_pid_; } - - private: - friend class base::RefCountedThreadSafe<ServiceProcessControl::Launcher>; - virtual ~Launcher(); - -#if !defined(OS_MAC) - void DoDetectLaunched(); -#endif // !OS_MAC - - void DoRun(); - void Notify(); - std::unique_ptr<base::CommandLine> cmd_line_; - base::OnceClosure notify_task_; - bool launched_; - uint32_t retry_count_; - base::Process process_; - - // Used to save the process id for |process_| upon successful launch. - // Only used for testing. - base::ProcessId saved_pid_; - }; - - friend class MockServiceProcessControl; - friend class CloudPrintProxyPolicyStartupTest; - friend class TestCloudPrintProxyService; - - ServiceProcessControl(); - ~ServiceProcessControl() override; - - friend struct base::DefaultSingletonTraits<ServiceProcessControl>; - - using TaskList = std::vector<base::OnceClosure>; - - void OnChannelConnected(); - void OnChannelError(); - - // Helper method to invoke all the callbacks based on success or failure. - void RunConnectDoneTasks(); - - // Method called by Launcher when the service process is launched. - void OnProcessLaunched(); - - // Used internally to connect to the service process. - void ConnectInternal(); - - // Called when ConnectInternal's async work is done. - void OnPeerConnectionComplete( - std::unique_ptr<mojo::IsolatedConnection> connection); - - // Split out for testing. - void SetMojoHandle( - mojo::PendingRemote<service_manager::mojom::InterfaceProvider> handle); - - static void RunAllTasksHelper(TaskList* task_list); - - std::unique_ptr<mojo::IsolatedConnection> mojo_connection_; - - service_manager::InterfaceProvider remote_interfaces_{ - base::ThreadTaskRunnerHandle::Get()}; - mojo::Remote<chrome::mojom::ServiceProcess> service_process_; - - // Service process launcher. - scoped_refptr<Launcher> launcher_; - - // Callbacks that get invoked when the channel is successfully connected. - TaskList connect_success_tasks_; - // Callbacks that get invoked when there was a connection failure. - TaskList connect_failure_tasks_; - - // If true changes to UpgradeObserver are applied, if false they are ignored. - bool apply_changes_from_upgrade_observer_; - - // Same as |Launcher::saved_pid_|. - base::ProcessId saved_pid_; - - base::WeakPtrFactory<ServiceProcessControl> weak_factory_{this}; -}; - -#endif // CHROME_BROWSER_SERVICE_PROCESS_SERVICE_PROCESS_CONTROL_H_
diff --git a/chrome/browser/service_process/service_process_control_browsertest.cc b/chrome/browser/service_process/service_process_control_browsertest.cc deleted file mode 100644 index b67057e..0000000 --- a/chrome/browser/service_process/service_process_control_browsertest.cc +++ /dev/null
@@ -1,475 +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 "chrome/browser/service_process/service_process_control.h" - -#include "base/barrier_closure.h" -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/command_line.h" -#include "base/files/file_util.h" -#include "base/location.h" -#include "base/path_service.h" -#include "base/process/kill.h" -#include "base/process/process.h" -#include "base/process/process_iterator.h" -#include "base/run_loop.h" -#include "base/task/single_thread_task_runner.h" -#include "base/test/scoped_path_override.h" -#include "base/test/test_timeouts.h" -#include "base/threading/thread_restrictions.h" -#include "base/threading/thread_task_runner_handle.h" -#include "build/build_config.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/common/chrome_constants.h" -#include "chrome/common/cloud_print.mojom.h" -#include "chrome/common/service_process_util.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "components/version_info/version_info.h" -#include "content/public/common/content_paths.h" -#include "content/public/common/content_switches.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/test_utils.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "testing/gmock/include/gmock/gmock.h" - -#if defined(OS_WIN) -#include <Tlhelp32.h> -#include <windows.h> - -#include "base/threading/platform_thread.h" -#endif - -class ServiceProcessControlBrowserTest - : public InProcessBrowserTest { - public: - ServiceProcessControlBrowserTest() {} - ~ServiceProcessControlBrowserTest() override {} - - protected: - void LaunchServiceProcessControl(base::RepeatingClosure on_launched) { -#if defined(OS_MAC) - base::ScopedAllowBlockingForTesting allow_blocking; - // browser_tests and the child processes run as standalone executables, - // rather than bundled apps. For this test, set up the CHILD_PROCESS_EXE to - // point to a bundle so that the service process has an Info.plist. - base::FilePath exe_path; - ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &exe_path)); - exe_path = exe_path.Append(chrome::kBrowserProcessExecutablePath) - .DirName() - .DirName() - .Append("Frameworks") - .Append(chrome::kFrameworkName) - .Append("Versions") - .Append(chrome::kChromeVersion) - .Append("Helpers") - .Append(chrome::kHelperProcessExecutablePath); - base::ScopedPathOverride path_override(content::CHILD_PROCESS_EXE, - exe_path); -#endif - - // Launch the process asynchronously. - ServiceProcessControl::GetInstance()->Launch( - base::BindOnce( - &ServiceProcessControlBrowserTest::ProcessControlLaunched, - base::Unretained(this), on_launched), - base::BindOnce( - &ServiceProcessControlBrowserTest::ProcessControlLaunchFailed, - base::Unretained(this), on_launched)); - } - - void LaunchServiceProcessControlAndWait() { - base::RunLoop run_loop; - LaunchServiceProcessControl(run_loop.QuitClosure()); - run_loop.Run(); - } - - void Disconnect() { - // This will close the IPC connection. - ServiceProcessControl::GetInstance()->Disconnect(); - } - - void SetUp() override { - InProcessBrowserTest::SetUp(); - -#if defined(OS_MAC) || defined(OS_LINUX) || defined(OS_CHROMEOS) - // This should not be needed because TearDown() ends with a closed - // service_process_, but HistogramsTimeout and Histograms fail without this - // on Mac, and on Linux asan builds (https://crbug.com/1059446). - // Note that closing the process handle means that the exit-code check in - // TearDown will be skipped. - service_process_.Close(); -#endif - } - - void TearDown() override { - if (ServiceProcessControl::GetInstance()->IsConnected()) - EXPECT_TRUE(ServiceProcessControl::GetInstance()->Shutdown()); - -#if defined(OS_MAC) - // ForceServiceProcessShutdown removes the process from launched on Mac. - ForceServiceProcessShutdown("", 0); -#endif // OS_MAC - - if (service_process_.IsValid()) { - int exit_code; - EXPECT_TRUE(service_process_.WaitForExitWithTimeout( - TestTimeouts::action_max_timeout(), &exit_code)); - EXPECT_EQ(0, exit_code); - service_process_.Close(); - } - - InProcessBrowserTest::TearDown(); - } - - void ProcessControlLaunched(base::OnceClosure on_done) { - base::ScopedAllowBlockingForTesting allow_blocking; - base::ProcessId service_pid; - EXPECT_TRUE( - ServiceProcessState::GetServiceProcessData(nullptr, &service_pid)); - EXPECT_NE(static_cast<base::ProcessId>(0), service_pid); -#if defined(OS_WIN) - service_process_ = - base::Process::OpenWithAccess(service_pid, - SYNCHRONIZE | PROCESS_QUERY_INFORMATION); -#else - service_process_ = base::Process::Open(service_pid); -#endif - EXPECT_TRUE(service_process_.IsValid()); - std::move(on_done).Run(); - } - - void ProcessControlLaunchFailed(base::OnceClosure on_done) { - ADD_FAILURE(); - std::move(on_done).Run(); - } - - private: - base::Process service_process_; -}; - -class RealServiceProcessControlBrowserTest - : public ServiceProcessControlBrowserTest { - public: - void SetUpCommandLine(base::CommandLine* command_line) override { - ServiceProcessControlBrowserTest::SetUpCommandLine(command_line); - base::FilePath exe; - base::PathService::Get(base::DIR_EXE, &exe); -#if defined(OS_MAC) - exe = exe.DirName().DirName().DirName(); -#endif - exe = exe.Append(chrome::kHelperProcessExecutablePath); - // Run chrome instead of browser_tests.exe. - EXPECT_TRUE(base::PathExists(exe)); - command_line->AppendSwitchPath(switches::kBrowserSubprocessPath, exe); - } -}; - -// TODO(vitalybuka): Fix crbug.com/340563 -IN_PROC_BROWSER_TEST_F(RealServiceProcessControlBrowserTest, - DISABLED_LaunchAndIPC) { - LaunchServiceProcessControlAndWait(); - - // Make sure we are connected to the service process. - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - mojo::Remote<cloud_print::mojom::CloudPrint> cloud_print_proxy; - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - cloud_print_proxy.BindNewPipeAndPassReceiver()); - base::RunLoop run_loop; - cloud_print_proxy->GetCloudPrintProxyInfo( - base::BindOnce([](base::OnceClosure done, bool, const std::string&, - const std::string&) { std::move(done).Run(); }, - run_loop.QuitClosure())); - run_loop.Run(); - - // And then shutdown the service process. - EXPECT_TRUE(ServiceProcessControl::GetInstance()->Shutdown()); -} - -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, LaunchAndIPC) { - LaunchServiceProcessControlAndWait(); - - // Make sure we are connected to the service process. - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - mojo::Remote<cloud_print::mojom::CloudPrint> cloud_print_proxy; - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - cloud_print_proxy.BindNewPipeAndPassReceiver()); - base::RunLoop run_loop; - cloud_print_proxy->GetCloudPrintProxyInfo( - base::BindOnce([](base::OnceClosure done, bool, const std::string&, - const std::string&) { std::move(done).Run(); }, - run_loop.QuitClosure())); - run_loop.Run(); - - // And then shutdown the service process. - EXPECT_TRUE(ServiceProcessControl::GetInstance()->Shutdown()); -} - -// Flaky on macOS, linux and windows: https://crbug.com/978948 -#if defined(OS_MAC) || defined(OS_WIN) || defined(OS_LINUX) || \ - defined(OS_CHROMEOS) -#define MAYBE_LaunchAndReconnect DISABLED_LaunchAndReconnect -#else -#define MAYBE_LaunchAndReconnect LaunchAndReconnect -#endif -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, - MAYBE_LaunchAndReconnect) { - LaunchServiceProcessControlAndWait(); - - // Make sure we are connected to the service process. - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - // Send an IPC that will keep the service process alive after we disconnect. - mojo::Remote<cloud_print::mojom::CloudPrint> cloud_print_proxy; - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - cloud_print_proxy.BindNewPipeAndPassReceiver()); - cloud_print_proxy->EnableCloudPrintProxyWithRobot( - "", "", "", base::Value(base::Value::Type::DICTIONARY)); - - cloud_print_proxy.reset(); - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - cloud_print_proxy.BindNewPipeAndPassReceiver()); - { - base::RunLoop run_loop; - cloud_print_proxy->GetCloudPrintProxyInfo( - base::BindOnce([](base::OnceClosure done, bool, const std::string&, - const std::string&) { std::move(done).Run(); }, - run_loop.QuitClosure())); - run_loop.Run(); - Disconnect(); - } - - { - base::RunLoop run_loop; - LaunchServiceProcessControl(run_loop.QuitClosure()); - - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - run_loop.Run(); - } - - cloud_print_proxy.reset(); - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - cloud_print_proxy.BindNewPipeAndPassReceiver()); - { - base::RunLoop run_loop; - cloud_print_proxy->GetCloudPrintProxyInfo( - base::BindOnce([](base::OnceClosure done, bool, const std::string&, - const std::string&) { std::move(done).Run(); }, - run_loop.QuitClosure())); - run_loop.Run(); - } - - // And then shutdown the service process. - EXPECT_TRUE(ServiceProcessControl::GetInstance()->Shutdown()); -} - -// This tests the case when a service process is launched when the browser -// starts but we try to launch it again while setting up Cloud Print. -// Flaky on Mac. http://crbug.com/517420 -#if defined(OS_MAC) -#define MAYBE_LaunchTwice DISABLED_LaunchTwice -#else -#define MAYBE_LaunchTwice LaunchTwice -#endif -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_LaunchTwice) { - // Launch the service process the first time. - LaunchServiceProcessControlAndWait(); - - // Make sure we are connected to the service process. - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - mojo::Remote<cloud_print::mojom::CloudPrint> cloud_print_proxy; - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - cloud_print_proxy.BindNewPipeAndPassReceiver()); - { - base::RunLoop run_loop; - cloud_print_proxy->GetCloudPrintProxyInfo( - base::BindOnce([](base::OnceClosure done, bool, const std::string&, - const std::string&) { std::move(done).Run(); }, - run_loop.QuitClosure())); - run_loop.Run(); - } - - // Launch the service process again. - LaunchServiceProcessControlAndWait(); - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - cloud_print_proxy.reset(); - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - cloud_print_proxy.BindNewPipeAndPassReceiver()); - { - base::RunLoop run_loop; - cloud_print_proxy->GetCloudPrintProxyInfo( - base::BindOnce([](base::OnceClosure done, bool, const std::string&, - const std::string&) { std::move(done).Run(); }, - run_loop.QuitClosure())); - run_loop.Run(); - } -} - -// Flaky on Mac. http://crbug.com/517420 -#if defined(OS_MAC) -#define MAYBE_MultipleLaunchTasks DISABLED_MultipleLaunchTasks -#else -#define MAYBE_MultipleLaunchTasks MultipleLaunchTasks -#endif -// Invoke multiple Launch calls in succession and ensure that all the tasks -// get invoked. -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, - MAYBE_MultipleLaunchTasks) { - ServiceProcessControl* process = ServiceProcessControl::GetInstance(); - constexpr int kExpectedLaunchCount = 5; - int success_count = 0; - base::RunLoop run_loop; - base::RepeatingClosure on_launch_attempted = - base::BarrierClosure(kExpectedLaunchCount, run_loop.QuitClosure()); - for (int i = 0; i < kExpectedLaunchCount; i++) { - // Launch the process asynchronously. - process->Launch(base::BindOnce( - [](int* success_count, base::OnceClosure task) { - (*success_count)++; - std::move(task).Run(); - }, - &success_count, on_launch_attempted), - on_launch_attempted); - } - run_loop.Run(); - EXPECT_EQ(kExpectedLaunchCount, success_count); -} - -// Flaky on Mac. http://crbug.com/517420 -#if defined(OS_MAC) -#define MAYBE_SameLaunchTask DISABLED_SameLaunchTask -#else -#define MAYBE_SameLaunchTask SameLaunchTask -#endif -// Make sure using the same task for success and failure tasks works. -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_SameLaunchTask) { - ServiceProcessControl* process = ServiceProcessControl::GetInstance(); - constexpr int kExpectedLaunchCount = 5; - base::RunLoop run_loop; - base::RepeatingClosure task = - base::BarrierClosure(kExpectedLaunchCount, run_loop.QuitClosure()); - for (int i = 0; i < kExpectedLaunchCount; i++) { - // Launch the process asynchronously. - process->Launch(task, task); - } - run_loop.Run(); -} - -// Tests whether disconnecting from the service IPC causes the service process -// to die. -// Flaky on Mac. http://crbug.com/517420 -#if defined(OS_MAC) -#define MAYBE_DieOnDisconnect DISABLED_DieOnDisconnect -#else -#define MAYBE_DieOnDisconnect DieOnDisconnect -#endif -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, - MAYBE_DieOnDisconnect) { - // Launch the service process. - LaunchServiceProcessControlAndWait(); - // Make sure we are connected to the service process. - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - Disconnect(); -} - -// Flaky on Mac. http://crbug.com/517420 -#if defined(OS_MAC) -#define MAYBE_ForceShutdown DISABLED_ForceShutdown -#else -#define MAYBE_ForceShutdown ForceShutdown -#endif -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_ForceShutdown) { - // Launch the service process. - LaunchServiceProcessControlAndWait(); - // Make sure we are connected to the service process. - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - base::ProcessId service_pid; - base::ScopedAllowBlockingForTesting allow_blocking; - EXPECT_TRUE( - ServiceProcessState::GetServiceProcessData(nullptr, &service_pid)); - EXPECT_NE(static_cast<base::ProcessId>(0), service_pid); - ForceServiceProcessShutdown(version_info::GetVersionNumber(), service_pid); -} - -// Flaky on Mac. http://crbug.com/517420 -#if defined(OS_MAC) -#define MAYBE_CheckPid DISABLED_CheckPid -#else -#define MAYBE_CheckPid CheckPid -#endif -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, MAYBE_CheckPid) { - base::ProcessId service_pid; - base::ScopedAllowBlockingForTesting allow_blocking; - EXPECT_FALSE( - ServiceProcessState::GetServiceProcessData(nullptr, &service_pid)); - // Launch the service process. - LaunchServiceProcessControlAndWait(); - EXPECT_TRUE( - ServiceProcessState::GetServiceProcessData(nullptr, &service_pid)); - EXPECT_NE(static_cast<base::ProcessId>(0), service_pid); - // Disconnect from service process. - Disconnect(); -} - -#if defined(OS_WIN) -// Test for https://crbug.com/860827 to make sure it is possible to stop the -// Cloud Print service with WM_QUIT. -IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, StopViaWmQuit) { - LaunchServiceProcessControlAndWait(); - - // Make sure we are connected to the service process. - ASSERT_TRUE(ServiceProcessControl::GetInstance()->IsConnected()); - mojo::Remote<cloud_print::mojom::CloudPrint> cloud_print_proxy; - ServiceProcessControl::GetInstance()->remote_interfaces().GetInterface( - cloud_print_proxy.BindNewPipeAndPassReceiver()); - base::RunLoop run_loop; - cloud_print_proxy->GetCloudPrintProxyInfo( - base::BindOnce([](base::OnceClosure done, bool, const std::string&, - const std::string&) { std::move(done).Run(); }, - run_loop.QuitClosure())); - run_loop.Run(); - - base::ProcessId pid = - ServiceProcessControl::GetInstance()->GetLaunchedPidForTesting(); - base::Process process = base::Process::Open(pid); - ASSERT_TRUE(process.IsValid()); - - // Find the first thread associated with |pid|. - base::PlatformThreadId tid = 0; - { - HANDLE snapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, NULL); - ASSERT_NE(INVALID_HANDLE_VALUE, snapshot); - - THREADENTRY32 thread_entry = {0}; - thread_entry.dwSize = sizeof(THREADENTRY32); - - BOOL result = ::Thread32First(snapshot, &thread_entry); - while (result) { - if (thread_entry.th32OwnerProcessID == pid) { - tid = thread_entry.th32ThreadID; - break; - } - result = Thread32Next(snapshot, &thread_entry); - } - } - ASSERT_NE(base::kInvalidThreadId, tid); - - // And then shutdown the service process via WM_QUIT. - ASSERT_TRUE(::PostThreadMessage(tid, WM_QUIT, 0, 0)); - - // And wait for it to stop running. - constexpr int kRetries = 5; - for (int retry = 0; retry < kRetries; ++retry) { - if (!process.IsRunning()) { - // |process| stopped running. Test is done. - return; - } - - // |process| did not stop running. Wait. - base::PlatformThread::Sleep(base::Seconds(1)); - } - - // |process| still did not stop running after |kRetries|. - FAIL(); -} -#endif // defined(OS_WIN)
diff --git a/chrome/browser/service_process/service_process_control_mac.mm b/chrome/browser/service_process/service_process_control_mac.mm deleted file mode 100644 index d45b4b5e..0000000 --- a/chrome/browser/service_process/service_process_control_mac.mm +++ /dev/null
@@ -1,20 +0,0 @@ -// Copyright (c) 2011 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/service_process/service_process_control.h" - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/mac/foundation_util.h" -#include "base/mac/scoped_cftyperef.h" -#include "chrome/common/service_process_util_posix.h" -#include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" - -void ServiceProcessControl::Launcher::DoRun() { - launched_ = mac::services::SubmitJob( - GetServiceProcessJobOptions(cmd_line_.get(), false)); - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(&Launcher::Notify, this)); -}
diff --git a/chrome/browser/service_process/service_process_control_mac_unittest.mm b/chrome/browser/service_process/service_process_control_mac_unittest.mm deleted file mode 100644 index cda5e66..0000000 --- a/chrome/browser/service_process/service_process_control_mac_unittest.mm +++ /dev/null
@@ -1,61 +0,0 @@ -// Copyright 2014 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 <launch.h> - -#include "base/mac/foundation_util.h" -#include "base/mac/launchd.h" -#include "base/mac/scoped_nsobject.h" -#include "base/test/test_timeouts.h" -#include "base/time/time.h" -#include "chrome/common/mac/service_management.h" -#include "testing/gtest/include/gtest/gtest.h" - -TEST(ServiceProcessControlMac, TestJobSubmitRemove) { - NSString* label_ns = @"com.chromium.ServiceProcessStateFileManipulationTest"; - std::string label(label_ns.UTF8String); - - // If the job is loaded or running, remove it. - pid_t pid = base::mac::PIDForJob(label); - if (pid >= 0) - ASSERT_TRUE(mac::services::RemoveJob(label)); - - // The job should not be loaded or running. - pid = base::mac::PIDForJob(label); - EXPECT_LT(pid, 0); - - // Submit a new job. - mac::services::JobOptions options; - options.label = label; - options.executable_path = "/bin/sh"; - options.arguments = {"sh", "-c", "sleep 10; echo TestJobSubmitRemove"}; - options.run_at_load = true; - options.auto_launch = false; - ASSERT_TRUE(mac::services::SubmitJob(options)); - - // The new job should be running. - pid = base::mac::PIDForJob(label); - EXPECT_GT(pid, 0); - - // Remove the job. - ASSERT_TRUE(mac::services::RemoveJob(label)); - - // Wait for the job to be killed. - base::TimeDelta timeout_in_ms = TestTimeouts::action_timeout(); - base::Time start_time = base::Time::Now(); - while (1) { - pid = base::mac::PIDForJob(label); - if (pid < 0) - break; - - base::Time current_time = base::Time::Now(); - if (current_time - start_time > timeout_in_ms) - break; - } - - EXPECT_LT(pid, 0); - - // Attempting to remove the job again should fail. - EXPECT_FALSE(mac::services::RemoveJob(label)); -}
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 b0d813a1..0361c7a 100644 --- a/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc +++ b/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc
@@ -117,6 +117,11 @@ void DeleteProfiles() { identity_test_env_profile_adaptor_.reset(); + + // Delete the profile first to make sure all observers to the profile + // manager are cleared to avoid heap-use-after-free when the observer try to + // stop observing the manager. + profile_.reset(); if (profile_manager_) { profile_manager()->RemoveObserver(this); TestingBrowserProcess::GetGlobal()->SetProfileManager(nullptr);
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc b/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc index 1f66d5d..235b4e40 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc
@@ -74,12 +74,14 @@ // If the account info is valid, does nothing. Otherwise fills the extended // fields with default values. -void MakeValidAccountInfo(AccountInfo* info) { +void MakeValidAccountInfo( + AccountInfo* info, + const std::string& hosted_domain = kNoHostedDomainFound) { if (info->IsValid()) return; info->full_name = "fullname"; info->given_name = "givenname"; - info->hosted_domain = kNoHostedDomainFound; + info->hosted_domain = hosted_domain; info->locale = "en"; info->picture_url = "https://example.com"; DCHECK(info->IsValid()); @@ -252,8 +254,7 @@ TEST_F(DiceWebSigninInterceptorTest, NoBubbleWithSingleAccount) { AccountInfo account_info = identity_test_env()->MakeAccountAvailable("bob@example.com"); - MakeValidAccountInfo(&account_info); - account_info.hosted_domain = "example.com"; + MakeValidAccountInfo(&account_info, "example.com"); identity_test_env()->UpdateAccountInfoForAccount(account_info); // Without UPA. @@ -417,8 +418,7 @@ // managed separation. AccountInfo account_info = identity_test_env()->MakePrimaryAccountAvailable( "alice@example.com", signin::ConsentLevel::kSignin); - MakeValidAccountInfo(&account_info); - account_info.hosted_domain = "example.com"; + MakeValidAccountInfo(&account_info, "example.com"); identity_test_env()->UpdateAccountInfoForAccount(account_info); profile()->GetPrefs()->SetString(prefs::kManagedAccountsSigninRestriction, "primary_account"); @@ -441,8 +441,7 @@ EnforceManagedAccountAsPrimaryManaged) { AccountInfo account_info = identity_test_env()->MakeAccountAvailable("alice@example.com"); - MakeValidAccountInfo(&account_info); - account_info.hosted_domain = "example.com"; + MakeValidAccountInfo(&account_info, "example.com"); identity_test_env()->UpdateAccountInfoForAccount(account_info); profile()->GetPrefs()->SetString(prefs::kManagedAccountsSigninRestriction, @@ -465,8 +464,7 @@ EnforceManagedAccountAsPrimaryProfileSwitch) { AccountInfo account_info = identity_test_env()->MakeAccountAvailable("alice@example.com"); - MakeValidAccountInfo(&account_info); - account_info.hosted_domain = "example.com"; + MakeValidAccountInfo(&account_info, "example.com"); identity_test_env()->UpdateAccountInfoForAccount(account_info); profile()->GetPrefs()->SetBoolean( @@ -551,6 +549,8 @@ // Setup for profile switch interception. std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); + MakeValidAccountInfo(&account_info, "example.com"); + identity_test_env()->UpdateAccountInfoForAccount(account_info); Profile* profile_2 = CreateTestingProfile("Profile 2"); ProfileAttributesEntry* entry = profile_attributes_storage()->GetProfileAttributesWithPath( @@ -587,6 +587,9 @@ TEST_F(DiceWebSigninInterceptorTest, HeuristicAccountNotAdded) { // Setup for profile switch interception. std::string email = "bob@example.com"; + AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); + MakeValidAccountInfo(&account_info, "example.com"); + identity_test_env()->UpdateAccountInfoForAccount(account_info); Profile* profile_2 = CreateTestingProfile("Profile 2"); ProfileAttributesEntry* entry = profile_attributes_storage()->GetProfileAttributesWithPath( @@ -616,12 +619,6 @@ /*is_new_account=*/true, /*is_sync_signin=*/false, "bob", /*entry=*/nullptr), SigninInterceptionHeuristicOutcome::kInterceptProfileSwitch); - // Using wrong domain does not trigger the interception. - EXPECT_EQ( - interceptor()->GetHeuristicOutcome( - /*is_new_account=*/true, /*is_sync_signin=*/false, "bob@example.com", - /*entry=*/nullptr), - SigninInterceptionHeuristicOutcome::kAbortSingleAccount); } // Checks that no heuristic is returned if signin interception is disabled. @@ -661,6 +658,8 @@ // Setup for profile switch interception. std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); + MakeValidAccountInfo(&account_info, "example.com"); + identity_test_env()->UpdateAccountInfoForAccount(account_info); Profile* profile_2 = CreateTestingProfile("Profile 2"); ProfileAttributesEntry* entry = profile_attributes_storage()->GetProfileAttributesWithPath( @@ -715,8 +714,7 @@ "bob@example.com", signin::ConsentLevel::kSignin); AccountInfo account_info = identity_test_env()->MakeAccountAvailable("alice@example.com"); - MakeValidAccountInfo(&account_info); - account_info.hosted_domain = "example.com"; + MakeValidAccountInfo(&account_info, "example.com"); identity_test_env()->UpdateAccountInfoForAccount(account_info); const int kMaxProfileCreationDeclinedCount = 2; @@ -772,6 +770,8 @@ // Setup for profile switch interception. std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); + MakeValidAccountInfo(&account_info, "example.com"); + identity_test_env()->UpdateAccountInfoForAccount(account_info); Profile* profile_2 = CreateTestingProfile("Profile 2"); ProfileAttributesEntry* entry = profile_attributes_storage()->GetProfileAttributesWithPath( @@ -823,7 +823,7 @@ TEST_F(DiceWebSigninInterceptorTest, NoInterceptionWithOneAccount) { base::HistogramTester histogram_tester; AccountInfo account_info = - identity_test_env()->MakeAccountAvailable("bob@example.com"); + identity_test_env()->MakeAccountAvailable("bob@gmail.com"); // Interception aborts even if the account info is not available. ASSERT_FALSE(identity_test_env() ->identity_manager() @@ -843,8 +843,12 @@ // Setup for profile switch interception. std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); + MakeValidAccountInfo(&account_info, "example.com"); + identity_test_env()->UpdateAccountInfoForAccount(account_info); AccountInfo other_account_info = identity_test_env()->MakeAccountAvailable("alice@example.com"); + MakeValidAccountInfo(&other_account_info, "example.com"); + identity_test_env()->UpdateAccountInfoForAccount(other_account_info); Profile* profile_2 = CreateTestingProfile("Profile 2"); ProfileAttributesEntry* entry = profile_attributes_storage()->GetProfileAttributesWithPath( @@ -894,8 +898,7 @@ ShowSigninInterceptionBubble( web_contents(), MatchBubbleParameters(expected_parameters), testing::_)); - MakeValidAccountInfo(&account_info); - account_info.hosted_domain = "example.com"; + MakeValidAccountInfo(&account_info, "example.com"); identity_test_env()->UpdateAccountInfoForAccount(account_info); histogram_tester.ExpectTotalCount("Signin.Intercept.AccountInfoFetchDuration", 1); @@ -908,8 +911,7 @@ "bob@example.com", signin::ConsentLevel::kSignin); AccountInfo account_info = identity_test_env()->MakeAccountAvailable("alice@example.com"); - MakeValidAccountInfo(&account_info); - account_info.hosted_domain = "example.com"; + MakeValidAccountInfo(&account_info, "example.com"); identity_test_env()->UpdateAccountInfoForAccount(account_info); // Account info is already available, interception happens immediately.
diff --git a/chrome/browser/signin/signin_features.cc b/chrome/browser/signin/signin_features.cc index b193280..5afe1ba 100644 --- a/chrome/browser/signin/signin_features.cc +++ b/chrome/browser/signin/signin_features.cc
@@ -13,4 +13,4 @@ // Uses enterprise confirmation dialog for managed accounts signin outside of // the profile picker. const base::Feature kAccountPoliciesLoadedWithoutSync{ - "AccountPoliciesLoadedWithoutSync", base::FEATURE_DISABLED_BY_DEFAULT}; + "AccountPoliciesLoadedWithoutSync", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/spellchecker/spellcheck_service.cc b/chrome/browser/spellchecker/spellcheck_service.cc index d9c838f..988ee88 100644 --- a/chrome/browser/spellchecker/spellcheck_service.cc +++ b/chrome/browser/spellchecker/spellcheck_service.cc
@@ -120,8 +120,7 @@ // preferences for non-Hunspell languages so that there is no attempt to // load a non-existent Hunspell dictionary, and so that Hunspell // spellchecking isn't broken because of the failed load. - ListPrefUpdateDeprecated update(prefs, - spellcheck::prefs::kSpellCheckDictionaries); + ListPrefUpdate update(prefs, spellcheck::prefs::kSpellCheckDictionaries); update->EraseListValueIf([](const base::Value& entry) { return spellcheck::GetCorrespondingSpellCheckLanguage(entry.GetString()) .empty(); @@ -654,8 +653,7 @@ DCHECK(prefs); // When following object goes out of scope, preference change observers will // be notified (even if there is no preference change). - ListPrefUpdateDeprecated update(prefs, - spellcheck::prefs::kSpellCheckDictionaries); + ListPrefUpdate update(prefs, spellcheck::prefs::kSpellCheckDictionaries); update->EraseListValueIf([this](const base::Value& entry) { const std::string dictionary_name = entry.GetString(); return (!UsesWindowsDictionary(dictionary_name) && @@ -663,8 +661,8 @@ .empty()); }); - // No need to call LoadDictionaries() as when the ListPrefUpdateDeprecated - // object goes out of scope, the preference change handler will do this. + // No need to call LoadDictionaries() as when the ListPrefUpdate object goes + // out of scope, the preference change handler will do this. } bool SpellcheckService::UsesWindowsDictionary(
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index b71a69f..f9d0f9a 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -5261,12 +5261,6 @@ "webui/print_preview/local_printer_handler_default.h", ] } - - if (enable_service_discovery) { - if (!is_chromeos_ash) { - deps += [ "//chrome/common:service_process_mojom" ] - } - } } if (safe_browsing_mode > 0) {
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 ebb8f9b..bb434f7e 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Gaan na bladsy</translation> <translation id="2122601567107267586">Kon nie program oopmaak nie</translation> <translation id="2126426811489709554">Aangedryf deur Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> gestoor</translation> <translation id="2132122640199389833">Verwyder alle gekoppelde toestelle</translation> <translation id="213279576345780926">Het <ph name="TAB_TITLE" /> toegemaak</translation> <translation id="2139186145475833000">Voeg by tuisskerm</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Dateer <ph name="PRODUCT_NAME" /> op</translation> <translation id="3912508018559818924">Soek tans die beste op die web …</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> is aan</translation> -<translation id="3925830358619338299">Jou wagwoord word op jou toestel geënkripteer voordat dit in Google Wagwoordbestuurder gestoor word</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Kombineer my data</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Jou lêer sal gestoor word in <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Wysig<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Wissel Na Oortjie</translation> <translation id="572328651809341494">Onlangse oortjies</translation> -<translation id="5723735397759933332">Ligte modus bespaar jou nou meer data deur prente op HTTPS-bladsye te optimeer.</translation> <translation id="5726692708398506830">Maak alles op die bladsy groter</translation> <translation id="5748802427693696783">Het na standaardoortjies oorgeskakel</translation> <translation id="5749068826913805084">Chrome het bergingtoegang nodig om lêers af te laai.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Voorskou-oortjie is half oopgemaak</translation> <translation id="8428213095426709021">Instellings</translation> <translation id="8430824733382774043">Deel net skermskoot</translation> -<translation id="8431730749911729314">Enkripteer wagwoorde op jou toestel voordat dit in Google Wagwoordbestuurder gestoor word</translation> <translation id="8438566539970814960">Maak soektogte en blaai-ervaring beter</translation> <translation id="8439974325294139057"><ph name="LANG" /> – taal is gereed; herbegin <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Geen stories beskikbaar nie</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Kry jou leeslys in Boekmerke</translation> <translation id="8562452229998620586">Gestoorde wagwoorde sal hier verskyn.</translation> <translation id="856481929701340285">Versoek rekenaarwerf</translation> -<translation id="8569404424186215731">sedert <ph name="DATE" /></translation> <translation id="8570677896027847510">Lêer kan nie veilig afgelaai word nie</translation> <translation id="8571213806525832805">Afgelope vier weke</translation> <translation id="8572344201470131220">Prent is gekopieer</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 7175d30..f79bbfd0 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">ወደዚህ ገጽ ይሂዱ</translation> <translation id="2122601567107267586">መተግበሪያውን መክፈት አልተቻለም</translation> <translation id="2126426811489709554">በChrome የጎለበተ</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ተቀምጧል</translation> <translation id="2132122640199389833">ሁሉንም የተገናኙ መሣሪያዎችን ያስወግዱ</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> ተዘግቷል</translation> <translation id="2139186145475833000">ወደ መነሻ ማያ ገጽ አክል</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" />ን ያዘምኑ</translation> <translation id="3912508018559818924">ምርጡን ከድር ማግኘት…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> በርቷል</translation> -<translation id="3925830358619338299">የይለፍ ቃልዎ ወደ Google የይለፍ ቃል አስተዳዳሪ ከመቀመጡ በፊት በመሣሪያዎ ላይ ይመሠጠራል</translation> <translation id="3927692899758076493">ሳንስ ሰሪፍ</translation> <translation id="3928666092801078803">የእኔን ውሂብ አጣምር</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">የእርስዎ ፋይል ወደ <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> ይቀመጣል። <ph name="BEGIN_LINK2" />አርትዕ<ph name="END_LINK2" />።</translation> <translation id="570347048394355941">ወደ ትር ቀይር</translation> <translation id="572328651809341494">የቅርብ ጊዜ ትሮች</translation> -<translation id="5723735397759933332">ቀላል ሁነታ አሁን በኤችቲቲፒኤስ ገጾች ላይ ምስሎችን በማላቅ ተጨማሪ ውሂብ ያስቀምጠዎታል።</translation> <translation id="5726692708398506830">በገጹ ላይ ያለውን ሁሉንም ነገር ይበልጥ አተልቅ</translation> <translation id="5748802427693696783">ወደ መደበኛ ትሮች ቀይር</translation> <translation id="5749068826913805084">Chrome ፋይሎችን ለማውረድ የማከማቻ መዳረሻ ያስፈልገዋል።</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">የቅድመ-እይታ ትር ግማሽ ተከፍቷል</translation> <translation id="8428213095426709021">ቅንብሮች</translation> <translation id="8430824733382774043">ቅጽበታዊ ገጽ እይታን ብቻ ያጋሩ</translation> -<translation id="8431730749911729314">በመሣሪያዎ ላይ ያሉ የይለፍ ቃላትን ወደ Google የይለፍ ቃል አስተዳዳሪ ከመቀመጣቸው በፊት ያመስጥሩ</translation> <translation id="8438566539970814960">ፍለጋዎችን እና አሰሳን የተሻለ አድርግ</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ቋንቋ ዝግጁ ነው፣ <ph name="APP_NAME" />ን እንደገና ያስጀምሩ።</translation> <translation id="8442258441309440798">ምንም ዘገባዎች አይገኙም</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">የንባብ ዝርዝርዎን በዕልባቶች ውስጥ ያግኙ</translation> <translation id="8562452229998620586">የተቀመጡ ይለፍ ቃላት እዚህ ይመጣሉ።</translation> <translation id="856481929701340285">የዴስክቶፕ ጣቢያን ይጠይቁ</translation> -<translation id="8569404424186215731">ከ<ph name="DATE" /> ጀምሮ</translation> <translation id="8570677896027847510">ፋይል ደህንነቱ በተጠበቀ ሁኔታ ሊወርድ አይችልም</translation> <translation id="8571213806525832805">ባለፉት 4 ሳምንቶች</translation> <translation id="8572344201470131220">ምስል ተቀድቷል</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 b9157f00..b408c2b 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">الانتقال إلى الصفحة</translation> <translation id="2122601567107267586">تعذر فتح التطبيق</translation> <translation id="2126426811489709554">يدعمها Chrome</translation> -<translation id="2131665479022868825">تم توفير <ph name="DATA" /></translation> <translation id="2132122640199389833">إزالة جميع الأجهزة المرتبطة</translation> <translation id="213279576345780926">تم إغلاق <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">الإضافة إلى الشاشة الرئيسية</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">تحديث <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">جارٍ العثور على الأفضل من الويب...</translation> <translation id="3924911262913579434">وضع <ph name="SAFE_BROWSING_MODE" /> مفعّل.</translation> -<translation id="3925830358619338299">يتم تشفير كلمات المرور على جهازك قبل حفظها في "مدير كلمات المرور" من Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">جمع البيانات التابعة لي</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">سيتمّ حفظ ملفك في <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />تعديل<ph name="END_LINK2" /></translation> <translation id="570347048394355941">التبديل إلى مفتاح التبويب (Tab)</translation> <translation id="572328651809341494">علامات التبويب الأخيرة</translation> -<translation id="5723735397759933332">يوفّر "الوضع البسيط" الآن المزيد من البيانات من خلال تحسين الصور على صفحات HTTPS.</translation> <translation id="5726692708398506830">تكبير كامل محتوى الصفحة</translation> <translation id="5748802427693696783">تم التبديل إلى علامات التبويب القياسية</translation> <translation id="5749068826913805084">يحتاج Chrome للوصول إلى مساحة التخزين لتنزيل الملفات.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">علامة تبويب المعاينة مفتوحة جزئيًا</translation> <translation id="8428213095426709021">الإعدادات</translation> <translation id="8430824733382774043">مشاركة لقطة الشاشة فقط</translation> -<translation id="8431730749911729314">يمكنك تشفير كلمات المرور على جهازك قبل حفظها في "مدير كلمات المرور" من Google</translation> <translation id="8438566539970814960">تحسين عمليات البحث والتصفُّح</translation> <translation id="8439974325294139057">تم تنزيل حزمة اللغة <ph name="LANG" />. يُرجى إعادة تشغيل <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">لا تتوفّر أي قصص</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">العثور على قائمة القراءة في الإشارات المرجعية</translation> <translation id="8562452229998620586">ستظهر هنا كلمات المرور المحفوظة.</translation> <translation id="856481929701340285">طلب موقع الكمبيوتر</translation> -<translation id="8569404424186215731">منذ <ph name="DATE" /></translation> <translation id="8570677896027847510">تعذَّر تنزيل الملف بشكل آمن</translation> <translation id="8571213806525832805">الأسابيع الـ4 الأخيرة</translation> <translation id="8572344201470131220">تم نسخ الصورة.</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 5a9b85d9..0cd6dc7 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">পৃষ্ঠালৈ যাওক</translation> <translation id="2122601567107267586">এপ্ খুলিব পৰা নগ’ল</translation> <translation id="2126426811489709554">Chromeৰ দ্বাৰা সঞ্চালিত</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ছেভ কৰা হৈছে</translation> <translation id="2132122640199389833">লিংক কৰি থোৱা আটাইবোৰ ডিভাইচ আঁতৰাওক</translation> <translation id="213279576345780926">বন্ধ <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">গৃহ স্ক্ৰীণত যোগ কৰক</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Chromeত নেভিগে’ট কৰা</translation> <translation id="5487521232677179737">ডেটা মচক</translation> <translation id="549025011754480756">আপোনাৰ কণ্ঠধ্বনিৰ জৰিয়তে কেনেকৈ সন্ধান কৰিব লাগে</translation> +<translation id="5492637351392383067">অন-ডিভাইচ এনক্ৰিপশ্বন</translation> <translation id="5514904542973294328">এই ডিভাইচটোৰ প্ৰশাসকে অক্ষম কৰিছে</translation> <translation id="5515439363601853141">আপোনাৰ পাছৱৰ্ডটো চাবলৈ আনলক কৰক</translation> <translation id="5517095782334947753">আপোনাৰ ওচৰত <ph name="FROM_ACCOUNT" />ৰ বুকমার্ক, ইতিহাস, পাছৱর্ড আৰু অন্য ছেটিংসমূহ আছে।</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">আপোনাৰ ফাইলটো <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />ত ছেভ কৰা হ’ব। <ph name="BEGIN_LINK2" />সম্পাদনা কৰক<ph name="END_LINK2" />।</translation> <translation id="570347048394355941">টেবলৈ সলনি কৰক</translation> <translation id="572328651809341494">শেহতীয়াকৈ বন্ধ কৰা টেব</translation> -<translation id="5723735397759933332">লাইট ম’ডে এতিয়া HTTPS পৃষ্ঠাসমূহত প্ৰতিচ্ছবিসমূহ অপ্টিমাইজ কৰি আপোনাৰ অধিক ডেটা ৰাহি কৰে।</translation> <translation id="5726692708398506830">পৃষ্ঠাটোৰ সকলো সমলৰ আকাৰ ডাঙৰ কৰক</translation> <translation id="5748802427693696783">উন্নত টেব ব্যৱহাৰ কৰক</translation> <translation id="5749068826913805084">ফাইল ডাউনল’ড কৰিবলৈ Chromeক ষ্ট’ৰেজত এক্সেছৰ আৱশ্যক।</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">আপোনাৰ পঢ়াৰ সূচীখন বুকমাৰ্কসমূহত বিচাৰক</translation> <translation id="8562452229998620586">ছেভ কৰি থোৱা পাছৱৰ্ডসমূহ ইয়াত দেখা যাব।</translation> <translation id="856481929701340285">ডেস্কটপ ছাইটৰ অনুৰোধ কৰক</translation> -<translation id="8569404424186215731"><ph name="DATE" />ৰ পৰা</translation> <translation id="8570677896027847510">ফাইল সুৰক্ষিতভাৱে ডাউনল’ড কৰিব নোৱাৰি</translation> <translation id="8571213806525832805">যোৱা ৪ সপ্তাহ</translation> <translation id="8572344201470131220">প্ৰতিচ্ছবিৰ প্ৰতিলিপি কৰা হ’ল</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 a20d692..4261ad2 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Səhifəyə gedin</translation> <translation id="2122601567107267586">Tətbiqi açmaq alınmadı</translation> <translation id="2126426811489709554">Chrome Powered by</translation> -<translation id="2131665479022868825"><ph name="DATA" /> yadda saxlandı</translation> <translation id="2132122640199389833">Bütün əlaqəli cihazları silin</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> qapadıldı</translation> <translation id="2139186145475833000">Əsas ekrana əlavə edin</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> məhsulunu güncəlləyin</translation> <translation id="3912508018559818924">Vebdən ən yaxşısını tapın…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> aktivdir</translation> -<translation id="3925830358619338299">Parolunuz Google Parol Menecerində saxlanmazdan əvvəl cihazınızda şifrələnir</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Datamı birləşdirin</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Faylınız burada saxlanacaq: <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Düzəliş edin<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Taba keçin</translation> <translation id="572328651809341494">Son panellər</translation> -<translation id="5723735397759933332">Layt rejimi HTTPS səhifələrində şəkilləri optimallaşdıraraq daha çox dataya qənaət edir.</translation> <translation id="5726692708398506830">Səhifədəki hər şeyi böyüdün</translation> <translation id="5748802427693696783">Standart panellərə keçdi</translation> <translation id="5749068826913805084">Faylları endirmək üçün Chrome yaddaşa giriş tələb edir.</translation> @@ -1321,7 +1318,6 @@ <translation id="8427875596167638501">Önbaxış tabının yarısı açılıb</translation> <translation id="8428213095426709021">Ayarlar</translation> <translation id="8430824733382774043">Yalnız skrinşot paylaşın</translation> -<translation id="8431730749911729314">Google Parol Menecerində saxlanmazdan əvvəl cihazınızda parolları şifrələyin</translation> <translation id="8438566539970814960">Axtarış və brauzer fəaliyyətini təkmilləşdirin</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Dil hazırdır, <ph name="APP_NAME" /> tətbiqini yenidən başladın.</translation> <translation id="8442258441309440798">Əlçatan hekayə yoxdur</translation> @@ -1357,7 +1353,6 @@ <translation id="8560602726703398413">Əlfəcinlərdə oxuma siyahınızı tapın</translation> <translation id="8562452229998620586">Saxlanmış parollar burada görünəcək.</translation> <translation id="856481929701340285">Əsas Versiya Sorğusu</translation> -<translation id="8569404424186215731"><ph name="DATE" /> tarixindən etibarən</translation> <translation id="8570677896027847510">Faylı təhlükəsiz şəkildə endirmək mümkün deyil</translation> <translation id="8571213806525832805">Son 4 həftə</translation> <translation id="8572344201470131220">Şəkil Kopyalanıb</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 ebee692..dea9792 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Перайдзіце на старонку</translation> <translation id="2122601567107267586">Не ўдалося адкрыць праграму</translation> <translation id="2126426811489709554">На платформе Chrome</translation> -<translation id="2131665479022868825">Эканомія: <ph name="DATA" /></translation> <translation id="2132122640199389833">Выдаліць усе звязаныя прылады</translation> <translation id="213279576345780926">Закрыта ўкладка <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Дадаць на галоўны экран</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Навігацыя ў Chrome</translation> <translation id="5487521232677179737">Ачысціць даныя</translation> <translation id="549025011754480756">Як выкарыстоўваць галасавы пошук</translation> +<translation id="5492637351392383067">Шыфраванне на прыладзе</translation> <translation id="5514904542973294328">Выключана адміністратарам гэтай прылады</translation> <translation id="5515439363601853141">Каб паглядзець пароль, трэба зняць блакіроўку</translation> <translation id="5517095782334947753">У вас ёсць закладкі, гісторыя, паролі і іншыя налады з уліковага запісу <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Файл будзе захаваны ў папцы <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Змяніць<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Пераключыцца на ўкладку</translation> <translation id="572328651809341494">Нядаўнія ўкладкі</translation> -<translation id="5723735397759933332">Цяпер у спрошчаным рэжыме можна захоўваць больш даных з дапамогай аптымізацыі відарысаў на старонках HTTPS.</translation> <translation id="5726692708398506830">Павялічыць усё на старонцы</translation> <translation id="5748802427693696783">Пераключана на стандартныя ўкладкі</translation> <translation id="5749068826913805084">Для спампоўвання файлаў Chrome патрабуецца доступ да сховішча.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Шукайце спіс чытання ў Закладках</translation> <translation id="8562452229998620586">Захаваныя паролі з'явяцца тут.</translation> <translation id="856481929701340285">Запытаць версію для настольнага камп'ютара</translation> -<translation id="8569404424186215731">з <ph name="DATE" /></translation> <translation id="8570677896027847510">Бяспечна спампаваць файл нельга</translation> <translation id="8571213806525832805">За апошнія 4 тыдні</translation> <translation id="8572344201470131220">Відарыс скапіраваны</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 7c04de4..3607935f 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Към страницата</translation> <translation id="2122601567107267586">Приложението не можа да бъде отворено</translation> <translation id="2126426811489709554">Предоставено от Chrome</translation> -<translation id="2131665479022868825">Спестихте <ph name="DATA" /></translation> <translation id="2132122640199389833">Премахване на всички свързани устройства</translation> <translation id="213279576345780926">Затворихте „<ph name="TAB_TITLE" />“</translation> <translation id="2139186145475833000">Добавяне към началния екран</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Навигиране в Chrome</translation> <translation id="5487521232677179737">Изчиств. на данните</translation> <translation id="549025011754480756">Как да търсите с гласа си</translation> +<translation id="5492637351392383067">Шифроване на устройството</translation> <translation id="5514904542973294328">Деактивирано от администратора на това устройство</translation> <translation id="5515439363601853141">Отключете, за да видите паролата си</translation> <translation id="5517095782334947753">Имате отметки, история, пароли и други настройки от <ph name="FROM_ACCOUNT" /></translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Файлът ще бъде запазен в <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Редактиране<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Превключване към раздел</translation> <translation id="572328651809341494">Скорошни раздели</translation> -<translation id="5723735397759933332">С олекотения режим вече спестявате повече данни, тъй като изображенията на HTTPS страниците се оптимизират.</translation> <translation id="5726692708398506830">Уголемяване на всички елементи на страницата</translation> <translation id="5748802427693696783">Превключихте към стандартните раздели</translation> <translation id="5749068826913805084">Chrome се нуждае от достъп до хранилището, за да изтегля файлове.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Списъкът ви за четене се намира в „Отметки“</translation> <translation id="8562452229998620586">Запазените пароли ще се покажат тук.</translation> <translation id="856481929701340285">Заявка за настолния сайт</translation> -<translation id="8569404424186215731">от <ph name="DATE" /></translation> <translation id="8570677896027847510">Файлът не може да бъде изтеглен по сигурен начин</translation> <translation id="8571213806525832805">Последните 4 седмици</translation> <translation id="8572344201470131220">Изображението е копирано</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 f8ae647..1469276 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">এই পৃষ্ঠাতে যান</translation> <translation id="2122601567107267586">অ্যাপটি খোলা যায়নি</translation> <translation id="2126426811489709554">Chrome দ্বারা চালিত</translation> -<translation id="2131665479022868825"><ph name="DATA" /> সংরক্ষণ করা হয়েছে</translation> <translation id="2132122640199389833">লিঙ্ক করা সমস্ত ডিভাইস সরিয়ে দিন</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> বন্ধ করা হয়েছে</translation> <translation id="2139186145475833000">হোম স্ক্রীনে যোগ করুন</translation> @@ -211,6 +210,7 @@ <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> হিসেবে চালিয়ে যান</translation> <translation id="2230777942707397948">ফাঁকা উইন্ডো</translation> <translation id="2239812875700136898">'Discover-এর বিকল্প' বোতামে ক্লিক করে আপনার ফিডের কন্টেন্ট নিয়ন্ত্রণ করুন</translation> +<translation id="2248941474044011069">Google পাসওয়ার্ড ম্যানেজারে সেভ করার আগে আপনার পাসওয়ার্ড ডিভাইসে এনক্রিপ্ট করা হয়</translation> <translation id="2259659629660284697">পাসওয়ার্ড এক্সপোর্ট করুন...</translation> <translation id="2276696007612801991">আপনার পাসওয়ার্ড চেক করতে Google অ্যাকাউন্টে সাইন-ইন করুন</translation> <translation id="2278052315791335171">এই পাসওয়ার্ডটি মুছে দিলেও, <ph name="SITE" />-এ আপনার অ্যাকাউন্ট মুছে যাবে না</translation> @@ -500,7 +500,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> আপডেট করুন</translation> <translation id="3912508018559818924">ওয়েব থেকে সেরা ফলাফল লোড করা হচ্ছে…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> চালু করা আছে</translation> -<translation id="3925830358619338299">Google পাসওয়ার্ড ম্যানেজারে সেভ করার আগে আপনার পাসওয়ার্ড ডিভাইসে এনক্রিপ্ট করা হয়</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">আমার ডেটা একত্রিত করুন</translation> <translation id="3934366560681368531">“</translation> @@ -663,6 +662,7 @@ <translation id="4837753911714442426">‘পৃষ্ঠা প্রিন্ট করুন’-এর বিকল্পগুলি খুলুন</translation> <translation id="4842092870884894799">পাসওয়ার্ড প্রজন্মের পপআপ দেখানো হচ্ছে</translation> <translation id="4842515939542199281">আপনার ভয়েস ব্যবহার করে সার্চ করার জন্য, মাইক্রোফোনে ট্যাপ করুন</translation> +<translation id="4844633725025837809">অতিরিক্ত নিরাপত্তার জন্য, Google পাসওয়ার্ড ম্যানেজারে সেভ করার আগে আপনার ডিভাইসে পাসওয়ার্ড এনক্রিপ্ট করুন</translation> <translation id="4850886885716139402">দেখুন</translation> <translation id="4860895144060829044">কল করুন</translation> <translation id="4864369630010738180">প্রবেশ করা হচ্ছে...</translation> @@ -810,7 +810,6 @@ <translation id="5697688514913266141">আপনার ফাইল <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> ডিরেক্টরিতে সেভ করা হবে। <ph name="BEGIN_LINK2" />এডিট করুন<ph name="END_LINK2" />।</translation> <translation id="570347048394355941">বদল করে ট্যাবে যান</translation> <translation id="572328651809341494">সাম্প্রতিক ট্যাবগুলি</translation> -<translation id="5723735397759933332">লাইট মোড সেটিংয়ের মাধ্যমে আপনি HTTPS পৃষ্ঠাতে ছবি অপ্টিমাইজ করে এখন আরও ডেটা সেভ করতে পারেন।</translation> <translation id="5726692708398506830">পৃষ্ঠাতে থাকা সবকিছুকে বড় করুন</translation> <translation id="5748802427693696783">স্ট্যান্ডার্ড ট্যাবে পাল্টানো হয়েছে</translation> <translation id="5749068826913805084">ফাইল ডাউনলোড করতে Chrome-এর জন্য স্টোরেজ অ্যাক্সেস প্রয়োজন।</translation> @@ -1325,7 +1324,6 @@ <translation id="8427875596167638501">প্রিভিউ ট্যাব অর্ধেক খোলা আছে</translation> <translation id="8428213095426709021">সেটিংস</translation> <translation id="8430824733382774043">শুধুমাত্র স্ক্রিনশট শেয়ার করুন</translation> -<translation id="8431730749911729314">Google পাসওয়ার্ড ম্যানেজারে সেভ করার আগে আপনার ডিভাইসে পাসওয়ার্ড এনক্রিপ্ট করুন</translation> <translation id="8438566539970814960">সার্চ এবং ব্রাউজিং অভিজ্ঞতা আরও উন্নত করুন</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ভাষা ডাউনলোড করা হয়েছে, <ph name="APP_NAME" /> রিস্টার্ট করুন।</translation> <translation id="8442258441309440798">কোনও খবর উপলভ্য নেই</translation> @@ -1361,7 +1359,6 @@ <translation id="8560602726703398413">Bookmarks থেকে আপনার পড়ার তালিকা খুঁজে নিন</translation> <translation id="8562452229998620586">আপনার সংরক্ষিত পাসওয়ার্ডগুলি এখানে উপস্থিত হবে৷</translation> <translation id="856481929701340285">ডেস্কটপ সাইটের অনুরোধ করুন</translation> -<translation id="8569404424186215731"><ph name="DATE" /> তারিখ থেকে</translation> <translation id="8570677896027847510">ফাইল নিরাপদে ডাউনলোড করা যাচ্ছে না</translation> <translation id="8571213806525832805">গত ৪ সপ্তাহ</translation> <translation id="8572344201470131220">ছবি কপি করা হয়েছে</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 0ede634..58258c4 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Idi na stranicu</translation> <translation id="2122601567107267586">Otvaranje aplikacije nije uspjelo</translation> <translation id="2126426811489709554">Omogućuje Chrome</translation> -<translation id="2131665479022868825">Sačuvano je <ph name="DATA" /></translation> <translation id="2132122640199389833">Ukloni sve povezane uređaje</translation> <translation id="213279576345780926">Zatvorena je kartica <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodaj na početni ekran</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Ažuriraj aplikaciju <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Tražimo najbolje sadržaje na internetu…</translation> <translation id="3924911262913579434">Funkcija <ph name="SAFE_BROWSING_MODE" /> je uključena</translation> -<translation id="3925830358619338299">Lozinke se šifriraju na uređaju prije nego što se pohrane u Googleov Upravitelj lozinki</translation> <translation id="3927692899758076493">Sans-serif</translation> <translation id="3928666092801078803">Kombiniraj moje podatke</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Vaš fajl će se sačuvati u direktorij <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Uredi<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Prebacivanje na karticu</translation> <translation id="572328651809341494">Nedavne kartice</translation> -<translation id="5723735397759933332">Jednostavni način rada će uštedjeti više podataka optimiziranjem slika na HTTPs stranicama.</translation> <translation id="5726692708398506830">Uvećaj prikaz svega na stranici</translation> <translation id="5748802427693696783">Prebačeno na standardne kartice</translation> <translation id="5749068826913805084">Chromeu treba pristup pohrani za preuzimanje fajlova.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Kartica za pregled je napola otvorena</translation> <translation id="8428213095426709021">Postavke</translation> <translation id="8430824733382774043">Dijeli samo snimak ekrana</translation> -<translation id="8431730749911729314">Šifrirajte lozinke na uređaju prije nego što se pohrane u Googleov Upravitelj lozinki</translation> <translation id="8438566539970814960">Poboljšajte pretraživanje i pregledanje</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Jezik je spreman. Ponovo pokrenite aplikaciju <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Nijedna priča nije dostupna</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Pronađite listu za čitanje u oznakama</translation> <translation id="8562452229998620586">Sačuvane lozinke će se pojaviti ovdje.</translation> <translation id="856481929701340285">Traži klasičnu stranicu</translation> -<translation id="8569404424186215731">od <ph name="DATE" /></translation> <translation id="8570677896027847510">Nije moguće sigurno preuzeti fajl</translation> <translation id="8571213806525832805">Posljednje 4 sedmice</translation> <translation id="8572344201470131220">Slika je kopirana</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 991b9f3..0d11a63 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Ves a la pàgina</translation> <translation id="2122601567107267586">L'aplicació no s'ha pogut obrir</translation> <translation id="2126426811489709554">Amb la tecnologia de Chrome</translation> -<translation id="2131665479022868825">Dades estalviades: <ph name="DATA" /></translation> <translation id="2132122640199389833">Suprimeix tots els dispositius enllaçats</translation> <translation id="213279576345780926">Pestanya <ph name="TAB_TITLE" /> tancada</translation> <translation id="2139186145475833000">Afegeix a pantalla d'inici</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Navegar per Chrome</translation> <translation id="5487521232677179737">Esborra les dades</translation> <translation id="549025011754480756">Com es poden fer cerques amb la veu</translation> +<translation id="5492637351392383067">Encriptació al dispositiu</translation> <translation id="5514904542973294328">Opció desactivada per l'administrador d'aquest dispositiu</translation> <translation id="5515439363601853141">Desbloqueja la pantalla per veure la contrasenya</translation> <translation id="5517095782334947753">Tens les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració de l'adreça <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">El fitxer es desarà a <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Edita<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Canvia a la pestanya</translation> <translation id="572328651809341494">Pestanyes recents</translation> -<translation id="5723735397759933332">Ara el mode bàsic et permet estalviar més dades optimitzant imatges de pàgines HTTPS.</translation> <translation id="5726692708398506830">Augmenta la mida de tots els elements de la pàgina</translation> <translation id="5748802427693696783">S'ha canviat a les pestanyes estàndard</translation> <translation id="5749068826913805084">Chrome necessita accedir a l'emmagatzematge per poder baixar fitxers.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Troba la teva llista de lectura a les adreces d'interès</translation> <translation id="8562452229998620586">Les contrasenyes desades apareixeran aquí.</translation> <translation id="856481929701340285">Mostra com a ordinador</translation> -<translation id="8569404424186215731">des del dia <ph name="DATE" /></translation> <translation id="8570677896027847510">El fitxer no es pot baixar de manera segura</translation> <translation id="8571213806525832805">4 darreres setmanes</translation> <translation id="8572344201470131220">S'ha copiat la imatge</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 8ca3433..1997625 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Přejít na stránku</translation> <translation id="2122601567107267586">Aplikaci nelze otevřít</translation> <translation id="2126426811489709554">Používá technologii Chrome</translation> -<translation id="2131665479022868825">Uspořeno: <ph name="DATA" /></translation> <translation id="2132122640199389833">Odstranit všechna propojená zařízení</translation> <translation id="213279576345780926">Karta <ph name="TAB_TITLE" /> byla zavřena.</translation> <translation id="2139186145475833000">Přidat na plochu</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Navigace v Chromu</translation> <translation id="5487521232677179737">Vymazat data</translation> <translation id="549025011754480756">Jak vyhledávat hlasem</translation> +<translation id="5492637351392383067">Šifrování v zařízení</translation> <translation id="5514904542973294328">Zakázáno administrátorem tohoto zařízení</translation> <translation id="5515439363601853141">Chcete-li zobrazit heslo, odemkněte zařízení</translation> <translation id="5517095782334947753">Máte záložky, historii, hesla a další nastavení z účtu <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Soubor bude uložen do složky <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Upravit<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Přepnout na kartu</translation> <translation id="572328651809341494">Nedávno použité karty</translation> -<translation id="5723735397759933332">Zjednodušený režim vám teď ušetří více dat, protože optimalizuje obrázky na stránkách HTTPS.</translation> <translation id="5726692708398506830">Zvětšit veškerý obsah stránky</translation> <translation id="5748802427693696783">Přepnuto na standardní karty</translation> <translation id="5749068826913805084">Aby bylo možné stahovat soubory, Chrome potřebuje přístup k úložišti.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Seznam četby naleznete v záložkách</translation> <translation id="8562452229998620586">Zde se zobrazí uložená hesla.</translation> <translation id="856481929701340285">Verze webu pro PC</translation> -<translation id="8569404424186215731">od <ph name="DATE" /></translation> <translation id="8570677896027847510">Soubor nelze bezpečně stáhnout</translation> <translation id="8571213806525832805">Poslední 4 týdny</translation> <translation id="8572344201470131220">Obrázek byl zkopírován</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 29fa8e0..ab0476cb 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Gå til side</translation> <translation id="2122601567107267586">Appen kunne ikke åbnes</translation> <translation id="2126426811489709554">Leveret af Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> sparet</translation> <translation id="2132122640199389833">Fjern alle tilknyttede enheder</translation> <translation id="213279576345780926">Lukkede <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Føj til startskærm</translation> @@ -741,7 +740,7 @@ <translation id="5271967389191913893">Enheden kan ikke åbne det indhold, der skal downloades.</translation> <translation id="5292796745632149097">Send til</translation> <translation id="5304593522240415983">Dette felt må ikke være tomt</translation> -<translation id="5308380583665731573">Få forbindelse</translation> +<translation id="5308380583665731573">Opret forbindelse</translation> <translation id="5317780077021120954">Gem</translation> <translation id="5319359161174645648">Google anbefaler Chrome</translation> <translation id="5324858694974489420">Indstillinger for børnesikring</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Find rundt i Chrome</translation> <translation id="5487521232677179737">Ryd data</translation> <translation id="549025011754480756">Sådan søger du med stemmen</translation> +<translation id="5492637351392383067">Kryptering på enheden</translation> <translation id="5514904542973294328">Deaktiveret af administratoren af denne enhed</translation> <translation id="5515439363601853141">Lås op for at se din adgangskode</translation> <translation id="5517095782334947753">Du har bogmærker, historik, adgangskoder og andre indstillinger fra <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Din fil gemmes i <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Rediger<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Skift til fanen</translation> <translation id="572328651809341494">Seneste faner</translation> -<translation id="5723735397759933332">Lite-tilstand optimerer nu billeder på HTTPS-sider for at reducere dit dataforbrug.</translation> <translation id="5726692708398506830">Gør alting på siden større</translation> <translation id="5748802427693696783">Skiftet til standardfaner</translation> <translation id="5749068826913805084">Chrome skal have lageradgang for at kunne downloade filer.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Se din læseliste under Bogmærker</translation> <translation id="8562452229998620586">Dine gemte adgangskoder vises her.</translation> <translation id="856481929701340285">Vis computerversion</translation> -<translation id="8569404424186215731">siden den <ph name="DATE" /></translation> <translation id="8570677896027847510">Filen kan ikke downloades sikkert</translation> <translation id="8571213806525832805">Seneste 4 uger</translation> <translation id="8572344201470131220">Billedet blev kopieret</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 f8f3629..ccc68f0 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Seite aufrufen</translation> <translation id="2122601567107267586">App konnte nicht geöffnet werden</translation> <translation id="2126426811489709554">Powered by Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> eingespart</translation> <translation id="2132122640199389833">Alle verknüpften Geräte entfernen</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> geschlossen</translation> <translation id="2139186145475833000">Zum Startbildschirm zufügen</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> aktualisieren</translation> <translation id="3912508018559818924">Das Beste aus dem Web wird gesucht…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ist aktiv</translation> -<translation id="3925830358619338299">Ihre Passwörter werden auf Ihrem Gerät verschlüsselt, bevor sie im Passwortmanager von Google gespeichert werden</translation> <translation id="3927692899758076493">Serifenlose Schrift</translation> <translation id="3928666092801078803">Daten zusammenführen</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Ihre Datei wird in <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> gespeichert. <ph name="BEGIN_LINK2" />Bearbeiten.<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Zum Tab wechseln</translation> <translation id="572328651809341494">Zuletzt geöffnete Tabs</translation> -<translation id="5723735397759933332">Der Lite-Modus spart nun durch die Optimierung von Bildern auf HTTPS-Seiten noch mehr Daten.</translation> <translation id="5726692708398506830">Gesamten Seiteninhalt vergrößern</translation> <translation id="5748802427693696783">Zu Standard-Tabs gewechselt</translation> <translation id="5749068826913805084">Chrome benötigt Speicherzugriff, um Dateien herunterladen zu können.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Vorschau-Tab ist halb geöffnet</translation> <translation id="8428213095426709021">Einstellungen</translation> <translation id="8430824733382774043">Nur Screenshot teilen</translation> -<translation id="8431730749911729314">Lassen Sie Passwörter auf Ihrem Gerät verschlüsseln, bevor sie im Passwortmanager von Google gespeichert werden</translation> <translation id="8438566539970814960">Suchanfragen und das Surfen verbessern</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Sprache bereit, <ph name="APP_NAME" /> neu starten.</translation> <translation id="8442258441309440798">Keine Artikel verfügbar</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">In den Lesezeichen finden Sie Ihre Leseliste</translation> <translation id="8562452229998620586">Gespeicherte Passwörter erscheinen hier.</translation> <translation id="856481929701340285">Desktopversion ansehen</translation> -<translation id="8569404424186215731">seit <ph name="DATE" /></translation> <translation id="8570677896027847510">Datei kann nicht sicher heruntergeladen werden</translation> <translation id="8571213806525832805">Letzte 4 Wochen</translation> <translation id="8572344201470131220">Bild kopiert</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 89c14c8..fca59c2 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Μετάβαση στη σελίδα</translation> <translation id="2122601567107267586">Δεν ήταν δυνατό το άνοιγμα της εφαρμογής</translation> <translation id="2126426811489709554">Με την υποστήριξη του Chrome</translation> -<translation id="2131665479022868825">Αποθηκεύτηκαν <ph name="DATA" /></translation> <translation id="2132122640199389833">Κατάργηση όλων των συνδεδεμένων συσκευών</translation> <translation id="213279576345780926">Η καρτέλα <ph name="TAB_TITLE" /> έκλεισε</translation> <translation id="2139186145475833000">Προσθήκη στην αρχική οθόνη</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Ενημέρωση <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Εύρεση των καλύτερων στον ιστό…</translation> <translation id="3924911262913579434">Η λειτουργία <ph name="SAFE_BROWSING_MODE" /> είναι ενεργή.</translation> -<translation id="3925830358619338299">Οι κωδικοί πρόσβασης κρυπτογραφούνται στη συσκευή σας προτού αποθηκευτούν στον Διαχειριστή κωδικών πρόσβασης Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Συνδυασμός των δεδομένων μου</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Το αρχείο σας θα αποθηκευτεί στον κατάλογο <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Επεξεργασία<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Εναλλαγή σε καρτέλα</translation> <translation id="572328651809341494">Πρόσφατες καρτέλες</translation> -<translation id="5723735397759933332">Η λειτουργία Lite πλέον εξοικονομεί περισσότερα δεδομένα βελτιστοποιώντας εικόνες σε σελίδες HTTPS.</translation> <translation id="5726692708398506830">Μεγέθυνση όλων των στοιχείων της σελίδας</translation> <translation id="5748802427693696783">Έγινε εναλλαγή σε τυπικές καρτέλες</translation> <translation id="5749068826913805084">Το Chrome χρειάζεται πρόσβαση στο χώρο αποθήκευσης για τη λήψη αρχείων.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Η καρτέλα προεπισκόπησης έχει ανοίξει κατά το ήμισυ</translation> <translation id="8428213095426709021">Ρυθμίσεις</translation> <translation id="8430824733382774043">Κοινοποίηση μόνο στιγμιότυπου οθόνης</translation> -<translation id="8431730749911729314">Κρυπτογραφήστε τους κωδικούς πρόσβασης στη συσκευή σας προτού αποθηκευτούν στον Διαχειριστή κωδικών πρόσβασης Google</translation> <translation id="8438566539970814960">Βελτιώστε τις αναζητήσεις και την περιήγηση</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Η γλώσσα είναι έτοιμη. Επανεκκινήστε την εφαρμογή <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Δεν υπάρχουν διαθέσιμες ιστορίες</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Βρείτε τη λίστα ανάγνωσης στους Σελιδοδείκτες.</translation> <translation id="8562452229998620586">Οι αποθηκευμένοι κωδικοί πρόσβασής σας θα εμφανιστούν εδώ.</translation> <translation id="856481929701340285">Αίτηση ιστότοπου για υπολογιστή</translation> -<translation id="8569404424186215731">από <ph name="DATE" /></translation> <translation id="8570677896027847510">Δεν είναι δυνατή η λήψη του αρχείου με ασφάλεια.</translation> <translation id="8571213806525832805">Τελευταίες 4 εβδομάδες</translation> <translation id="8572344201470131220">Η εικόνα αντιγράφηκε.</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 9d39149..db1cf7ba 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Go to page</translation> <translation id="2122601567107267586">Could not open app</translation> <translation id="2126426811489709554">Powered by Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> saved</translation> <translation id="2132122640199389833">Remove all linked devices</translation> <translation id="213279576345780926">Closed <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Add to Home screen</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Update <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Finding the best from the web…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> is on</translation> -<translation id="3925830358619338299">Your passwords are encrypted on your device before they’re saved to Google Password Manager</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Combine my data</translation> <translation id="3934366560681368531">'</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Your file will be saved to <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Edit<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Switch to tab</translation> <translation id="572328651809341494">Recent tabs</translation> -<translation id="5723735397759933332">Lite mode now saves you more data by optimising images on HTTPS pages.</translation> <translation id="5726692708398506830">Make everything on the page bigger</translation> <translation id="5748802427693696783">Switched to standard tabs</translation> <translation id="5749068826913805084">Chrome needs storage access to download files.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Preview tab is half-opened</translation> <translation id="8428213095426709021">Settings</translation> <translation id="8430824733382774043">Share screenshot only</translation> -<translation id="8431730749911729314">Encrypt passwords on your device before they‘re saved to Google Password Manager</translation> <translation id="8438566539970814960">Make searches and browsing better</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Language ready, restart <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">No stories available</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Find your reading list in Bookmarks</translation> <translation id="8562452229998620586">Your saved passwords will appear here.</translation> <translation id="856481929701340285">Request desktop site</translation> -<translation id="8569404424186215731">since <ph name="DATE" /></translation> <translation id="8570677896027847510">File can’t be downloaded securely</translation> <translation id="8571213806525832805">Last 4 weeks</translation> <translation id="8572344201470131220">Image copied</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 387e4e71..5729577 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Ir a la página</translation> <translation id="2122601567107267586">No se pudo abrir la app</translation> <translation id="2126426811489709554">Con tecnología de Chrome</translation> -<translation id="2131665479022868825">Datos ahorrados: <ph name="DATA" /></translation> <translation id="2132122640199389833">Quitar todos los dispositivos vinculados</translation> <translation id="213279576345780926">Pestaña <ph name="TAB_TITLE" /> cerrada</translation> <translation id="2139186145475833000">Agregar a la pantalla principal</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Navigate Chrome</translation> <translation id="5487521232677179737">Borrar datos</translation> <translation id="549025011754480756">Cómo hacer búsquedas con la voz</translation> +<translation id="5492637351392383067">Encriptación integrada en el dispositivo</translation> <translation id="5514904542973294328">El administrador de este dispositivo inhabilitó esta opción</translation> <translation id="5515439363601853141">Desbloquea la pantalla para ver tu contraseña</translation> <translation id="5517095782334947753">Tienes favoritos, historial, contraseñas y otras opciones de configuración de <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Se guardará tu archivo en <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Editar<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Cambiar a la pestaña</translation> <translation id="572328651809341494">Pestañas recientes</translation> -<translation id="5723735397759933332">El modo lite ahora ahorra más datos gracias a que optimiza las imágenes de las páginas HTTPS.</translation> <translation id="5726692708398506830">Agrandar todos los elementos de la página</translation> <translation id="5748802427693696783">Se seleccionaron las pestañas estándar</translation> <translation id="5749068826913805084">Chrome necesita acceder al almacenamiento para descargar archivos.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Encuentra tu lista de lectura en favoritos.</translation> <translation id="8562452229998620586">Las contraseñas guardadas aparecerán aquí.</translation> <translation id="856481929701340285">Solicitar versión de escritorio</translation> -<translation id="8569404424186215731">desde el <ph name="DATE" /></translation> <translation id="8570677896027847510">No es posible descargar el archivo de forma segura</translation> <translation id="8571213806525832805">Últimas cuatro semanas</translation> <translation id="8572344201470131220">Se copió la imagen</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 e2de1ca..69e22e19 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Ir a la página</translation> <translation id="2122601567107267586">No se ha podido abrir la aplicación</translation> <translation id="2126426811489709554">Con la tecnología de Chrome</translation> -<translation id="2131665479022868825">Datos ahorrados: <ph name="DATA" /></translation> <translation id="2132122640199389833">Quitar todos los dispositivos vinculados</translation> <translation id="213279576345780926">Se ha cerrado <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Añadir a pantalla de inicio</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Desplazarte por Chrome</translation> <translation id="5487521232677179737">Borrar datos</translation> <translation id="549025011754480756">Cómo hacer búsquedas con la voz</translation> +<translation id="5492637351392383067">Cifrado en el dispositivo</translation> <translation id="5514904542973294328">Inhabilitada por el administrador de este dispositivo</translation> <translation id="5515439363601853141">Desbloquea la pantalla para ver tu contraseña</translation> <translation id="5517095782334947753">Tienes marcadores, historial, contraseñas y otros ajustes de <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">El archivo se guardará en <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Editar<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Cambiar a la pestaña</translation> <translation id="572328651809341494">Pestañas recientes</translation> -<translation id="5723735397759933332">Ahora, el modo básico gasta menos datos gracias a la optimización de las imágenes de páginas HTTPS.</translation> <translation id="5726692708398506830">Amplía todo el contenido de la página</translation> <translation id="5748802427693696783">Se ha cambiado a las pestañas estándares</translation> <translation id="5749068826913805084">Chrome necesita acceso de almacenamiento para descargar archivos.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Consulta tu lista de lectura en Marcadores</translation> <translation id="8562452229998620586">Las contraseñas guardadas aparecerán aquí.</translation> <translation id="856481929701340285">Ver como ordenador</translation> -<translation id="8569404424186215731">desde el <ph name="DATE" /></translation> <translation id="8570677896027847510">El archivo no se puede descargar de forma segura</translation> <translation id="8571213806525832805">Últimas 4 semanas</translation> <translation id="8572344201470131220">Imagen copiada</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 64e9ab26..cbef722c 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Minge lehele</translation> <translation id="2122601567107267586">Rakendust ei õnnestunud avada</translation> <translation id="2126426811489709554">Chrome'i toega</translation> -<translation id="2131665479022868825"><ph name="DATA" /> säästetud</translation> <translation id="2132122640199389833">Eemalda kõik lingitud seadmed</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> suleti</translation> <translation id="2139186145475833000">Avaekraanile lisamine</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Chrome'is navigeerimine</translation> <translation id="5487521232677179737">Kustuta andmed</translation> <translation id="549025011754480756">Kuidas hääle abil otsida?</translation> +<translation id="5492637351392383067">Krüpteerimine seadmes</translation> <translation id="5514904542973294328">Keelas selle seadme administraator</translation> <translation id="5515439363601853141">Avage oma parooli vaatamiseks</translation> <translation id="5517095782334947753">Teil on järjehoidjad, ajalugu, paroolid ja muud seaded kontolt <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Teie fail salvestatakse kausta <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Muutke<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Lülitu vahelehele</translation> <translation id="572328651809341494">Hiljutised vahelehed</translation> -<translation id="5723735397759933332">Lihtsustatud režiim säästab nüüd rohkem andmemahtu, optimeerides HTTPS-lehtedel kujutisi.</translation> <translation id="5726692708398506830">Lehel kuvatud sisu suurendamine</translation> <translation id="5748802427693696783">Tavapärased vahelehed on aktiveeritud</translation> <translation id="5749068826913805084">Chrome vajab failide allalaadimiseks juurdepääsu salvestusruumile.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Lugemisloendi leiate järjehoidjatest</translation> <translation id="8562452229998620586">Salvestatud paroolid ilmuvad siin.</translation> <translation id="856481929701340285">Saidi arvutiversiooni taotlemine</translation> -<translation id="8569404424186215731">alates kuupäevast <ph name="DATE" /></translation> <translation id="8570677896027847510">Faili ei saa turvaliselt alla laadida</translation> <translation id="8571213806525832805">Viimased 4 nädalat</translation> <translation id="8572344201470131220">Pilt on kopeeritud</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 fa6d679..e48d40f 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Joan orrira</translation> <translation id="2122601567107267586">Ezin izan da ireki aplikazioa</translation> <translation id="2126426811489709554">Arakatzailea: Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> aurreztu dira</translation> <translation id="2132122640199389833">Kendu lotutako gailu guztiak</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> itxi da</translation> <translation id="2139186145475833000">Gehitu hasierako pantailan</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Eguneratu <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Sareko gauzarik onenak bilatzen…</translation> <translation id="3924911262913579434">"<ph name="SAFE_BROWSING_MODE" />" aktibatuta dago</translation> -<translation id="3925830358619338299">Pasahitzak gailuan bertan enkriptatzen dira Google-ren Pasahitz-kudeatzailea atalean gorde aurretik</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Bateratu nire datuak</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Zure fitxategia <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> direktorioan gordeko da. <ph name="BEGIN_LINK2" />Editatu<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Aldatu fitxara</translation> <translation id="572328651809341494">Azken fitxak</translation> -<translation id="5723735397759933332">Oinarrizko moduari esker, datu gehiago aurreztuko dituzu HTTPS orrietan irudiak optimizatuta.</translation> <translation id="5726692708398506830">Handitu orriko eduki guztia</translation> <translation id="5748802427693696783">Fitxa arruntetara aldatu da</translation> <translation id="5749068826913805084">Chrome-k memorian sartzeko baimena behar du fitxategiak deskargatu ahal izateko.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Aurrebista-fitxa erdi irekita dago</translation> <translation id="8428213095426709021">Ezarpenak</translation> <translation id="8430824733382774043">Partekatu pantaila-argazkia soilik</translation> -<translation id="8431730749911729314">Enkriptatu pasahitzak gailuan Google-ren Pasahitz-kudeatzailea atalean gorde aurretik</translation> <translation id="8438566539970814960">Hobetu bilaketak eta arakatze-jarduerak</translation> <translation id="8439974325294139057"><ph name="LANG" />: hizkuntza-paketea prest dago; berrabiarazi <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Ez dago istorio berririk</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Aurkitu irakurketa-zerrenda laster-marketan</translation> <translation id="8562452229998620586">Gordetako pasahitzak hemen agertuko dira.</translation> <translation id="856481929701340285">Eskatu ordenagailuetarako gunea</translation> -<translation id="8569404424186215731"><ph name="DATE" /> ezkero</translation> <translation id="8570677896027847510">Ezin da segurtasunez deskargatu fitxategia</translation> <translation id="8571213806525832805">Azken lau asteetakoak</translation> <translation id="8572344201470131220">Kopiatu da irudia</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 3c32b0887..5a672fd 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">رفتن به صفحه</translation> <translation id="2122601567107267586">باز کردن برنامه امکانپذیر نیست</translation> <translation id="2126426811489709554">ارائه توسط Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> صرفهجویی شد</translation> <translation id="2132122640199389833">برداشتن همه دستگاههای پیوندشده</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> بسته شد</translation> <translation id="2139186145475833000">افزودن به صفحه اصلی</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">بهروزرسانی <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">درحال پیدا کردن بهترین مورد از وب…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> روشن است</translation> -<translation id="3925830358619338299">گذرواژههایتان قبلاز ذخیره شدن در «مدیر گذرواژه Google» در دستگاهتان رمزگذاری میشوند</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">ادغام کردن دادههای من</translation> <translation id="3934366560681368531">«</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">فایلتان در <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> ذخیره خواهد شد. <ph name="BEGIN_LINK2" />ویرایش<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">رفتن به برگه</translation> <translation id="572328651809341494">برگههای اخیر</translation> -<translation id="5723735397759933332">اکنون «حالت ساده» با بهینهسازی تصاویر در صفحههای HTTPS باعث صرفهجویی بیشتر در مصرف داده میشود.</translation> <translation id="5726692708398506830">بزرگتر کردن همهچیز در صفحه</translation> <translation id="5748802427693696783">به برگههای استاندارد تغییر یافت</translation> <translation id="5749068826913805084">Chrome برای بارگیری فایلها باید به حافظه دسترسی داشته باشد.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">برگه پیشنمایش نیمهباز است</translation> <translation id="8428213095426709021">تنظیمات</translation> <translation id="8430824733382774043">فقط همرسانی نماگرفت</translation> -<translation id="8431730749911729314">گذرواژهها را قبلاز ذخیره شدن در «مدیر گذرواژه Google» در دستگاهتان رمزگذاری میکند</translation> <translation id="8438566539970814960">بهبود جستجوها و مرور</translation> <translation id="8439974325294139057"><ph name="LANG" /> - زبان آماده است، <ph name="APP_NAME" /> را بازراهاندازی کنید.</translation> <translation id="8442258441309440798">هیچ داستانی دردسترس نیست</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">فهرست خواندن را در Bookmarks پیدا کنید</translation> <translation id="8562452229998620586">گذرواژههای ذخیره شده در اینجا ظاهر میشود.</translation> <translation id="856481929701340285">درخواست نمای رایانه</translation> -<translation id="8569404424186215731">از <ph name="DATE" /></translation> <translation id="8570677896027847510">نمیتوان این فایل را بهطور ایمن بارگیری کرد</translation> <translation id="8571213806525832805">۴ هفته گذشته</translation> <translation id="8572344201470131220">تصویر کپی شد</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 c80cd62a..8c65f96 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Siirry sivulle</translation> <translation id="2122601567107267586">Sovelluksen avaaminen epäonnistui</translation> <translation id="2126426811489709554">Palvelun tarjoaa Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> tallennettu</translation> <translation id="2132122640199389833">Poista kaikki linkitetyt laitteet</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> suljettiin</translation> <translation id="2139186145475833000">Lisää aloitusnäyttöön</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Päivitä <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Haetaan verkon parasta sisältöä…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> on päällä</translation> -<translation id="3925830358619338299">Salasanat salataan laitteella ennen niiden tallentamista Googlen Salasanojen ylläpitoon.</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Yhdistä tiedot</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Tiedostosi tallennetaan tänne: <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Muuta<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Vaihda välilehdelle</translation> <translation id="572328651809341494">Hiljattain suljetut välilehdet</translation> -<translation id="5723735397759933332">Yksinkertaistettu tila vähentää datankäyttöä optimoimalla kuvat HTTPS-sivuilla.</translation> <translation id="5726692708398506830">Suurenna sivun kaikki sisältö</translation> <translation id="5748802427693696783">Vaihdettiin näkyviin tavalliset välilehdet.</translation> <translation id="5749068826913805084">Chrome tarvitsee tallennustilan käyttöoikeuden tiedostojen lataamiseen.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Esikatseluvälilehti on puoliksi auki</translation> <translation id="8428213095426709021">Asetukset</translation> <translation id="8430824733382774043">Jaa vain kuvakaappaus</translation> -<translation id="8431730749911729314">Salaa salasanat laitteella ennen niiden tallentamista Googlen Salasanojen ylläpitoon</translation> <translation id="8438566539970814960">Paranna hakuja ja selausta</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Kieli valmis, käynnistä <ph name="APP_NAME" /> uudelleen.</translation> <translation id="8442258441309440798">Ei tarinoita saatavilla</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Etsi lukulistasi kirjanmerkeistä</translation> <translation id="8562452229998620586">Tässä näytetään tallennetut salasanasi.</translation> <translation id="856481929701340285">Käytä tietokoneversiota</translation> -<translation id="8569404424186215731"><ph name="DATE" /> alkaen</translation> <translation id="8570677896027847510">Tiedostoa ei voi ladata turvallisesti</translation> <translation id="8571213806525832805">Viimeiset neljä viikkoa</translation> <translation id="8572344201470131220">Kuva kopioitu</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 6e544e4..fd73ca3d 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Pumunta sa page</translation> <translation id="2122601567107267586">Hindi mabuksan ang app</translation> <translation id="2126426811489709554">Pinapagana ng Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ang natipid</translation> <translation id="2132122640199389833">Alisin ang lahat ng naka-link na device</translation> <translation id="213279576345780926">Isinarang <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Idagdag sa Home screen</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">I-update ang <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Hinahanap ang pinakamahusay mula sa web…</translation> <translation id="3924911262913579434">Naka-on ang <ph name="SAFE_BROWSING_MODE" /></translation> -<translation id="3925830358619338299">Ine-encrypt ang iyong mga password sa device mo bago i-save ang mga ito sa Google Password Manager</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Pagsamahin ang aking data</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Mase-save ang iyong file sa <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />I-edit<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Lumipat Sa Tab</translation> <translation id="572328651809341494">Mga kamakailang tab</translation> -<translation id="5723735397759933332">Makakatipid ka na ngayon ng higit pang data sa Lite mode sa pamamagitan ng pag-optimize ng mga larawan sa mga HTTPS page.</translation> <translation id="5726692708398506830">Palakihin ang lahat ng nasa page</translation> <translation id="5748802427693696783">Lumipat sa mga karaniwang tab</translation> <translation id="5749068826913805084">Kailangan ng Chrome ng access sa storage para mag-download ng mga file.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Nakabukas nang kalahati ang tab na preview</translation> <translation id="8428213095426709021">Mga Setting</translation> <translation id="8430824733382774043">Ibahagi lang ang screenshot</translation> -<translation id="8431730749911729314">I-encrypt ang mga password sa iyong device bago i-save ang mga ito sa Google Password Manager</translation> <translation id="8438566539970814960">Mas pahusayin ang mga paghahanap at pag-browse</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Handa na ang wika, i-restart ang <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Walang available na kuwento</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Makita ang iyong listahan ng babasahin sa Mga Bookmark</translation> <translation id="8562452229998620586">Lalabas dito ang mga naka-save na password.</translation> <translation id="856481929701340285">Hilingin ang desktop site</translation> -<translation id="8569404424186215731">simula noong <ph name="DATE" /></translation> <translation id="8570677896027847510">Hindi secure na mada-download ang mga file</translation> <translation id="8571213806525832805">Huling 4 na linggo</translation> <translation id="8572344201470131220">Nakopya ang Larawan</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 bcc2946..d1f2af8b 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Accéder à la page</translation> <translation id="2122601567107267586">Impossible d'ouvrir l'application</translation> <translation id="2126426811489709554">Optimisé par Chrome</translation> -<translation id="2131665479022868825">Données enregistrées : <ph name="DATA" /></translation> <translation id="2132122640199389833">Retirer tous les appareils associés</translation> <translation id="213279576345780926">Onglet <ph name="TAB_TITLE" /> fermé</translation> <translation id="2139186145475833000">Ajouter à l'écran d'accueil</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Naviguer dans Chrome</translation> <translation id="5487521232677179737">Effacer les données</translation> <translation id="549025011754480756">Comment effectuer une recherche avec votre voix</translation> +<translation id="5492637351392383067">Chiffrement sur l'appareil</translation> <translation id="5514904542973294328">Option désactivée par l'administrateur de cet appareil</translation> <translation id="5515439363601853141">Déverrouillez pour afficher votre mot de passe</translation> <translation id="5517095782334947753">Vous avez les favoris, l'historique, les mots de passe et d'autres paramètres de <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Votre fichier sera enregistré dans <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Modifier<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Passer à l'onglet</translation> <translation id="572328651809341494">Onglets récents</translation> -<translation id="5723735397759933332">Le mode simplifié vous permet d'économiser davantage de données en optimisant les images sur les pages HTTPS.</translation> <translation id="5726692708398506830">Agrandir la taille de tout le contenu de la page</translation> <translation id="5748802427693696783">Passage aux onglets standards</translation> <translation id="5749068826913805084">Chrome a besoin d'accéder au stockage pour télécharger des fichiers.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Retrouvez votre liste de lecture dans les favoris</translation> <translation id="8562452229998620586">Les mots de passe enregistrés s'affichent ici.</translation> <translation id="856481929701340285">Voir version ordinateur</translation> -<translation id="8569404424186215731">depuis le <ph name="DATE" /></translation> <translation id="8570677896027847510">Impossible de télécharger le fichier en toute sécurité</translation> <translation id="8571213806525832805">Quatre dernières semaines</translation> <translation id="8572344201470131220">Image copiée</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 98e73453..62c6224 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Accéder à la page</translation> <translation id="2122601567107267586">Impossible d'ouvrir l'application</translation> <translation id="2126426811489709554">Proposé par Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> économisés</translation> <translation id="2132122640199389833">Supprimer tous les appareils associés</translation> <translation id="213279576345780926">L'onglet "<ph name="TAB_TITLE" />" a été fermé.</translation> <translation id="2139186145475833000">Ajouter à l'écran d'accueil</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Mettre à jour <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Recherche du meilleur contenu sur le Web…</translation> <translation id="3924911262913579434">Mode <ph name="SAFE_BROWSING_MODE" /> activé</translation> -<translation id="3925830358619338299">Vos mots de passe sont chiffrés sur votre appareil avant d'être enregistrés dans le Gestionnaire de mots de passe Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Combiner mes données</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Votre fichier va être enregistré dans le dossier <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Modifier<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Ouvrir un autre onglet</translation> <translation id="572328651809341494">Onglets récents</translation> -<translation id="5723735397759933332">Le mode simplifié consomme maintenant moins de données en optimisant les images sur les pages HTTPS.</translation> <translation id="5726692708398506830">Agrandir tous les éléments de la page</translation> <translation id="5748802427693696783">Onglets standards sélectionnés</translation> <translation id="5749068826913805084">Pour télécharger des fichiers, Chrome a besoin d'accéder à l'espace de stockage.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">L'onglet "Aperçu" est ouvert à moitié</translation> <translation id="8428213095426709021">Paramètres</translation> <translation id="8430824733382774043">Partager uniquement la capture d'écran</translation> -<translation id="8431730749911729314">Chiffrez les mots de passe sur votre appareil avant qu'ils soient enregistrés dans le Gestionnaire de mots de passe Google</translation> <translation id="8438566539970814960">Améliorer les recherches et la navigation</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Langue prête. Redémarrez <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Aucun événement disponible</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Retrouvez votre liste de lecture dans les favoris</translation> <translation id="8562452229998620586">Les mots de passe enregistrés s'affichent ici.</translation> <translation id="856481929701340285">Voir version ordinateur</translation> -<translation id="8569404424186215731">depuis le <ph name="DATE" /></translation> <translation id="8570677896027847510">Impossible de télécharger le fichier de façon sécurisée</translation> <translation id="8571213806525832805">4 dernières semaines</translation> <translation id="8572344201470131220">Image copiée</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 5065c80d..c020674b 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Ir á páxina</translation> <translation id="2122601567107267586">Non se puido abrir a aplicación</translation> <translation id="2126426811489709554">Con tecnoloxía de Chrome</translation> -<translation id="2131665479022868825">Datos gardados: <ph name="DATA" /></translation> <translation id="2132122640199389833">Quitar todos os dispositivos vinculados</translation> <translation id="213279576345780926">Pechouse <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Engadir á pantalla inicio</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Navega por Chrome</translation> <translation id="5487521232677179737">Borrar datos</translation> <translation id="549025011754480756">Como facer buscas por voz?</translation> +<translation id="5492637351392383067">Encriptación no dispositivo</translation> <translation id="5514904542973294328">Desactivado polo administrador deste dispositivo</translation> <translation id="5515439363601853141">Desbloquea a pantalla para ver o teu contrasinal</translation> <translation id="5517095782334947753">Tes os marcadores, o historial, os contrasinais e outras opcións de configuración de <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">O teu ficheiro gardarase en <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Editar<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Cambiar á pestana</translation> <translation id="572328651809341494">Pestanas recentes</translation> -<translation id="5723735397759933332">Agora o modo básico permite aforrar máis datos optimizando as imaxes das páxinas HTTPS.</translation> <translation id="5726692708398506830">Facer máis grande todo o contido da páxina</translation> <translation id="5748802427693696783">Cambiouse ás pestanas estándar</translation> <translation id="5749068826913805084">Chrome precisa acceder ao almacenamento para descargar ficheiros.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Para acceder á lista de lectura, vai a Marcadores</translation> <translation id="8562452229998620586">Os contrasinais gardados aparecerán aquí.</translation> <translation id="856481929701340285">Ver como ordenador</translation> -<translation id="8569404424186215731">desde o <ph name="DATE" /></translation> <translation id="8570677896027847510">Non se pode descargar o ficheiro de forma segura</translation> <translation id="8571213806525832805">Últimas 4 semanas</translation> <translation id="8572344201470131220">Copiouse a imaxe</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 eb7474b68..61ba3ef 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">પેજ પર જાઓ</translation> <translation id="2122601567107267586">ઍપ ખોલી ન શક્યાં</translation> <translation id="2126426811489709554">Chrome દ્વારા સંચાલિત</translation> -<translation id="2131665479022868825"><ph name="DATA" /> સાચવ્યો</translation> <translation id="2132122640199389833">લિંક કરેલા બધા ડિવાઇસ કાઢી નાખો</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> બંધ કર્યું છે</translation> <translation id="2139186145475833000">હોમસ્ક્રીન પર ઉમેરો</translation> @@ -211,6 +210,7 @@ <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> તરીકે ચાલુ રાખો</translation> <translation id="2230777942707397948">ખાલી વિન્ડો</translation> <translation id="2239812875700136898">Discover બટન માટે વિકલ્પોમાંથી તમારી સ્ટોરીનું નિયંત્રણ કરો</translation> +<translation id="2248941474044011069">તમારા પાસવર્ડ Google પાસવર્ડ મેનેજર પર સાચવવામાં આવે તે પહેલાં તેમને તમારા ડિવાઇસ પર એન્ક્રિપ્ટ કરવામાં આવે છે</translation> <translation id="2259659629660284697">બધા પાસવર્ડની નિકાસ કરો…</translation> <translation id="2276696007612801991">તમારા પાસવર્ડ ચેક કરવા માટે તમારા Google એકાઉન્ટમાં સાઇન ઇન કરો</translation> <translation id="2278052315791335171">આ પાસવર્ડ ડિલીટ કરવાથી <ph name="SITE" /> પરનું તમારું એકાઉન્ટ ડિલીટ થશે નહીં</translation> @@ -500,7 +500,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> અપડેટ કરો</translation> <translation id="3912508018559818924">વેબમાંથી શ્રેષ્ઠ શોધવું…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ચાલુ છે</translation> -<translation id="3925830358619338299">તમારા પાસવર્ડને Google પાસવર્ડ મેનેજર પર સાચવવામાં આવે તે પહેલાં તેમને તમારા ડિવાઇસ પર એન્ક્રિપ્ટ કરવામાં આવે છે</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">મારા ડેટાને સંયોજિત કરો</translation> <translation id="3934366560681368531">“</translation> @@ -661,6 +660,7 @@ <translation id="4837753911714442426">પેજને પ્રિન્ટ કરવાના વિકલ્પો ખોલો</translation> <translation id="4842092870884894799">પાસવર્ડ જનરેશન પોપઅપ દર્શાવે છે</translation> <translation id="4842515939542199281">તમારા વૉઇસ વડે શોધવા માટે, માઇક્રોફોન પર ટૅપ કરો</translation> +<translation id="4844633725025837809">વધારાની સલામતી માટે, તમારા પાસવર્ડ Google પાસવર્ડ મેનેજરમાં સાચવવામાં આવે એ પહેલાં તેમને તમારા ડિવાઇસમાં એન્ક્રિપ્ટ કરો</translation> <translation id="4850886885716139402">જુઓ</translation> <translation id="4860895144060829044">કૉલ કરો</translation> <translation id="4864369630010738180">સાઇન ઇન થઈ રહ્યું છે...</translation> @@ -808,7 +808,6 @@ <translation id="5697688514913266141">તમારી ફાઇલ <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />માં સચવાશે. <ph name="BEGIN_LINK2" />ફેરફાર કરો<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">ટૅબ પર સ્વિચ કરો</translation> <translation id="572328651809341494">તાજેતરના ટેબ્સ</translation> -<translation id="5723735397759933332">હવે લાઇટ મોડ HTTPS પેજ પર છબીઓને ઑપ્ટિમાઇઝ કરવાથી, તમારો વધુ ડેટા બચે છે.</translation> <translation id="5726692708398506830">પેજ પરની તમામ કન્ટેન્ટને મોટી કરો</translation> <translation id="5748802427693696783">માનક ટૅબ્સ પર સ્વિચ કરેલ છે</translation> <translation id="5749068826913805084">ફાઇલો ડાઉનલોડ કરવા માટે Chromeને સ્ટોરેજ ઍક્સેસની જરૂર છે.</translation> @@ -1323,7 +1322,6 @@ <translation id="8427875596167638501">પ્રીવ્યૂ ટૅબ અડધી ઊંચાઈએ ખુલી</translation> <translation id="8428213095426709021">સેટિંગ</translation> <translation id="8430824733382774043">માત્ર સ્ક્રીનશૉટ શેર કરો</translation> -<translation id="8431730749911729314">તમારા પાસવર્ડને Google પાસવર્ડ મેનેજર પર સાચવવામાં આવે તે પહેલાં તેમને તમારા ડિવાઇસ પર એન્ક્રિપ્ટ કરો</translation> <translation id="8438566539970814960">શોધ અને બ્રાઉઝિંગ વધુ સારું બનાવો</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ભાષા તૈયાર છે, <ph name="APP_NAME" /> ફરી શરૂ કરો.</translation> <translation id="8442258441309440798">કોઈ સ્ટોરી ઉપલબ્ધ નથી</translation> @@ -1359,7 +1357,6 @@ <translation id="8560602726703398413">Bookmarksમાં તમારી વાંચન સૂચિ શોધો</translation> <translation id="8562452229998620586">તમારા સાચવેલા પાસવર્ડ્સ અહીં દેખાશે.</translation> <translation id="856481929701340285">ડેસ્કટૉપ સાઇટની વિનંતી કરો</translation> -<translation id="8569404424186215731"><ph name="DATE" /> થી</translation> <translation id="8570677896027847510">ફાઇલ સુરક્ષિત રીતે ડાઉનલોડ કરી શકાતી નથી</translation> <translation id="8571213806525832805">છેલ્લા 4 અઠવાડિયા</translation> <translation id="8572344201470131220">છબી કૉપિ કરી</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 6ec2ed8..626dbdf 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">पेज पर जाएं</translation> <translation id="2122601567107267586">ऐप्लिकेशन नहीं खोला जा सका</translation> <translation id="2126426811489709554">Chrome के द्वारा संचालित</translation> -<translation id="2131665479022868825"><ph name="DATA" /> बचाया गया</translation> <translation id="2132122640199389833">लिंक किए गए सभी डिवाइस हटाएं</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> बंद है</translation> <translation id="2139186145475833000">होम स्क्रीन में जोड़ें</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> को अपडेट करें</translation> <translation id="3912508018559818924">वेब की सबसे अच्छी जानकारी ढूंढी जा रही है…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> चालू है</translation> -<translation id="3925830358619338299">Google पासवर्ड मैनेजर में सेव होने से पहले, पासवर्ड आपके डिवाइस पर एन्क्रिप्ट (सुरक्षित) कर लिए जाते हैं</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">मेरा डेटा संयोजित करें</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">आपकी फ़ाइल <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> में सेव की जाएगी. <ph name="BEGIN_LINK2" />बदलाव करें<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">टैब पर स्विच करें</translation> <translation id="572328651809341494">हाल ही के टैब</translation> -<translation id="5723735397759933332">लाइट मोड अब एचटीटीपीएस पेजों पर इमेज ऑप्टिमाइज़ करके, आपके लिए और डेटा बचा सकता है.</translation> <translation id="5726692708398506830">पेज पर सब कुछ बड़ा करें</translation> <translation id="5748802427693696783">मानक टैब पर स्विच कर दिया गया</translation> <translation id="5749068826913805084">फ़ाइलें डाउनलोड करने के लिए Chrome को मेमोरी के ऐक्सेस की ज़रूरत होगी.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">'झलक' टैब आधी स्क्रीन में खुला हुआ है</translation> <translation id="8428213095426709021">सेटिंग</translation> <translation id="8430824733382774043">सिर्फ़ स्क्रीनशॉट शेयर करें</translation> -<translation id="8431730749911729314">Google पासवर्ड मैनेजर में सेव होने से पहले, पासवर्ड अपने डिवाइस पर एन्क्रिप्ट (सुरक्षित) करें</translation> <translation id="8438566539970814960">खोजों और ब्राउज़िंग को बेहतर बनाएं</translation> <translation id="8439974325294139057"><ph name="LANG" /> - भाषा इस्तेमाल के लिए तैयार है. <ph name="APP_NAME" /> को रीस्टार्ट करें.</translation> <translation id="8442258441309440798">कोई भी कहानी उपलब्ध नहीं है</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Bookmarks में अपनी पढ़ने की चीज़ों की सूची खोजें</translation> <translation id="8562452229998620586">सहेजे गए पासवर्ड यहां दिखाई देंगे.</translation> <translation id="856481929701340285">डेस्कटॉप साइट का अनुरोध करें</translation> -<translation id="8569404424186215731"><ph name="DATE" /> से</translation> <translation id="8570677896027847510">फ़ाइल सुरक्षित तरीके से डाउनलोड नहीं की जा सकी</translation> <translation id="8571213806525832805">पिछले चार हफ़्ते</translation> <translation id="8572344201470131220">इमेज कॉपी की गई</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 bb243f1..f42c879c 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Idi na stranicu</translation> <translation id="2122601567107267586">Otvaranje aplikacije nije uspjelo</translation> <translation id="2126426811489709554">Omogućuje Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> spremljeno</translation> <translation id="2132122640199389833">Ukloni sve povezane uređaje</translation> <translation id="213279576345780926">Zatvorena je kartica <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodaj na početni zaslon</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Ažurirajte <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Pronalazimo ono najbolje s weba…</translation> <translation id="3924911262913579434">Uključen je način <ph name="SAFE_BROWSING_MODE" /></translation> -<translation id="3925830358619338299">Vaše se zaporke šifriraju na uređaju prije spremanja na Google upravitelj zaporki</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Kombiniranje podataka</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Datoteka će se spremiti u direktorij <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Uredite<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Prelazak na karticu</translation> <translation id="572328651809341494">Nedavne kartice</translation> -<translation id="5723735397759933332">Jednostavni način sad vam štedi više podataka optimiziranjem slika na HTTPS stranicama.</translation> <translation id="5726692708398506830">Povećavanje svega na stranici</translation> <translation id="5748802427693696783">Prešli ste na standardne kartice</translation> <translation id="5749068826913805084">Chrome treba pristup pohrani radi preuzimanja datoteka.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Kartica pregleda je poluotvorena</translation> <translation id="8428213095426709021">Postavke</translation> <translation id="8430824733382774043">Podijeli samo snimku zaslona</translation> -<translation id="8431730749911729314">Šifrirajte zaporke na uređaju prije spremanja na Google upravitelj zaporki</translation> <translation id="8438566539970814960">Poboljšajte pretraživanje i pregledavanje</translation> <translation id="8439974325294139057"><ph name="LANG" /> – jezik je spreman, ponovo pokrenite aplikaciju <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Nije dostupna nijedna priča</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Pronađite svoj popis za čitanje u Google oznakama</translation> <translation id="8562452229998620586">Ovdje će se pojaviti spremljene zaporke.</translation> <translation id="856481929701340285">Traži klasičnu stranicu</translation> -<translation id="8569404424186215731">od <ph name="DATE" /></translation> <translation id="8570677896027847510">Datoteka se ne može sigurno preuzeti</translation> <translation id="8571213806525832805">Protekla 4 tjedna</translation> <translation id="8572344201470131220">Slika je kopirana</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 35a8304..7b3caec2d 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Ugrás az oldalhoz</translation> <translation id="2122601567107267586">Nem sikerült megnyitni az alkalmazást</translation> <translation id="2126426811489709554">A Chrome erejével</translation> -<translation id="2131665479022868825"><ph name="DATA" /> megtakarítva</translation> <translation id="2132122640199389833">Az összes összekapcsolt eszköz eltávolítása</translation> <translation id="213279576345780926">Bezárva: <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Kezdőképernyőre</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Navigáció a Chrome-ban</translation> <translation id="5487521232677179737">Adatok törlése</translation> <translation id="549025011754480756">A hangalapú keresés használata</translation> +<translation id="5492637351392383067">Eszközalapú titkosítás</translation> <translation id="5514904542973294328">Letiltotta az eszköz rendszergazdája</translation> <translation id="5515439363601853141">Oldja fel a képernyőzárat a jelszó megtekintéséhez</translation> <translation id="5517095782334947753">Vannak könyvjelzői, előzményei, jelszavai és más beállításai a(z) <ph name="FROM_ACCOUNT" /> fiókból.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">A letöltés helye: <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Módosítás<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Váltás lapra</translation> <translation id="572328651809341494">Nemrég megnyitott lapok</translation> -<translation id="5723735397759933332">Az Egyszerűsített mód mostantól még tovább csökkenti az adatforgalmat a HTTPS-oldalakon lévő képek optimalizálásával.</translation> <translation id="5726692708398506830">Minden nagyítása az oldalon</translation> <translation id="5748802427693696783">Szabványos lapokra váltva</translation> <translation id="5749068826913805084">A Chrome-nak tárhelyhozzáférésre van szüksége a fájlok letöltéséhez.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Olvasási lista keresése a Google Könyvjelzők szolgáltatásban</translation> <translation id="8562452229998620586">A mentett jelszavak itt jelennek meg.</translation> <translation id="856481929701340285">Asztali webhely kérése</translation> -<translation id="8569404424186215731"><ph name="DATE" /> óta</translation> <translation id="8570677896027847510">A fájlt nem lehet biztonságosan letölteni</translation> <translation id="8571213806525832805">Az elmúlt 4 hétből</translation> <translation id="8572344201470131220">Kép vágólapra másolva</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 3ad2b746..e351a1b 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Բացել էջը</translation> <translation id="2122601567107267586">Չհաջողվեց բացել հավելվածը</translation> <translation id="2126426811489709554">Աշխատում է Chrome-ով</translation> -<translation id="2131665479022868825">Խնայվել է <ph name="DATA" /></translation> <translation id="2132122640199389833">Հեռացնել բոլոր կապված սարքերը</translation> <translation id="213279576345780926">Փակված <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Ավելացնել գլխավոր էկրանին</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Նավիգացիա Chrome-ում</translation> <translation id="5487521232677179737">Ջնջել տվյալները</translation> <translation id="549025011754480756">Ինչպես որոնել ձայնի միջոցով</translation> +<translation id="5492637351392383067">Գաղտնագրում սարքում</translation> <translation id="5514904542973294328">Անջատվել է այս սարքի ադմինիստրատորի կողմից</translation> <translation id="5515439363601853141">Գաղտնաբառը տեսնելու համար ապակողպեք էկրանը</translation> <translation id="5517095782334947753">Դուք էջանիշներ, պատմություն, գաղտնաբառեր և այլ կարգավորումներ ունեք <ph name="FROM_ACCOUNT" /> հաշվից:</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Ձեր ֆայլը կպահվի <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> պանակում։ <ph name="BEGIN_LINK2" />Փոխել<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Անցնել ներդիր</translation> <translation id="572328651809341494">Վերջերս բացված ներդիրներ</translation> -<translation id="5723735397759933332">HTTPS էջերում պատկերների օպտիմալացման շնորհիվ Lite ռեժիմն այժմ ավելի շատ թրաֆիկ է խնայում։</translation> <translation id="5726692708398506830">Էջում ամեն ինչ մեծացնել</translation> <translation id="5748802427693696783">Դուք անցում կատարեցիք սովորական ներդիրների ռեժիմին</translation> <translation id="5749068826913805084">Ֆայլեր ներբեռնելու համար Chrome-ին անհրաժեշտ է պահեստի մուտք:</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Գտեք ձեր ընթերցանության ցանկը էջանիշներում։</translation> <translation id="8562452229998620586">Պահված գաղտնաբառերը կտեսնեք այստեղ:</translation> <translation id="856481929701340285">Համակարգչային տարբերակ</translation> -<translation id="8569404424186215731"><ph name="DATE" />-ից սկսած</translation> <translation id="8570677896027847510">Ֆայլը հնարավոր չէ ներբեռնել անվտանգ եղանակով</translation> <translation id="8571213806525832805">Վերջին 4 շաբաթվա</translation> <translation id="8572344201470131220">Պատկերը պատճենվեց</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 97214611..238ef763 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Buka halaman</translation> <translation id="2122601567107267586">Tidak dapat membuka aplikasi</translation> <translation id="2126426811489709554">Diberdayakan oleh Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> dihemat</translation> <translation id="2132122640199389833">Hapus semua perangkat tertaut</translation> <translation id="213279576345780926">Menutup <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Tambahkan ke Layar Utama</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Update <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Menemukan yang terbaik dari web...</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> aktif</translation> -<translation id="3925830358619338299">Sandi Anda dienkripsi di perangkat sebelum disimpan ke Pengelola Sandi Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Gabungkan data saya</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">File Anda akan disimpan ke <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Edit<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Beralih ke Tab</translation> <translation id="572328651809341494">Tab terbaru</translation> -<translation id="5723735397759933332">Mode Ringan kini menghemat data Anda lebih banyak dengan mengoptimalkan gambar di halaman HTTPS.</translation> <translation id="5726692708398506830">Memperbesar semua yang ada di halaman</translation> <translation id="5748802427693696783">Beralih ke tab standar</translation> <translation id="5749068826913805084">Chrome memerlukan akses penyimpanan untuk mendownload file.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Tab pratinjau terbuka setengah</translation> <translation id="8428213095426709021">Setelan</translation> <translation id="8430824733382774043">Hanya bagikan screenshot</translation> -<translation id="8431730749911729314">Enkripsi sandi di perangkat Anda sebelum disimpan ke Pengelola Sandi Google</translation> <translation id="8438566539970814960">Jadikan penelusuran dan penjelajahan lebih baik</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Bahasa sudah siap, mulai ulang <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Artikel tidak tersedia</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Temukan daftar bacaan Anda di Bookmark</translation> <translation id="8562452229998620586">Sandi yang disimpan akan muncul di sini.</translation> <translation id="856481929701340285">Ubah situs desktop</translation> -<translation id="8569404424186215731">sejak <ph name="DATE" /></translation> <translation id="8570677896027847510">File tidak dapat didownload dengan aman</translation> <translation id="8571213806525832805">4 minggu terakhir</translation> <translation id="8572344201470131220">Gambar Disalin</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 021f5deb..380aefb 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Fara á síðu</translation> <translation id="2122601567107267586">Ekki var hægt að opna forritið</translation> <translation id="2126426811489709554">Keyrt af Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> spöruð</translation> <translation id="2132122640199389833">Fjarlægja öll tengd tæki</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> lokað</translation> <translation id="2139186145475833000">Setja á heimaskjá</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Flettu í Chrome</translation> <translation id="5487521232677179737">Hreinsa gögn</translation> <translation id="549025011754480756">Svona leitarðu með röddinni</translation> +<translation id="5492637351392383067">Dulkóðun í tækinu</translation> <translation id="5514904542973294328">Stjórnandi tækisins gerði þetta óvirkt</translation> <translation id="5515439363601853141">Opnaðu til að skoða aðgangsorðið þitt</translation> <translation id="5517095782334947753">Þú ert með bókamerki, feril, aðgangsorð og aðrar stillingar frá <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Skráin þín verður vistuð í <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Breyta<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Skipta yfir á flipa</translation> <translation id="572328651809341494">Nýlegir flipar</translation> -<translation id="5723735397759933332">Léttútgáfa sparar nú meiri gögn með því að fínstilla myndir á HTTPS-síðum.</translation> <translation id="5726692708398506830">Stækka allt á síðunni</translation> <translation id="5748802427693696783">Skipt yfir í staðlaða flipa</translation> <translation id="5749068826913805084">Chrome þarf aðgang að geymslu til að geta sótt skrár.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Finndu leslistann þinn í bókamerkjum</translation> <translation id="8562452229998620586">Vistuð aðgangsorð munu birtast hér.</translation> <translation id="856481929701340285">Biðja um tölvuvefsvæði</translation> -<translation id="8569404424186215731">síðan <ph name="DATE" /></translation> <translation id="8570677896027847510">Ekki er hægt að sækja skrána á öruggan hátt</translation> <translation id="8571213806525832805">Síðastliðnar fjórar vikur</translation> <translation id="8572344201470131220">Mynd afrituð</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 b0549cb..d7a8a7611 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Vai alla pagina</translation> <translation id="2122601567107267586">Impossibile aprire l'app</translation> <translation id="2126426811489709554">Con tecnologia Chrome</translation> -<translation id="2131665479022868825">Dati risparmiati: <ph name="DATA" /></translation> <translation id="2132122640199389833">Rimuovi tutti i dispositivi collegati</translation> <translation id="213279576345780926">La scheda <ph name="TAB_TITLE" /> è stata chiusa</translation> <translation id="2139186145475833000">Aggiungi a schermata Home</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Aggiorna <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Stiamo cercando il meglio sul Web…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> on</translation> -<translation id="3925830358619338299">Le tue password vengono criptate sul dispositivo prima di essere salvate in Gestore delle password di Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Unisci i miei dati</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Il file verrà salvato in: <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Modifica<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Passa alla scheda</translation> <translation id="572328651809341494">Schede recenti</translation> -<translation id="5723735397759933332">La modalità Lite ora ti permette di ridurre il consumo di dati ottimizzando le immagini sulle pagine HTTPS.</translation> <translation id="5726692708398506830">Ingrandisci i contenuti della pagina</translation> <translation id="5748802427693696783">Schede standard attivate</translation> <translation id="5749068826913805084">Chrome deve avere accesso allo spazio di archiviazione per poter scaricare file.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">La scheda di anteprima è aperta nella parte inferiore dello schermo</translation> <translation id="8428213095426709021">Impostazioni</translation> <translation id="8430824733382774043">Condividi solo screenshot</translation> -<translation id="8431730749911729314">Cripta le password sul dispositivo prima che vengano salvate in Gestore delle password di Google</translation> <translation id="8438566539970814960">Migliora le ricerche e le attività di navigazione</translation> <translation id="8439974325294139057"><ph name="LANG" />: lingua pronta, riavvia <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Nessuna notizia disponibile</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Trova il tuo elenco di lettura nei preferiti</translation> <translation id="8562452229998620586">Le password salvate verranno visualizzate qui.</translation> <translation id="856481929701340285">Richiedi sito desktop</translation> -<translation id="8569404424186215731">dal giorno <ph name="DATE" /></translation> <translation id="8570677896027847510">Impossibile scaricare il file in modo sicuro</translation> <translation id="8571213806525832805">Ultime 4 settimane</translation> <translation id="8572344201470131220">Immagine copiata</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 d263986..16f28830 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">מעבר לדף</translation> <translation id="2122601567107267586">לא ניתן היה לפתוח את היישום</translation> <translation id="2126426811489709554">מבוסס על Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> נשמרו</translation> <translation id="2132122640199389833">הסרת כל המכשירים המקושרים</translation> <translation id="213279576345780926">הכרטיסייה "<ph name="TAB_TITLE" />" נסגרה</translation> <translation id="2139186145475833000">הוספה לדף הבית</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">יש לעדכן את <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">כל הטוב שבאינטרנט…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> פעילה</translation> -<translation id="3925830358619338299">הסיסמאות שלך מוצפנות במכשיר לפי שהן נשמרות במנהל הסיסמאות של Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">שילוב הנתונים שלי</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">הקובץ יישמר בספרייה <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />לעריכה<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">מעבר לכרטיסייה</translation> <translation id="572328651809341494">כרטיסיות אחרונות</translation> -<translation id="5723735397759933332">מצב הטעינה המהירה מאפשר לך לשפר את החיסכון בנתונים על ידי אופטימיזציה של התמונות בדפי HTTPS.</translation> <translation id="5726692708398506830">הגדלת כל מה שמופיע בדף</translation> <translation id="5748802427693696783">הוחלף לכרטיסיות רגילות</translation> <translation id="5749068826913805084">לצורך הורדת קבצים, Chrome זקוק לגישה לאחסון.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">כרטיסיית התצוגה המקדימה פתוחה בחצי גובה המסך</translation> <translation id="8428213095426709021">הגדרות</translation> <translation id="8430824733382774043">שיתוף צילום המסך בלבד</translation> -<translation id="8431730749911729314">הצפנת סיסמאות במכשיר לפני שהן נשמרות במנהל הסיסמאות של Google</translation> <translation id="8438566539970814960">שיפור החיפושים והגלישה</translation> <translation id="8439974325294139057"><ph name="LANG" /> - השפה מוכנה, צריך להפעיל מחדש את <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">אין סיפורים זמינים</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">ניתן למצוא את רשימת הקריאה בקטע 'סימניות'</translation> <translation id="8562452229998620586">הסיסמאות השמורות יופיעו כאן.</translation> <translation id="856481929701340285">בקש אתר לשולחן העבודה</translation> -<translation id="8569404424186215731">מאז <ph name="DATE" /></translation> <translation id="8570677896027847510">לא ניתן להוריד את הקובץ באופן מאובטח</translation> <translation id="8571213806525832805">מארבעת השבועות האחרונים</translation> <translation id="8572344201470131220">התמונה הועתקה</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 8261881..2ec1101 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">ページを開く</translation> <translation id="2122601567107267586">アプリを開けませんでした</translation> <translation id="2126426811489709554">Powered by Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> 削減しました</translation> <translation id="2132122640199389833">リンクしたすべてのデバイスを削除</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> を閉じました</translation> <translation id="2139186145475833000">ホーム画面に追加</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> を更新する</translation> <translation id="3912508018559818924">ウェブで最適なデータを探しています。</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" />: オン</translation> -<translation id="3925830358619338299">Google パスワード マネージャーに保存する前にデバイス上でパスワードを暗号化します</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">データを統合する</translation> <translation id="3934366560681368531">「</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">ファイルは <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> に保存されます。<ph name="BEGIN_LINK2" />編集<ph name="END_LINK2" /></translation> <translation id="570347048394355941">タブを切り替え</translation> <translation id="572328651809341494">最近使ったタブ</translation> -<translation id="5723735397759933332">ライトモードで HTTPS ページの画像が最適化されるようになり、データをさらに節約できるようになりました。</translation> <translation id="5726692708398506830">ページ上のすべての要素を拡大する</translation> <translation id="5748802427693696783">標準のタブに切り替えました</translation> <translation id="5749068826913805084">Chrome でファイルをダウンロードするにはストレージへのアクセス権が必要です。</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">[プレビュー] タブが半分開いています</translation> <translation id="8428213095426709021">設定</translation> <translation id="8430824733382774043">スクリーンショットのみ共有</translation> -<translation id="8431730749911729314">Google パスワード マネージャーに保存する前にデバイス上でパスワードを暗号化</translation> <translation id="8438566539970814960">検索とブラウジングを改善する</translation> <translation id="8439974325294139057"><ph name="LANG" /> - 言語を使用できるようになりました。<ph name="APP_NAME" /> を再起動してください。</translation> <translation id="8442258441309440798">表示できる記事はありません</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">リーディング リストはブックマークからアクセスできます</translation> <translation id="8562452229998620586">保存したパスワードはこちらに表示されます。</translation> <translation id="856481929701340285">PC版サイトを見る</translation> -<translation id="8569404424186215731">(<ph name="DATE" />以降)</translation> <translation id="8570677896027847510">ファイルを安全にダウンロードできません</translation> <translation id="8571213806525832805">過去 4 週間</translation> <translation id="8572344201470131220">画像をコピーしました</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 0ab278e..c92f205 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">გვერდზე გადასვლა</translation> <translation id="2122601567107267586">აპის გახსნა ვერ მოხერხდა</translation> <translation id="2126426811489709554">უზრუნველყოფილია Chrome-ის მიერ</translation> -<translation id="2131665479022868825">დაზოგილია <ph name="DATA" /></translation> <translation id="2132122640199389833">ყველა მიბმული მოწყობილობის ამოშლა</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> დაიხურა</translation> <translation id="2139186145475833000">მთავარ ეკრანზე დამატება</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" />-ის განახლება</translation> <translation id="3912508018559818924">მიმდინარეობს საუკეთესო კონტენტის პოვნა ვებში…</translation> <translation id="3924911262913579434">„<ph name="SAFE_BROWSING_MODE" />“ ჩართულია</translation> -<translation id="3925830358619338299">თქვენი პაროლები თქვენს მოწყობილობაზე დაიშიფრება, სანამ ისინი Google-ის პაროლების მმართველში შეინახება</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">ჩემი მონაცემების კომბინირება</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">თქვენი ფაილი შეინახება „<ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />“-ში. <ph name="BEGIN_LINK2" />რედაქტირება<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">ჩანართზე გადართვა</translation> <translation id="572328651809341494">ბოლო ჩანართები</translation> -<translation id="5723735397759933332">Lite რეჟიმი ამიერიდან დაზოგავს კიდევ უფრო მეტ მონაცემს HTTPS-გვერდებზე სურათების ოპტიმიზაციის მეშვეობით.</translation> <translation id="5726692708398506830">გვერდზე ყველაფრის გადიდება</translation> <translation id="5748802427693696783">გადართულია სტანდარტულ ჩანართებზე</translation> <translation id="5749068826913805084">ფაილების ჩამოსატვირთად Chrome საცავზე წვდომას საჭიროებს.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">გადახედვის ჩანართი ნახევრადგახსნილია</translation> <translation id="8428213095426709021">პარამეტრები</translation> <translation id="8430824733382774043">მხოლოდ ეკრანის ანაბეჭდის გაზიარება</translation> -<translation id="8431730749911729314">დაშიფრეთ პაროლები თქვენს მოწყობილობაზე, სანამ ისინი Google-ის პაროლების მმართველში შეინახება</translation> <translation id="8438566539970814960">გააუმჯობესეთ ძიებები და ვებსაიტების დათვალიერება</translation> <translation id="8439974325294139057"><ph name="LANG" /> — ენა მზადაა, გადატვირთეთ <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">ამბები მიუწვდომელია</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">თქვენი საკითხავი სია სანიშნეებშია</translation> <translation id="8562452229998620586">შენახული პაროლები გამოჩნდება აქ.</translation> <translation id="856481929701340285">დესკტოპის საიტის მოთხოვნა</translation> -<translation id="8569404424186215731"><ph name="DATE" />-დან</translation> <translation id="8570677896027847510">ფაილის დაცულად ჩამოტვირთვა ვერ ხერხდება</translation> <translation id="8571213806525832805">ბოლო 4 კვირა</translation> <translation id="8572344201470131220">სურათი დაკოპირდა</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 6109169..8752d42 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Бетке өту</translation> <translation id="2122601567107267586">Қолданбаны ашу мүмкін емес</translation> <translation id="2126426811489709554">Chrome арқылы</translation> -<translation id="2131665479022868825"><ph name="DATA" /> сақталды</translation> <translation id="2132122640199389833">Байланыстырылған құрылғылардың барлығын өшіру</translation> <translation id="213279576345780926">Жабық <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Негізгі экранға қосу</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> қолданбасын жаңарту</translation> <translation id="3912508018559818924">Интернеттен деректер жүктелуде…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> қосулы</translation> -<translation id="3925830358619338299">Құрылғыдағы құпия сөздер Google Құпия сөздер реттегішіне сақтамас бұрын шифрланады.</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Деректерімді аралас пайдалану</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Файлыңыз <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> қалтасына сақталады. <ph name="BEGIN_LINK2" />Өзгерту<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Қойындыға ауысу</translation> <translation id="572328651809341494">Соңғы қойындылар</translation> -<translation id="5723735397759933332">Lite режимі HTTPS беттеріндегі кескіндерді оңтайландыру арқылы интернет трафигін үнемдейді.</translation> <translation id="5726692708398506830">Беттегі барлық элементтерді үлкейту</translation> <translation id="5748802427693696783">Стандартты қойындыларға ауысты</translation> <translation id="5749068826913805084">Файлдарды жүктеп алу үшін, Chrome-ға сақтау орнын пайдалану құқығы қажет.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">"Алдын ала қарау" қойындысы жартылай ашық.</translation> <translation id="8428213095426709021">Параметрлер</translation> <translation id="8430824733382774043">Тек скриншот бөлісу</translation> -<translation id="8431730749911729314">Құрылғыдағы құпия сөздерді Google Құпия сөздер реттегішіне сақтамас бұрын шифрлаңыз.</translation> <translation id="8438566539970814960">Іздеу және сайттарды шолу жұмысын жақсарту</translation> <translation id="8439974325294139057"><ph name="LANG" /> – тіл бумасы дайын, <ph name="APP_NAME" /> қолданбасын қайта қосыңыз.</translation> <translation id="8442258441309440798">Жаңалықтар жоқ</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Бетбелгілерден оқылатын тізімді табу</translation> <translation id="8562452229998620586">Сақталған құпия сөздер мына жерде пайда болады.</translation> <translation id="856481929701340285">Жұмыс үстелі сайтын сұрау</translation> -<translation id="8569404424186215731"><ph name="DATE" /> бері</translation> <translation id="8570677896027847510">Файлды қауіпсіз жүктеп алу мүмкін емес</translation> <translation id="8571213806525832805">Соңғы 4 апта</translation> <translation id="8572344201470131220">Сурет көшірілді.</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 48bdd67..35ff383 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">ចូលទៅកាន់ទំព័រ</translation> <translation id="2122601567107267586">មិនអាចបើកកម្មវិធីបានទេ</translation> <translation id="2126426811489709554">គាំទ្រដោយ Chrome</translation> -<translation id="2131665479022868825">បានរក្សាទុក <ph name="DATA" /></translation> <translation id="2132122640199389833">ដកឧបករណ៍ដែលបានភ្ជាប់ទាំងអស់ចេញ</translation> <translation id="213279576345780926">បានបិទ <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">បន្ថែមទៅអេក្រង់ដើម</translation> @@ -211,6 +210,7 @@ <translation id="2227444325776770048">បន្តជា <ph name="USER_FULL_NAME" /></translation> <translation id="2230777942707397948">វិនដូទទេ</translation> <translation id="2239812875700136898">គ្រប់គ្រងអត្ថបទរបស់អ្នកពី "ជម្រើស" សម្រាប់ប៊ូតុង Discover</translation> +<translation id="2248941474044011069">ពាក្យសម្ងាត់របស់អ្នកត្រូវបានអ៊ីនគ្រីបនៅលើឧបករណ៍របស់អ្នក មុនពេលរក្សាទុកពាក្យសម្ងាត់ទាំងនោះទៅកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google</translation> <translation id="2259659629660284697">នាំចេញពាក្យសម្ងាត់…</translation> <translation id="2276696007612801991">ចូលគណនី Google របស់អ្នក ដើម្បីពិនិត្យពាក្យសម្ងាត់របស់អ្នក</translation> <translation id="2278052315791335171">ការលុបពាក្យសម្ងាត់នេះនឹងមិនលុបគណនីរបស់អ្នកនៅលើ <ph name="SITE" /> ទេ</translation> @@ -500,7 +500,6 @@ <translation id="3908308510347173149">ដំឡើងកំណែ <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">កំពុងស្វែងរកអ្វីដែលល្អបំផុតពីបណ្ដាញ…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ត្រូវបានបើក</translation> -<translation id="3925830358619338299">ពាក្យសម្ងាត់របស់អ្នកត្រូវបានអ៊ីនគ្រីបនៅលើឧបករណ៍របស់អ្នក មុនពេលរក្សាទុកពាក្យសម្ងាត់ទាំងនោះទៅកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">រួមបញ្ចូលទិន្នន័យរបស់ខ្ញុំ</translation> <translation id="3934366560681368531">“</translation> @@ -661,6 +660,7 @@ <translation id="4837753911714442426">បើកជម្រើសដើម្បីបោះពុម្ពទំព័រ</translation> <translation id="4842092870884894799">កំពុងបង្ហាញផ្ទាំងលោតបបង្កើតពាក្យសម្ងាត់</translation> <translation id="4842515939542199281">ដើម្បីស្វែងរកដោយប្រើសំឡេងរបស់អ្នក សូមចុចមីក្រូហ្វូន</translation> +<translation id="4844633725025837809">សម្រាប់សុវត្ថិភាពបន្ថែម សូមអ៊ីនគ្រីបពាក្យសម្ងាត់នៅលើឧបករណ៍របស់អ្នក មុនពេលរក្សាទុកពាក្យសម្ងាត់ទាំងនោះទៅកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google</translation> <translation id="4850886885716139402">មើល</translation> <translation id="4860895144060829044">ហៅ</translation> <translation id="4864369630010738180">កំពុងចូល...</translation> @@ -808,7 +808,6 @@ <translation id="5697688514913266141">ឯកសាររបស់អ្នកនឹងត្រូវរក្សាទុកទៅក្នុង <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />។ <ph name="BEGIN_LINK2" />កែ<ph name="END_LINK2" />។</translation> <translation id="570347048394355941">ប្ដូរទៅផ្ទាំង</translation> <translation id="572328651809341494">ផ្ទាំងថ្មីៗ</translation> -<translation id="5723735397759933332">ឥឡូវនេះ មុខងារស្រាលសន្សំសំចៃទិន្នន័យឱ្យអ្នកបានច្រើនជាងមុន ដោយបង្កើនគុណភាពរូបភាពនៅលើទំព័រ HTTPS។</translation> <translation id="5726692708398506830">ធ្វើឲ្យអ្វីគ្រប់យ៉ាងនៅលើទំព័រនេះធំជាងមុន</translation> <translation id="5748802427693696783">បានប្តូរទៅផ្ទាំងស្តង់ដារ</translation> <translation id="5749068826913805084">Chrome ត្រូវការលទ្ធភាពចូលប្រើទំហំផ្ទុកដើម្បីដោនឡូតឯកសារ</translation> @@ -1323,7 +1322,6 @@ <translation id="8427875596167638501">ផ្ទាំងមើលសាកល្បងបានបើកពាក់កណ្ដាល</translation> <translation id="8428213095426709021">ការកំណត់</translation> <translation id="8430824733382774043">ចែករំលែករូបថតអេក្រង់តែប៉ុណ្ណោះ</translation> -<translation id="8431730749911729314">អ៊ីនគ្រីបពាក្យសម្ងាត់នៅលើឧបករណ៍របស់អ្នក មុនពេលរក្សាទុកពាក្យសម្ងាត់ទាំងនោះទៅកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google</translation> <translation id="8438566539970814960">ធ្វើឱ្យការស្វែងរក និងការរុករកប្រសើរជាងមុន</translation> <translation id="8439974325294139057"><ph name="LANG" /> - អាចប្រើភាសាបានហើយ សូមចាប់ផ្ដើម <ph name="APP_NAME" /> ឡើងវិញ។</translation> <translation id="8442258441309440798">មិនមានអត្ថបទទេ</translation> @@ -1359,7 +1357,6 @@ <translation id="8560602726703398413">រកមើលបញ្ជីអានរបស់អ្នកនៅក្នុងចំណាំ</translation> <translation id="8562452229998620586">ពាក្យសម្ងាត់ដែលបានរក្សាទុកលេចឡើងទីនេះ។</translation> <translation id="856481929701340285">សំណើគេហទំព័រសម្រាប់កុំព្យូទ័រ</translation> -<translation id="8569404424186215731">ចាប់តាំងពីថ្ងៃទី <ph name="DATE" /></translation> <translation id="8570677896027847510">មិនអាចទាញយកឯកសារដោយសុវត្ថិភាពបានទេ</translation> <translation id="8571213806525832805">4 សប្តាហ៍មុន</translation> <translation id="8572344201470131220">បានចម្លងរូបភាព</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 5a00f5a..f60962e 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">ಪುಟಕ್ಕೆ ಹೋಗಿ</translation> <translation id="2122601567107267586">ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation> <translation id="2126426811489709554">Chrome ನಿಂದ ಸಂಚಾಲಿತ</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ಉಳಿತಾಯ ಮಾಡಲಾಗಿದೆ</translation> <translation id="2132122640199389833">ಲಿಂಕ್ ಮಾಡಿದ ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ತೆಗೆದುಹಾಕಿ</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> ಮುಚ್ಚಲಾಗಿದೆ</translation> <translation id="2139186145475833000">ಹೋಮ್ ಪರದೆಗೆ ಸೇರಿಸಿ</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ</translation> <translation id="3912508018559818924">ವೆಬ್ನಿಂದ ಅತ್ಯುತ್ತಮ ವಿಷಯಗಳನ್ನು ಹುಡುಕಲಾಗುತ್ತಿದೆ…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ಆನ್ ಆಗಿದೆ</translation> -<translation id="3925830358619338299">ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು Google ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕದಲ್ಲಿ ಉಳಿಸುವ ಮೊದಲು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗುತ್ತದೆ</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">ನನ್ನ ಡೇಟಾ ಒಂದುಗೂಡಿಸಿ</translation> <translation id="3934366560681368531">“</translation> @@ -807,7 +805,6 @@ <translation id="5697688514913266141">ನಿಮ್ಮ ಫೈಲ್ ಅನ್ನು <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> ನಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ. <ph name="BEGIN_LINK2" />ಎಡಿಟ್ ಮಾಡಿ<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">ಟ್ಯಾಬ್ಗೆ ಬದಲಿಸಿ</translation> <translation id="572328651809341494">ಇತ್ತೀಚಿನ ಟ್ಯಾಬ್ಗಳು</translation> -<translation id="5723735397759933332">HTTPS ಪುಟಗಳಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು ಆಪ್ಟಿಮೈಸ್ ಮಾಡುವ ಮೂಲಕ, ಲೈಟ್ ಮೋಡ್ ಈಗ ನಿಮಗಾಗಿ ಹೆಚ್ಚು ಡೇಟಾವನ್ನು ಉಳಿಸುತ್ತದೆ.</translation> <translation id="5726692708398506830">ಪುಟದಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದನ್ನೂ ದೊಡ್ಡದಾಗಿಸಿ</translation> <translation id="5748802427693696783">ಪ್ರಮಾಣಿತ ಟ್ಯಾಬ್ಗಳಿಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ</translation> <translation id="5749068826913805084">ಫೈಲ್ಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು Chrome ಗೆ ಸಂಗ್ರಹಣೆ ಪ್ರವೇಶ ಅಗತ್ಯವಿದೆ.</translation> @@ -1322,7 +1319,6 @@ <translation id="8427875596167638501">ಪೂರ್ವವೀಕ್ಷಣೆ ಟ್ಯಾಬ್ ಅರ್ಧ ತೆರೆದಿದೆ</translation> <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="8430824733382774043">ಸ್ಕ್ರೀನ್ಶಾಟ್ ಮಾತ್ರ ಹಂಚಿಕೊಳ್ಳಿ</translation> -<translation id="8431730749911729314">ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು Google ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕದಲ್ಲಿ ಉಳಿಸುವ ಮೊದಲು ಅವುಗಳನ್ನು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿ</translation> <translation id="8438566539970814960">ಹುಡುಕಾಟಗಳನ್ನು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುವಂತೆ ಮಾಡಿ</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ಭಾಷೆ ಸಿದ್ಧವಾಗಿದೆ, <ph name="APP_NAME" /> ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ.</translation> <translation id="8442258441309440798">ಯಾವುದೇ ಸುದ್ದಿಗಳು ಲಭ್ಯವಿಲ್ಲ</translation> @@ -1358,7 +1354,6 @@ <translation id="8560602726703398413">Bookmarks ನಲ್ಲಿ ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಿ</translation> <translation id="8562452229998620586">ಉಳಿಸಲಾದ ಪಾಸ್ವರ್ಡ್ಗಳು ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ.</translation> <translation id="856481929701340285">ಡೆಸ್ಕ್ಟಾಪ್ ಸೈಟ್ ವಿನಂತಿ</translation> -<translation id="8569404424186215731"><ph name="DATE" /> ರಿಂದ</translation> <translation id="8570677896027847510">ಫೈಲ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="8571213806525832805">ಕಳೆದ 4 ವಾರಗಳು</translation> <translation id="8572344201470131220">ಚಿತ್ರವನ್ನು ನಕಲಿಸಲಾಗಿದೆ</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 191d9e7..4f2a73a 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">페이지로 이동</translation> <translation id="2122601567107267586">앱을 열 수 없음</translation> <translation id="2126426811489709554">Chrome에서 실행 중</translation> -<translation id="2131665479022868825"><ph name="DATA" /> 절약됨</translation> <translation id="2132122640199389833">연결된 기기 모두 삭제</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> 닫음</translation> <translation id="2139186145475833000">홈 화면에 추가</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> 업데이트</translation> <translation id="3912508018559818924">웹에서 최상의 결과를 찾는 중…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> 사용 중</translation> -<translation id="3925830358619338299">비밀번호가 Google 비밀번호 관리자에 저장되기 전에 기기에서 암호화됩니다</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">내 데이터 결합하기</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">파일이 <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />에 저장됩니다. <ph name="BEGIN_LINK2" />수정<ph name="END_LINK2" /></translation> <translation id="570347048394355941">탭으로 전환</translation> <translation id="572328651809341494">최근 탭</translation> -<translation id="5723735397759933332">라이트 모드에서는 HTTPS 페이지의 이미지를 최적화하여 더 많은 데이터를 절약할 수 있습니다.</translation> <translation id="5726692708398506830">페이지의 모든 항목 확대</translation> <translation id="5748802427693696783">일반 탭으로 전환됨</translation> <translation id="5749068826913805084">Chrome에서 파일을 다운로드하려면 저장소 액세스 권한이 있어야 합니다.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">미리보기 탭이 절반 높이로 열림</translation> <translation id="8428213095426709021">설정</translation> <translation id="8430824733382774043">스크린샷만 공유</translation> -<translation id="8431730749911729314">Google 비밀번호 관리자에 저장하기 전에 기기의 비밀번호를 암호화합니다</translation> <translation id="8438566539970814960">검색 및 탐색 기능 개선</translation> <translation id="8439974325294139057"><ph name="LANG" />: 언어가 준비되었습니다. <ph name="APP_NAME" /> 앱을 다시 시작하세요.</translation> <translation id="8442258441309440798">사용할 수 있는 스토리 없음</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">북마크에서 읽기 목록 찾기</translation> <translation id="8562452229998620586">저장한 비밀번호가 여기에 표시됩니다.</translation> <translation id="856481929701340285">데스크톱 버전으로 보기</translation> -<translation id="8569404424186215731"><ph name="DATE" />부터</translation> <translation id="8570677896027847510">파일을 안전하게 다운로드할 수 없음</translation> <translation id="8571213806525832805">지난 4주</translation> <translation id="8572344201470131220">이미지 복사됨</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 ea15e76..e79c1d5 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Веб баракчага өтүү</translation> <translation id="2122601567107267586">Колдонмо ачылбай койду</translation> <translation id="2126426811489709554">Chrome аркылуу иштетилүүдө</translation> -<translation id="2131665479022868825"><ph name="DATA" /> үнөмдөлдү</translation> <translation id="2132122640199389833">Бардык байланыштырылган түзмөктөрдү өчүрүү</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> жабылган</translation> <translation id="2139186145475833000">Башкы экранга кошуу</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> түзмөгүн жаңыртуу</translation> <translation id="3912508018559818924">Интернеттен мыкты мазмунду гана табуу…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> күйүк</translation> -<translation id="3925830358619338299">Google Сырсөздөрдү башкаргычка сакталганга чейин сырсөздөрүңүз түзмөгүңүздө шифрленет</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Дайындарымды бириктирүү</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Файлыңыз <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> бөлүмүндө сакталат. <ph name="BEGIN_LINK2" />Түзөтүү<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Өтмөккө которулуу</translation> <translation id="572328651809341494">Акыркы өтмөктөр</translation> -<translation id="5723735397759933332">Жөнөкөй режимде HTTPS барактарындагы сүрөттөр оптималдаштырылып, көбүрөөк трафик үнөмдөлөт.</translation> <translation id="5726692708398506830">Барактагы бардык нерселерди чоңойтуу</translation> <translation id="5748802427693696783">Стандарттык өтмөктөргө которулду</translation> <translation id="5749068826913805084">Файлдарды жүктөп алуу үчүн Chrome сактагычка мүмкүнчүлүк алышы керек.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Алдын ала көрүү өтмөгүнүн жарымы жабык</translation> <translation id="8428213095426709021">Жөндөөлөр</translation> <translation id="8430824733382774043">Скриншотту гана бөлүшүү</translation> -<translation id="8431730749911729314">Google Сырсөздөрдү башкаргычка сакталганга чейин сырсөздөрдү түзмөгүңүздө шифрлеңиз</translation> <translation id="8438566539970814960">Издөө жана серептөө аракеттериңизди жакшыртыңыз</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Тил жүктөлүп алынды. <ph name="APP_NAME" /> колдонмосун өчүрүп күйгүзүңүз.</translation> <translation id="8442258441309440798">Окуялар жеткиликсиз</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Окуу тизмеңизди кыстармалардан табыңыз</translation> <translation id="8562452229998620586">Сакталган сырсөздөр бул жерде көрүнөт.</translation> <translation id="856481929701340285">Толук версия талап кылнт</translation> -<translation id="8569404424186215731"><ph name="DATE" /> бери</translation> <translation id="8570677896027847510">Файлды коопсуз жүктөп алуу мүмкүн эмес</translation> <translation id="8571213806525832805">Акыркы 4 апта</translation> <translation id="8572344201470131220">Сүрөт көчүрүлдү</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 3c63eb5..44f6f33f 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">ໄປຫາໜ້າ</translation> <translation id="2122601567107267586">ບໍ່ສາມາດເປີດແອັບໄດ້</translation> <translation id="2126426811489709554">ຂັບເຄື່ອນໂດຍ Chrome</translation> -<translation id="2131665479022868825">ປະຢັດໄດ້ <ph name="DATA" /></translation> <translation id="2132122640199389833">ລຶບອຸປະກອນທີ່ລິ້ງໄວ້ທັງໝົດອອກ</translation> <translation id="213279576345780926">ປິດ <ph name="TAB_TITLE" /> ແລ້ວ</translation> <translation id="2139186145475833000">ເພີ່ມໃສ່ໜ້າຈໍຫຼັກ</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">ອັບເດດ <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">ກຳລັງຊອກຫາສິ່ງທີ່ດີສຸດຈາກເວັບ...</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ເປີດຢູ່</translation> -<translation id="3925830358619338299">ລະຫັດຜ່ານຂອງທ່ານແມ່ນຖືກເຂົ້າລະຫັດໄວ້ຢູ່ອຸປະກອນຂອງທ່ານກ່ອນທີ່ພວກມັນຈະຖືກບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">ລວມຂໍ້ມູນຂອງຂ້ອຍເຂົ້າກັນ</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">ໄຟລ໌ຂອງທ່ານຈະຖືກບັນທຶກໄວ້ໃນ <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />ແກ້ໄຂ<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">ປ່ຽນເປັນແຖບ</translation> <translation id="572328651809341494">ແຖບບໍ່ດົນມານີ້</translation> -<translation id="5723735397759933332">ດຽວນີ້ໂໝດ Lite ຊ່ວຍທ່ານປະຢັດອິນເຕີເນັດຫຼາຍຂຶ້ນໂດຍການປັບຮູບໃນໜ້າ HTTPS ໃຫ້ເໝາະສົມ.</translation> <translation id="5726692708398506830">ເຮັດໃຫ້ທຸກຢ່າງໃນໜ້າໃຫຍ່ຂຶ້ນ</translation> <translation id="5748802427693696783">ປ່ຽນເປັນແຖບມາດຕະຖານ</translation> <translation id="5749068826913805084">Chrome ຕ້ອງການໃຫ້ມີການເຂົ້າຫາບ່ອນຈັດເກັບຂໍ້ມູນເພື່ອດາວໂຫຼດໄຟລ໌.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">ແຖບສະແດງຕົວຢ່າງເປີດເຄິ່ງໜຶ່ງ</translation> <translation id="8428213095426709021">ການຕັ້ງຄ່າ</translation> <translation id="8430824733382774043">ແບ່ງປັນຮູບໜ້າຈໍເທົ່ານັ້ນ</translation> -<translation id="8431730749911729314">ເຂົ້າລະຫັດລະຫັດຜ່ານຢູ່ອຸປະກອນຂອງທ່ານກ່ອນທີ່ພວກມັນຈະຖືກບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google</translation> <translation id="8438566539970814960">ເຮັດໃຫ້ການຊອກຫາ ແລະ ການທ່ອງເວັບດີຂຶ້ນ</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ພາສາພ້ອມແລ້ວ, ຣີສະຕາດ <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">ບໍ່ມີເລື່ອງລາວ</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">ຊອກລາຍການອ່ານຂອງທ່ານໃນ Bookmarks</translation> <translation id="8562452229998620586">ລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ຈະປາກົດຂຶ້ນບ່ອນນີ້.</translation> <translation id="856481929701340285">ຮ້ອງຂໍເວັບໄຊທ໌ເດັສທັອບ</translation> -<translation id="8569404424186215731">ນັບແຕ່ <ph name="DATE" /></translation> <translation id="8570677896027847510">ບໍ່ສາມາດດາວໂຫຼດໄຟລ໌ໄດ້ຢ່າງປອດໄພ</translation> <translation id="8571213806525832805">4 ອາທິດຜ່ານມາ</translation> <translation id="8572344201470131220">ສຳເນົາຮູບແລ້ວ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb index 33655d4..4be1b74 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Eiti į puslapį</translation> <translation id="2122601567107267586">Nepavyko atidaryti programos</translation> <translation id="2126426811489709554">Teikia „Chrome“</translation> -<translation id="2131665479022868825">Išsaugota: <ph name="DATA" /></translation> <translation id="2132122640199389833">Pašalinti visus susietus įrenginius</translation> <translation id="213279576345780926">„<ph name="TAB_TITLE" />“ uždaryta</translation> <translation id="2139186145475833000">Pridėti prie pagr. ekrano</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Atnaujinti „<ph name="PRODUCT_NAME" />“</translation> <translation id="3912508018559818924">Ieškoma geriausio žiniatinklio turinio…</translation> <translation id="3924911262913579434">„<ph name="SAFE_BROWSING_MODE" />“ įjungta</translation> -<translation id="3925830358619338299">Jūsų slaptažodžiai šifruojami įrenginyje prieš išsaugant juos „Google“ slaptažodžių tvarkytuvėje</translation> <translation id="3927692899758076493">Be užraitų</translation> <translation id="3928666092801078803">Sujungti duomenis</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Jūsų failas bus išsaugotas kataloge <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Redaguoti<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Perjungti skirtuką</translation> <translation id="572328651809341494">Naujausi skirtukai</translation> -<translation id="5723735397759933332">Naudojant supaprastintą režimą dabar sutaupoma daugiau duomenų, nes HTTPS puslapiuose optimizuojami vaizdai.</translation> <translation id="5726692708398506830">Padidinti visą puslapio turinį</translation> <translation id="5748802427693696783">Perjungta į įprastus skirtukus</translation> <translation id="5749068826913805084">„Chrome“ reikia prieigos prie saugyklos failams atsisiųsti.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Peržiūros skirtukas atidarytas iki pusės ekrano</translation> <translation id="8428213095426709021">Nustatymai</translation> <translation id="8430824733382774043">Bendrinti tik ekrano kopiją</translation> -<translation id="8431730749911729314">Šifruokite slaptažodžius įrenginyje prieš išsaugodami juos „Google“ slaptažodžių tvarkytuvėje</translation> <translation id="8438566539970814960">Tobulinti paieškas ir naršymą</translation> <translation id="8439974325294139057"><ph name="LANG" /> – kalba paruošta, paleiskite „<ph name="APP_NAME" />“ iš naujo</translation> <translation id="8442258441309440798">Nėra jokių istorijų</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Suraskite savo skaitymo sąrašą skiltyje „Žymės“</translation> <translation id="8562452229998620586">Čia bus rodomi išsaugoti slaptažodžiai.</translation> <translation id="856481929701340285">Užkl. svet. kompiuteriui</translation> -<translation id="8569404424186215731">nuo <ph name="DATE" /></translation> <translation id="8570677896027847510">Negalima saugiai atsisiųsti failo</translation> <translation id="8571213806525832805">Pastarosios 4 savaitės</translation> <translation id="8572344201470131220">Vaizdas nukopijuotas</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 4300ee3..724dd1f7 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Doties uz lapu</translation> <translation id="2122601567107267586">Nevarēja atvērt lietotni</translation> <translation id="2126426811489709554">Nodrošina Chrome</translation> -<translation id="2131665479022868825">Ietaupījums: <ph name="DATA" /></translation> <translation id="2132122640199389833">Noņemt visas saistītās ierīces</translation> <translation id="213279576345780926">Tika aizvērta cilne <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Pievienot sākuma ekrānam</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Navigācija pārlūkā Chrome</translation> <translation id="5487521232677179737">Notīrīt datus</translation> <translation id="549025011754480756">Kā meklēt ar balsi</translation> +<translation id="5492637351392383067">Šifrēšana ierīcē</translation> <translation id="5514904542973294328">Atspējoja šīs ierīces administrators</translation> <translation id="5515439363601853141">Atbloķējiet, lai skatītu paroli</translation> <translation id="5517095782334947753">Ir pieejamas grāmatzīmes, vēsture, paroles un citi iestatījumi no konta <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Fails tiks saglabāts katalogā <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Rediģēt<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Pāriet uz cilni</translation> <translation id="572328651809341494">Nesen atvērtas cilnes</translation> -<translation id="5723735397759933332">Tagad vienkāršotajā režīmā tiek vēl vairāk samazināts datu lietojums, optimizējot attēlus HTTPS lapās.</translation> <translation id="5726692708398506830">Palielināt visu lapas saturu</translation> <translation id="5748802427693696783">Notika pārslēgšanās uz standarta cilnēm</translation> <translation id="5749068826913805084">Chrome ir nepieciešama piekļuve krātuvei, lai varētu lejupielādēt failus.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Skatiet savu lasīšanas sarakstu grāmatzīmju sadaļā</translation> <translation id="8562452229998620586">Šeit tiks parādītas saglabātās paroles.</translation> <translation id="856481929701340285">Pieprasīt datora vietni</translation> -<translation id="8569404424186215731">kopš šāda datuma: <ph name="DATE" /></translation> <translation id="8570677896027847510">Failu nevar droši lejupielādēt</translation> <translation id="8571213806525832805">Pēdējās 4 nedēļas</translation> <translation id="8572344201470131220">Attēls ir nokopēts.</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 b565ed13..f605ec1 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Одете на страница</translation> <translation id="2122601567107267586">Не може да се отвори апликацијата</translation> <translation id="2126426811489709554">Овозможено од Chrome</translation> -<translation id="2131665479022868825">Зачувани: <ph name="DATA" /></translation> <translation id="2132122640199389833">Отстрани ги сите поврзани уреди</translation> <translation id="213279576345780926">Се затвори <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Додај на почетниот екран</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Ажурирај го уредот <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Го наоѓаме најдоброто на интернет…</translation> <translation id="3924911262913579434">Режимот „<ph name="SAFE_BROWSING_MODE" />“ е вклучен</translation> -<translation id="3925830358619338299">Лозинките се шифрираат на уредот пред да се зачуваат во „Управникот со лозинки на Google“</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Комбинирај ги моите податоци</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Датотеката ќе се зачува во <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Измени<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Префрли се на картичката</translation> <translation id="572328651809341494">Неодамнешни картички</translation> -<translation id="5723735397759933332">Lite-режимот отсега ќе ви штеди повеќе интернет со оптимизирање слики на HTTPS-страниците.</translation> <translation id="5726692708398506830">Зголеми сѐ што се наоѓа на страницата</translation> <translation id="5748802427693696783">Префрлено на стандардни картички</translation> <translation id="5749068826913805084">На Chrome му треба пристап до меморијата за да презема датотеки.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Картичката за преглед е отворена на половина екран</translation> <translation id="8428213095426709021">Поставки</translation> <translation id="8430824733382774043">Сподели само слика од екранот</translation> -<translation id="8431730749911729314">Шифрирајте ги лозинките на уредот пред да се зачуваат во „Управникот со лозинки на Google“</translation> <translation id="8438566539970814960">Подобрете ги пребарувањата и прелистувањето</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Јазикот е подготвен, рестартирајте ја <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Нема достапни статии</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Најдете го списокот за читање во „Обележувачи“</translation> <translation id="8562452229998620586">Зачуваните лозинки ќе се појават тука.</translation> <translation id="856481929701340285">Барај лок. на раб. пов.</translation> -<translation id="8569404424186215731">од <ph name="DATE" /></translation> <translation id="8570677896027847510">Датотеката не може да се преземе безбедно</translation> <translation id="8571213806525832805">Изминатите 4 седмици</translation> <translation id="8572344201470131220">Сликата е копирана</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 2a9f6e2d..87e1f8c 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">പേജിലേക്ക് പോകുക</translation> <translation id="2122601567107267586">ആപ്പ് തുറക്കാനായില്ല</translation> <translation id="2126426811489709554">Chrome നൽകുന്നത്</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ലാഭിച്ചു</translation> <translation id="2132122640199389833">ലിങ്ക് ചെയ്ത എല്ലാ ഉപകരണങ്ങളും നീക്കം ചെയ്യുക</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> അടച്ചു</translation> <translation id="2139186145475833000">ഹോംസ്ക്രീനിൽ ചേർക്കുക</translation> @@ -211,6 +210,7 @@ <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> എന്ന പേരിൽ തുടരുക</translation> <translation id="2230777942707397948">ശൂന്യമായ വിൻഡോ</translation> <translation id="2239812875700136898">'Discover-നുള്ള ഓപ്ഷനുകൾ' ബട്ടൺ അമർത്തി നിങ്ങളുടെ സ്റ്റോറികൾ നിയന്ത്രിക്കുക</translation> +<translation id="2248941474044011069">Google പാസ്വേഡ് മാനേജറിലേക്ക് സംരക്ഷിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്വേഡുകൾ എൻക്രിപ്റ്റ് ചെയ്യുന്നു</translation> <translation id="2259659629660284697">പാസ്വേഡുകൾ എക്സ്പോർട്ട് ചെയ്യുക...</translation> <translation id="2276696007612801991">പാസ്വേഡുകൾ പരിശോധിക്കാൻ നിങ്ങളുടെ Google അക്കൗണ്ടിലേക്ക് സെെൻ ഇൻ ചെയ്യുക</translation> <translation id="2278052315791335171">ഈ പാസ്വേഡ് ഇല്ലാതാക്കുന്നത് <ph name="SITE" /> -ലെ നിങ്ങളുടെ അക്കൗണ്ട് ഇല്ലാതാക്കില്ല</translation> @@ -500,7 +500,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> അപ്ഡേറ്റ് ചെയ്യുക</translation> <translation id="3912508018559818924">വെബിൽ നിന്നുള്ള ഏറ്റവും മികച്ചത് കണ്ടെത്തുന്നു…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ഓണാണ്</translation> -<translation id="3925830358619338299">Google പാസ്വേഡ് മാനേജറിലേക്ക് സംരക്ഷിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്വേഡുകൾ എൻക്രിപ്റ്റ് ചെയ്യുന്നു</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">എന്റെ വിവരങ്ങൾ സംയോജിപ്പിക്കുക</translation> <translation id="3934366560681368531">“</translation> @@ -661,6 +660,7 @@ <translation id="4837753911714442426">പേജ് പ്രിന്റ് ചെയ്യുന്നതിനുള്ള ഓപ്ഷനുകൾ തുറക്കുക</translation> <translation id="4842092870884894799">പാസ്വേഡ് സൃഷ്ടിക്കൽ പോപ്പ് അപ്പ് കാണിക്കുന്നു</translation> <translation id="4842515939542199281">നിങ്ങളുടെ ശബ്ദം ഉപയോഗിച്ച് തിരയാൻ മൈക്രോഫോൺ ടാപ്പ് ചെയ്യുക</translation> +<translation id="4844633725025837809">അധിക സുരക്ഷയ്ക്ക്, Google പാസ്വേഡ് മാനേജറിലേക്ക് സംരക്ഷിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്വേഡുകൾ എൻക്രിപ്റ്റ് ചെയ്യുക</translation> <translation id="4850886885716139402">കാണുക</translation> <translation id="4860895144060829044">വിളിക്കുക</translation> <translation id="4864369630010738180">സൈൻ ഇൻ ചെയ്യുന്നു...</translation> @@ -808,7 +808,6 @@ <translation id="5697688514913266141"><ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> എന്നതിലേക്ക് നിങ്ങളുടെ ഫയൽ സംരക്ഷിക്കും. <ph name="BEGIN_LINK2" />എഡിറ്റ് ചെയ്യുക<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">ടാബിലേക്ക് മാറുക</translation> <translation id="572328651809341494">അടുത്തിടെയുള്ള ടാബുകൾ</translation> -<translation id="5723735397759933332">HTTPS പേജുകളിൽ ചിത്രങ്ങൾ ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിലൂടെ, ലൈറ്റ് മോഡ് ഇപ്പോൾ നിങ്ങൾക്കായി കൂടുതൽ ഡാറ്റ ലാഭിക്കുന്നു.</translation> <translation id="5726692708398506830">പേജിൽ എല്ലാം വലുതായി നൽകുക</translation> <translation id="5748802427693696783">സ്റ്റാൻഡേർഡ് ടാബുകളിലേക്ക് മാറി</translation> <translation id="5749068826913805084">ഫയലുകൾ ഡൗൺലോഡ് ചെയ്യാൻ Chrome-ന് സ്റ്റോറേജ് ആക്സസ് ആവശ്യമുണ്ട്.</translation> @@ -1323,7 +1322,6 @@ <translation id="8427875596167638501">പ്രിവ്യു ടാബ് പാതി തുറന്നിരിക്കുന്നു</translation> <translation id="8428213095426709021">ക്രമീകരണങ്ങള്</translation> <translation id="8430824733382774043">സ്ക്രീൻഷോട്ട് മാത്രം പങ്കിടുക</translation> -<translation id="8431730749911729314">Google പാസ്വേഡ് മാനേജറിലേക്ക് സംരക്ഷിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്വേഡുകൾ എൻക്രിപ്റ്റ് ചെയ്യുക</translation> <translation id="8438566539970814960">തിരയലുകളും ബ്രൗസിംഗും മികച്ചതാക്കുക</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ഭാഷ തയ്യാറാണ്, <ph name="APP_NAME" /> റീസ്റ്റാർട്ട് ചെയ്യുക.</translation> <translation id="8442258441309440798">സ്റ്റോറികളൊന്നും ലഭ്യമല്ല</translation> @@ -1359,7 +1357,6 @@ <translation id="8560602726703398413">ബുക്ക്മാർക്കുകളിൽ നിങ്ങളുടെ വായനാ ലിസ്റ്റ് കണ്ടെത്തൂ</translation> <translation id="8562452229998620586">സംരക്ഷിച്ച പാസ്വേഡുകൾ ഇവിടെ ദൃശ്യമാകും.</translation> <translation id="856481929701340285">ഡെസ്ക്ടോപ്പ് സൈറ്റ് അഭ്യർത്ഥിക്കുക</translation> -<translation id="8569404424186215731"><ph name="DATE" /> മുതൽ</translation> <translation id="8570677896027847510">ഫയൽ സുരക്ഷിതമായി ഡൗൺലോഡ് ചെയ്യാനാകുന്നില്ല</translation> <translation id="8571213806525832805">കഴിഞ്ഞ 4 ആഴ്ച</translation> <translation id="8572344201470131220">ചിത്രം പകർത്തി</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 c86d7f0..22f683b9 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Хуудаст очих</translation> <translation id="2122601567107267586">Аппыг нээж чадсангүй</translation> <translation id="2126426811489709554">Дэмжсэн Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> хадгалсан</translation> <translation id="2132122640199389833">Бүх холбосон төхөөрөмжийг хасах</translation> <translation id="213279576345780926">Хаалттай <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Нүүр хуудсын дэлгэц рүү нэмэх</translation> @@ -211,6 +210,7 @@ <translation id="2227444325776770048"><ph name="USER_FULL_NAME" />-р үргэлжлүүлэх</translation> <translation id="2230777942707397948">Хоосон цонх</translation> <translation id="2239812875700136898">Мэдээ, нийтлэлээ Discover-н сонголтуудын товчлуураас хянана уу</translation> +<translation id="2248941474044011069">Таны нууц үгнүүдийг Google-н Нууц үгний менежерт хадгалахаас нь өмнө төхөөрөмж дээр тань шифрлэдэг</translation> <translation id="2259659629660284697">Нууц үгийг экспортлох...</translation> <translation id="2276696007612801991">Нууц үгээ шалгахын тулд Google Бүртгэлдээ нэвтэрнэ үү</translation> <translation id="2278052315791335171">Энэ нууц үгийг устгаснаар таны бүртгэлийг <ph name="SITE" /> дээрээс устгахгүй</translation> @@ -500,7 +500,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" />-г шинэчлэх</translation> <translation id="3912508018559818924">Вебээс шилдэг илэрцийг хайж байна…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> идэвхтэй байна</translation> -<translation id="3925830358619338299">Таны нууц үгийг Google-н Нууц үгний менежерт хадгалахаас нь өмнө төхөөрөмж дээр тань шифрлэдэг</translation> <translation id="3927692899758076493">Санс сериф</translation> <translation id="3928666092801078803">Миний өгөгдлийг нэгтгэх</translation> <translation id="3934366560681368531">“</translation> @@ -660,6 +659,7 @@ <translation id="4837753911714442426">Хуудас хэвлэхийн тулд сонголтыг нээнэ үү</translation> <translation id="4842092870884894799">Нууц үг үүсгэх цонхыг харуулж байна</translation> <translation id="4842515939542199281">Дуу хоолойгоо ашиглан хайлт хийхийн тулд микрофон дээр товшино уу</translation> +<translation id="4844633725025837809">Нэмэлт аюулгүй байдлын үүднээс өөрийн төхөөрөмж дээрх нууц үгнүүдийг Google-н Нууц үгний менежерт хадгалахаас нь өмнө шифрлэнэ үү</translation> <translation id="4850886885716139402">Харах</translation> <translation id="4860895144060829044">Дуудлага</translation> <translation id="4864369630010738180">Нэвтэрч байна…</translation> @@ -807,7 +807,6 @@ <translation id="5697688514913266141">Таны файлыг <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />-д хадгална. <ph name="BEGIN_LINK2" />Засах<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Таб руу сэлгэх</translation> <translation id="572328651809341494">Саяхан нээсэн табууд</translation> -<translation id="5723735397759933332">Lite горим одоо HTTPS хуудаснууд дээрх зургуудыг оновчилсноор илүү их дата хэмнэнэ.</translation> <translation id="5726692708398506830">Бүгдийг дэлгэцийн хэмжээгээр томсгох</translation> <translation id="5748802427693696783">Стандарт таб руу шилжүүлсэн</translation> <translation id="5749068826913805084">Файл татахын тулд Chrome-д санах ойд хандах зөвшөөрөл шаардлагатай.</translation> @@ -1322,7 +1321,6 @@ <translation id="8427875596167638501">Урьдчилан үзэх табыг хагас нээсэн</translation> <translation id="8428213095426709021">Тохиргоо</translation> <translation id="8430824733382774043">Зөвхөн дэлгэцийн агшин хуваалцана уу</translation> -<translation id="8431730749911729314">Өөрийн төхөөрөмж дээрх нууц үгнүүдийг Google-н Нууц үгний менежерт хадгалахаас нь өмнө шифрлэнэ үү</translation> <translation id="8438566539970814960">Хайлт болон хөтлөх явцыг сайжруулаарай</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Хэл бэлэн байна. <ph name="APP_NAME" />-г дахин эхлүүлнэ үү.</translation> <translation id="8442258441309440798">Түүх алга байна</translation> @@ -1358,7 +1356,6 @@ <translation id="8560602726703398413">Хавчуургаас унших жагсаалтаа олно уу</translation> <translation id="8562452229998620586">Хадгалагдсан нууц үгнүүд энд гарч ирнэ.</translation> <translation id="856481929701340285">Сайтыг компьютерийн горимоор харах хүсэлт</translation> -<translation id="8569404424186215731"><ph name="DATE" />-с хойш</translation> <translation id="8570677896027847510">Файлыг аюулгүйгээр татах боломжгүй</translation> <translation id="8571213806525832805">Сүүлийн 4 долоо хоног</translation> <translation id="8572344201470131220">Зургийг хуулсан</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 a6c221a..c6acc375 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">पेजवर जा</translation> <translation id="2122601567107267586">ॲप उघडता आले नाही</translation> <translation id="2126426811489709554">Chrome द्वारे समर्थित</translation> -<translation id="2131665479022868825"><ph name="DATA" /> बचत केली</translation> <translation id="2132122640199389833">सर्व लिंक केलेली डिव्हाइस काढून टाका</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> बंद केले</translation> <translation id="2139186145475833000">होम स्क्रीनवर जोडा</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> अपडेट करा</translation> <translation id="3912508018559818924">वेबवरून सर्वोत्तम शोधत आहे…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> सुरू आहे</translation> -<translation id="3925830358619338299">तुमचे पासवर्ड हे Google पासवर्ड व्यवस्थापक यामध्ये सेव्ह केले जाण्यापूर्वी ते तुमच्या डिव्हाइसवर एंक्रिप्ट केले जातात</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">माझा डेटा एकत्र करा</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">तुमची फाइल <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> मध्ये सेव्ह केली जाईल. <ph name="BEGIN_LINK2" />संपादित करा<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">टॅब वर स्विच करा</translation> <translation id="572328651809341494">अलीकडील टॅब</translation> -<translation id="5723735397759933332">HTTPS पेजवरील इमेज ऑप्टिमाइझ करून लाइट मोड आता तुमचा आणखी डेटा वाचवतो.</translation> <translation id="5726692708398506830">पृष्ठावरील प्रत्येकगोष्ट आणखी मोठी करा</translation> <translation id="5748802427693696783">मानक टॅबवर स्विच केले</translation> <translation id="5749068826913805084">Chrome ला फाइल डाउनलोड करण्यासाठी स्टोरेज ॲक्सेस आवश्यक आहे.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">पूर्वावलोकन टॅब अर्धा उघडा आहे</translation> <translation id="8428213095426709021">सेटिंग्ज</translation> <translation id="8430824733382774043">फक्त स्क्रीनशॉट शेअर करा</translation> -<translation id="8431730749911729314">पासवर्ड हे Google पासवर्ड व्यवस्थापक यामध्ये सेव्ह केले जाण्यापूर्वी ते तुमच्या डिव्हाइसवर एंक्रिप्ट करा</translation> <translation id="8438566539970814960">शोध आणि ब्राउझ करणे चांगले करा</translation> <translation id="8439974325294139057"><ph name="LANG" /> - भाषा वापरासाठी तयार आहे, <ph name="APP_NAME" /> रीस्टार्ट करा.</translation> <translation id="8442258441309440798">कोणत्याही बातम्या उपलब्ध नाहीत</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">बुकमार्क मध्ये तुमची वाचन सूची शोधा</translation> <translation id="8562452229998620586">सेव्ह केलेले पासवर्ड येथे दिसून येतील.</translation> <translation id="856481929701340285">डेस्कटॉप साइटची विनंती करा</translation> -<translation id="8569404424186215731"><ph name="DATE" /> पासून</translation> <translation id="8570677896027847510">फाइल सुरक्षितपणे डाउनलोड केली जाऊ शकत नाही</translation> <translation id="8571213806525832805">मागील 4 आठवड्यांमधील</translation> <translation id="8572344201470131220">इमेज कॉपी केली</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 dc79c749..49f33fc8 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Pergi ke halaman</translation> <translation id="2122601567107267586">Tidak dapat membuka apl</translation> <translation id="2126426811489709554">Dikuasakan oleh Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> disimpan</translation> <translation id="2132122640199389833">Alih keluar semua peranti terpaut</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> tertutup</translation> <translation id="2139186145475833000">Tambahkan kepada Skrin utama</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Kemas kini <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Mencari maklumat terbaik daripada web…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> dihidupkan</translation> -<translation id="3925830358619338299">Kata laluan anda disulitkan pada peranti sebelum disimpan ke Pengurus Kata Laluan Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Gabungkan data saya</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Fail anda akan disimpan ke <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Edit<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Beralih Kepada Tab</translation> <translation id="572328651809341494">Tab terbaharu</translation> -<translation id="5723735397759933332">Kini mod Ringkas menjimatkan lebih banyak data dengan mengoptimumkan imej pada halaman HTTPS.</translation> <translation id="5726692708398506830">Jadikan semua yang ada pada halaman lebih besar</translation> <translation id="5748802427693696783">Beralih ke tab standard</translation> <translation id="5749068826913805084">Chrome memerlukan akses storan untuk memuat turun fail.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Tab pratonton separa terbuka</translation> <translation id="8428213095426709021">Tetapan</translation> <translation id="8430824733382774043">Kongsi tangkapan skrin sahaja</translation> -<translation id="8431730749911729314">Sulitkan kata laluan pada peranti anda sebelum kata laluan itu disimpan ke Pengurus Kata Laluan Google</translation> <translation id="8438566539970814960">Mempertingkatkan carian dan penyemakan imbas</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Bahasa sudah sedia, mulakan semula <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Tiada cerita tersedia</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Cari senarai bacaan anda dalam Penanda Halaman</translation> <translation id="8562452229998620586">Kata laluan yang disimpan akan kelihatan di sini.</translation> <translation id="856481929701340285">Minta tapak desktop</translation> -<translation id="8569404424186215731">sejak <ph name="DATE" /></translation> <translation id="8570677896027847510">Fail tidak dapat dimuat turun dengan selamat</translation> <translation id="8571213806525832805">4 minggu terakhir</translation> <translation id="8572344201470131220">Imej Disalin</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 7f46e21..36a3590 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">စာမျက်နှာ သို့သွားရန်</translation> <translation id="2122601567107267586">အက်ပ်ကို ဖွင့်၍မရပါ</translation> <translation id="2126426811489709554">Chrome မှ စွမ်းအင်ထုတ်ပေးပါသည်</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ကို သိမ်းဆည်းပြီးပါပြီ</translation> <translation id="2132122640199389833">လင့်ခ်ချိတ်ထားသည့် စက်အားလုံး ဖယ်ရှားရန်</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> ပိတ်ထား၏</translation> <translation id="2139186145475833000">ပင်မမျက်နှာပြင်သို့ ထည့်ရန်</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> ကို အပ်ဒိတ်လုပ်ပါ</translation> <translation id="3912508018559818924">ဝဘ်မှ အကောင်းဆုံးကို ရှာနေသည်…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ကို ဖွင့်ထားသည်</translation> -<translation id="3925830358619338299">စကားဝှက်များကို ‘Google စကားဝှက်မန်နေဂျာ’ သို့ မသိမ်းမီ သင်၏စက်၌ အသွင်ဝှက်ပြီးပါပြီ</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">ကျွန်ုပ်၏ ဒေတာများကို ပေါင်းပါ</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">သင်၏ဖိုင်ကို <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> သို့ သိမ်းလိုက်ပါမည်။ <ph name="BEGIN_LINK2" />တည်းဖြတ်ရန်<ph name="END_LINK2" />။</translation> <translation id="570347048394355941">တဘ်ပြောင်းရန်</translation> <translation id="572328651809341494">မကြာမီက တဲဘ်များ</translation> -<translation id="5723735397759933332">'အပေါ့စားမုဒ်' က ယခုအခါ HTTPS စာမျက်နှာများပေါ်တွင် ပုံများကို အကောင်းဆုံးပြုပြင်ခြင်းဖြင့် သင့်အတွက် ဒေတာပိုမိုချွေတာပေးနိုင်ပါပြီ။</translation> <translation id="5726692708398506830">စာမျက်နှာပေါ်ရှိ အရာအားလုံးကို ပိုကြီးအောင်လုပ်ရန်</translation> <translation id="5748802427693696783">ပုံမှန်တဘ်များအဖြစ်သို့ ပြောင်းလိုက်ပါပြီ</translation> <translation id="5749068826913805084">Chrome သည် ဖိုင်များကို ဒေါင်းလုဒ် လုပ်ရန် သိုလှောင်ခန်းကို သုံးရန် လိုအပ်သည်။</translation> @@ -1322,7 +1319,6 @@ <translation id="8427875596167638501">အစမ်းကြည့်ရှုမှုတဘ်ကို တစ်ဝက်ဖွင့်ထားသည်</translation> <translation id="8428213095426709021">ဆက်တင်များ</translation> <translation id="8430824733382774043">ဖန်သားပြင်ဓာတ်ပုံသီးသန့် မျှဝေပါ</translation> -<translation id="8431730749911729314">စကားဝှက်များကို ‘Google စကားဝှက်မန်နေဂျာ’ သို့ မသိမ်းမီ သင်၏စက်၌ အသွင်ဝှက်ပါ</translation> <translation id="8438566539970814960">ရှာဖွေမှုနှင့် ဖွင့်ကြည့်မှု ပိုမိုကောင်းမွန်လာအောင် လုပ်ခြင်း</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ဘာသာစကား အသင့်ဖြစ်ပြီ၊ <ph name="APP_NAME" /> ပြန်စပါ။</translation> <translation id="8442258441309440798">သတင်းဆောင်းပါးများ မရနိုင်ပါ</translation> @@ -1358,7 +1354,6 @@ <translation id="8560602726703398413">'လိပ်စာများ' တွင် သင်၏ဖတ်ရန်စာရင်းကို ရှာပါ</translation> <translation id="8562452229998620586">သိမ်းဆည်းထားသော စကားဝှက်များ ဤတွင် ပေါ်လာလိမ့်မည်။</translation> <translation id="856481929701340285">ဒက်စတော့ဆိုက် တောင်းရန်</translation> -<translation id="8569404424186215731"><ph name="DATE" /> ကတည်းက</translation> <translation id="8570677896027847510">ဖိုင်ကို လုံခြုံစွာ ဒေါင်းလုဒ်လုပ်၍မရပါ</translation> <translation id="8571213806525832805">ပြီးခဲ့သည့် ၄ ပတ်</translation> <translation id="8572344201470131220">ပုံကို ကူးယူပြီး</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 e7546db..b50174fe 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">पृष्ठमा जानुहोस्</translation> <translation id="2122601567107267586">एप खोल्न सकिएन</translation> <translation id="2126426811489709554">Chrome द्वारा संचालित</translation> -<translation id="2131665479022868825"><ph name="DATA" /> बचत गरियो</translation> <translation id="2132122640199389833">लिंक गरिएका सबै डिभाइस हटाउनुहोस्</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> बन्द भयो</translation> <translation id="2139186145475833000">होम स्क्रिनमा हाल्नुहोस्</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> अपडेट गर्नुहोस्</translation> <translation id="3912508018559818924">वेबका उत्कृष्ट सामग्रीहरू फेला पार्दै…</translation> <translation id="3924911262913579434">'<ph name="SAFE_BROWSING_MODE" />' अन छ</translation> -<translation id="3925830358619338299">तपाईंका पासवर्डहरू तपाईंको डिभाइसमा इन्क्रिप्ट गरेपछि मात्र Google पासवर्ड म्यानेजरमा सेभ गरिन्छ</translation> <translation id="3927692899758076493">स्यान्स सेरिफ</translation> <translation id="3928666092801078803">मेरो डेटालाई संयोजन गर्नुहोस्</translation> <translation id="3934366560681368531">“</translation> @@ -807,7 +805,6 @@ <translation id="5697688514913266141">तपाईंका फाइलहरू <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> मा सुरक्षित गरिने छन्। <ph name="BEGIN_LINK2" />सुरक्षित गरिने स्थान सम्पादन गर्नुहोस्<ph name="END_LINK2" />।</translation> <translation id="570347048394355941">ट्याब प्रयोग गर्न थाल्नुहोस्</translation> <translation id="572328651809341494">हालका ट्याबहरू</translation> -<translation id="5723735397759933332">लाइट मोडले अब HTTPS पृष्ठमा भएका फोटोहरू अप्टिमाइज गरी तपाईंले गर्ने डेटाको खपत अझ कम गर्छ।</translation> <translation id="5726692708398506830">पृष्ठमा रहेको सबै कुरालाई अझ ठुलो बनाउनुहोस्</translation> <translation id="5748802427693696783">मानक ट्याबहरूमा स्विच गरियो</translation> <translation id="5749068826913805084">Chromeलाई फाइलहरु डाउनलोड गर्न भण्डारणको पहुँच आवश्यक छ ।</translation> @@ -1322,7 +1319,6 @@ <translation id="8427875596167638501">पूर्वावलोकन ट्याब आधा खुला छ</translation> <translation id="8428213095426709021">सेटिङहरू</translation> <translation id="8430824733382774043">स्क्रिनसट मात्र सेयर गरियोस्</translation> -<translation id="8431730749911729314">Google पासवर्ड म्यानेजरमा पासवर्डहरू सेभ गर्नुअघि ती पासवर्डहरू आफ्नो डिभाइसमा इन्क्रिप्ट गर्नुहोस्</translation> <translation id="8438566539970814960">खोज तथा ब्राउजिङलाई अझ राम्रो बनाउनुहोस्</translation> <translation id="8439974325294139057"><ph name="LANG" /> - भाषा तयार छ, <ph name="APP_NAME" /> रिस्टार्ट गर्नुहोस्।</translation> <translation id="8442258441309440798">कुनै पनि समाचार उपलब्ध छैन</translation> @@ -1358,7 +1354,6 @@ <translation id="8560602726703398413">आफ्नो अध्ययन सूची बुकमार्कहरूमा फेला पार्नुहोस्</translation> <translation id="8562452229998620586">बचत गरिएका पासवर्डहरू यहाँ देखिनेछन्।</translation> <translation id="856481929701340285">डेस्कटप साइट अनुरोध गर्नुहोस्</translation> -<translation id="8569404424186215731"><ph name="DATE" /> देखि</translation> <translation id="8570677896027847510">यो फाइल सुरक्षित रूपमा डाउनलोड गर्न सकिँदैन</translation> <translation id="8571213806525832805">पछिल्ला ४ हप्ता</translation> <translation id="8572344201470131220">फोटो कपी गरियो</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 2c1a34ec..edf6024 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Ga naar pagina</translation> <translation id="2122601567107267586">Kan app niet openen</translation> <translation id="2126426811489709554">Mogelijk gemaakt door Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> bespaard</translation> <translation id="2132122640199389833">Alle gekoppelde apparaten verwijderen</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> gesloten</translation> <translation id="2139186145475833000">Toevoegen aan startscherm</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> updaten</translation> <translation id="3912508018559818924">We zoeken naar het beste op internet…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> staat aan</translation> -<translation id="3925830358619338299">Je wachtwoorden worden versleuteld op je apparaat voordat ze worden opgeslagen in Google Wachtwoordmanager</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Mijn gegevens combineren</translation> <translation id="3934366560681368531">'</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Je bestand wordt opgeslagen in <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Bewerken<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Overschakelen naar tabblad</translation> <translation id="572328651809341494">Recente tabbladen</translation> -<translation id="5723735397759933332">In de Lite-versie kun je nu meer data besparen door afbeeldingen op HTTPS-pagina's te optimaliseren.</translation> <translation id="5726692708398506830">Alles op de pagina vergroten</translation> <translation id="5748802427693696783">Overgeschakeld naar standaardtabbladen</translation> <translation id="5749068826913805084">Chrome heeft toegang tot de opslag nodig om deze bestanden te kunnen downloaden.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Voorbeeldtabblad is half geopend</translation> <translation id="8428213095426709021">Instellingen</translation> <translation id="8430824733382774043">Alleen screenshot delen</translation> -<translation id="8431730749911729314">Versleutel wachtwoorden op je apparaat voordat ze worden opgeslagen in Google Wachtwoordmanager</translation> <translation id="8438566539970814960">Zoekopdrachten en browsefunctionaliteit verbeteren</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Taal klaar, start <ph name="APP_NAME" /> opnieuw op.</translation> <translation id="8442258441309440798">Geen artikelen beschikbaar</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Bekijk je leeslijst in Bookmarks</translation> <translation id="8562452229998620586">Opgeslagen wachtwoorden zie je hier.</translation> <translation id="856481929701340285">Desktopversie opvragen</translation> -<translation id="8569404424186215731">sinds <ph name="DATE" /></translation> <translation id="8570677896027847510">Bestand kan niet beveiligd worden gedownload</translation> <translation id="8571213806525832805">Afgelopen 4 weken</translation> <translation id="8572344201470131220">Afbeelding gekopieerd</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 9a8bc99..2033622 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Gå til side</translation> <translation id="2122601567107267586">Kunne ikke åpne appen</translation> <translation id="2126426811489709554">Drevet av Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> spart</translation> <translation id="2132122640199389833">Fjern alle tilknyttede enheter</translation> <translation id="213279576345780926">Lukket <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Legg til på startsiden</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Oppdater <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Vi finner det beste fra nettet …</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> er på</translation> -<translation id="3925830358619338299">Passordene dine krypteres på enheten før de lagres i Google Passordlagring</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Kombiner dataene mine</translation> <translation id="3934366560681368531">«</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Filen blir lagret i <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Endre<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Bytt til fane</translation> <translation id="572328651809341494">Nylige faner</translation> -<translation id="5723735397759933332">Forenklet modus sparer nå mer data ved å optimalisere bilder på HTTPS-sider.</translation> <translation id="5726692708398506830">Gjør alt på siden større</translation> <translation id="5748802427693696783">Byttet til standardfaner</translation> <translation id="5749068826913805084">Chrome må ha lagringstilgang for å laste ned filer.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Fanen for forhåndsvisning er halvveis åpnet</translation> <translation id="8428213095426709021">Innstillinger</translation> <translation id="8430824733382774043">Del kun skjermdump</translation> -<translation id="8431730749911729314">Krypter passord på enheten før de lagres i Google Passordlagring</translation> <translation id="8438566539970814960">Gjør søking og surfing bedre</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Språket er klart. Start <ph name="APP_NAME" /> på nytt</translation> <translation id="8442258441309440798">Ingen nyhetssaker er tilgjengelige</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Finn leselisten din i Bokmerker</translation> <translation id="8562452229998620586">Lagrede passord listes opp her.</translation> <translation id="856481929701340285">Bruk skrivebordsversjon</translation> -<translation id="8569404424186215731">siden <ph name="DATE" /></translation> <translation id="8570677896027847510">Filen kan ikke lastes ned sikkert</translation> <translation id="8571213806525832805">Siste 4 uker</translation> <translation id="8572344201470131220">Bildet ble kopiert</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 cad4ccaa..09d49fdb4 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">ପୃଷ୍ଠାକୁ ଯାଆନ୍ତୁ</translation> <translation id="2122601567107267586">ଆପ୍କୁ ଖୋଲି ହେଲା ନାହିଁ</translation> <translation id="2126426811489709554">Chrome ଦ୍ୱାରା ସମର୍ଥିତ</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ସେଭ୍ ହୋଇଛି</translation> <translation id="2132122640199389833">ସମସ୍ତ ଲିଙ୍କ କରାଯାଇଥିବା ଡିଭାଇସକୁ କାଢ଼ି ଦିଅନ୍ତୁ</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" />ବନ୍ଦ ହୋଇଯାଇଛି</translation> <translation id="2139186145475833000">ହୋମ୍ ସ୍କ୍ରିନରେ ଯୋଗ କରନ୍ତୁ</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> ଅପଡେଟ୍ କରନ୍ତୁ</translation> <translation id="3912508018559818924">ୱେବ୍ରୁ ସର୍ବୋତ୍ତମ ଆଇଟମ୍ ଖୋଜିବା…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ଚାଲୁ ଅଛି</translation> -<translation id="3925830358619338299">ଆପଣଙ୍କର ପାସୱାର୍ଡକୁ Google ପାସୱାର୍ଡ ମ୍ୟାନେଜରରେ ସେଭ କରାଯିବା ପୂର୍ବରୁ ତାହାକୁ ଆପଣଙ୍କ ଡିଭାଇସରେ ଏନକ୍ରିପ୍ଟ କରାଯାଏ</translation> <translation id="3927692899758076493">ସାନ୍ସ-ସେରିଫ୍</translation> <translation id="3928666092801078803">ମୋର ଡାଟା ଏକାଠି କରନ୍ତୁ</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">ଆପଣଙ୍କ ଫାଇଲ୍ <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />ରେ ସେଭ୍ କରାଯିବ। <ph name="BEGIN_LINK2" />ସମ୍ପାଦନ କରନ୍ତୁ<ph name="END_LINK2" />।</translation> <translation id="570347048394355941">ଟାବକୁ ସ୍ୱିଚ୍ କରନ୍ତୁ</translation> <translation id="572328651809341494">ନିକଟର ଟାବ୍ଗୁଡ଼ିକ</translation> -<translation id="5723735397759933332">Lite ମୋଡ୍ ଏବେ HTTPS ପୃଷ୍ଠାଗୁଡ଼ିକରେ ଛବିଗୁଡ଼ିକୁ ଅପ୍ଟିମାଇଜ୍ କରି, ଆପଣଙ୍କ ପାଇଁ ଅଧିକ ଡାଟା ସେଭ୍ କରୁଛି।</translation> <translation id="5726692708398506830">ପୃଷ୍ଠାରେ ସବୁକିଛି ବୃହତ୍ତର କରନ୍ତୁ</translation> <translation id="5748802427693696783">ସାଧାରଣ ଟାବ୍ଗୁଡ଼ିକୁ ସ୍ୱିଚ୍ କରାଗଲା</translation> <translation id="5749068826913805084">ଫାଇଲ୍ଗୁଡ଼ିକ ଡାଉନ୍ଲୋଡ୍ କରିବାକୁ Chrome ଷ୍ଟୋରେଜ୍ ଆକ୍ସେସ୍ ଆବଶ୍ୟକ କରେ।</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">ପ୍ରିଭ୍ୟୁ ଟାବ୍ ଅଧା ଖୋଲା ଅଛି</translation> <translation id="8428213095426709021">ସେଟିଂସ୍</translation> <translation id="8430824733382774043">କେବଳ ସ୍କ୍ରିନସଟ୍ ସେୟାର୍ କରନ୍ତୁ</translation> -<translation id="8431730749911729314">ପାସୱାର୍ଡଗୁଡ଼ିକୁ Google ପାସୱାର୍ଡ ମ୍ୟାନେଜରରେ ସେଭ କରାଯିବା ପୂର୍ବରୁ ସେଗୁଡ଼ିକୁ ଆପଣଙ୍କ ଡିଭାଇସରେ ଏନକ୍ରିପ୍ଟ କରନ୍ତୁ</translation> <translation id="8438566539970814960">ସନ୍ଧାନ ଓ ବ୍ରାଉଜିଂକୁ ଉନ୍ନତ କରନ୍ତୁ</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ଭାଷା ପ୍ରସ୍ତୁତ ଅଛି, <ph name="APP_NAME" />କୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ।</translation> <translation id="8442258441309440798">କୌଣସି ଷ୍ଟୋରୀ ଉପଲବ୍ଧ ନାହିଁ</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">ବୁକମାର୍କରେ ଆପଣଙ୍କ ପଢ଼ିବା ତାଲିକା ଖୋଜନ୍ତୁ</translation> <translation id="8562452229998620586">ସେଭ୍ ଥିବା ପାସ୍ୱର୍ଡ ଏଠାରେ ଦେଖାଯିବ।</translation> <translation id="856481929701340285">ଡେସ୍କଟପ ସାଇଟ ପାଇଁ ଅନୁରୋଧ କର</translation> -<translation id="8569404424186215731"><ph name="DATE" /> ଠାରୁ</translation> <translation id="8570677896027847510">ଫାଇଲକୁ ସୁରକ୍ଷିତ ଭାବେ ଡାଉନଲୋଡ କରାଯାଇପାରିବ ନାହିଁ</translation> <translation id="8571213806525832805">ବିଗତ 4 ସପ୍ତାହ</translation> <translation id="8572344201470131220">ଛବି କପି କରାଯାଇଛି</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 0c1a0fd..1edd98f 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">ਪੰਨੇ 'ਤੇ ਜਾਓ</translation> <translation id="2122601567107267586">ਐਪ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ</translation> <translation id="2126426811489709554">Google ਵੱਲੋਂ ਸੰਚਾਲਿਤ</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ਦੀ ਬਚਤ ਕੀਤੀ ਗਈ</translation> <translation id="2132122640199389833">ਲਿੰਕ ਕੀਤੇ ਸਾਰੇ ਡੀਵਾਈਸਾਂ ਨੂੰ ਹਟਾਓ</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> ਬੰਦ ਕੀਤਾ</translation> <translation id="2139186145475833000">ਹੋਮ ਸਕ੍ਰੀਨ 'ਤੇ ਸ਼ਾਮਲ ਕਰੋ</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ</translation> <translation id="3912508018559818924">ਵੈੱਬ ਤੋਂ ਬਿਹਤਰੀਨ ਜਾਣਕਾਰੀ ਲੱਭ ਰਹੇ ਹਾਂ…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ਚਾਲੂ ਹੈ</translation> -<translation id="3925830358619338299">Google ਪਾਸਵਰਡ ਪ੍ਰਬੰਧਕ 'ਤੇ ਰੱਖਿਅਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ 'ਤੇ ਇਨਕ੍ਰਿਪਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">ਮੇਰੇ ਡਾਟੇ ਨੂੰ ਮਿਲਾਓ</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">ਤੁਹਾਡੀ ਫ਼ਾਈਲ <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤੀ ਜਾਵੇਗੀ। <ph name="BEGIN_LINK2" />ਸੰਪਾਦਨ ਕਰੋ<ph name="END_LINK2" />।</translation> <translation id="570347048394355941">ਟੈਬ 'ਤੇ ਜਾਓ</translation> <translation id="572328651809341494">ਹਾਲੀਆ ਟੈਬਸ</translation> -<translation id="5723735397759933332">ਲਾਈਟ ਮੋਡ ਹੁਣ HTTPS ਪੰਨਿਆਂ 'ਤੇ ਚਿੱਤਰਾਂ ਨੂੰ ਸੁਯੋਗ ਬਣਾ ਕੇ ਤੁਹਾਡੇ ਲਈ ਹੋਰ ਡਾਟਾ ਬਚਾਉਂਦਾ ਹੈ।</translation> <translation id="5726692708398506830">ਪੰਨੇ 'ਤੇ ਹਰੇਕ ਚੀਜ਼ ਨੂੰ ਵਧੇਰੇ ਵੱਡਾ ਬਣਾਓ</translation> <translation id="5748802427693696783">ਬਦਲਕੇ ਸਧਾਰਨ ਟੈਬਾਂ ਲਿਆਂਦੀਆਂ ਗਈਆਂ</translation> <translation id="5749068826913805084">ਫ਼ਾਈਲਾਂ ਡਾਉਨਲੋਡ ਕਰਨ ਲਈ Chrome ਨੂੰ ਸਟੋਰੋਜ ਤੱਕ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">ਪੂਰਵ-ਝਲਕ ਟੈਬ ਅੱਧੀ ਖੁੱਲ੍ਹੀ ਹੋਈ ਹੈ</translation> <translation id="8428213095426709021">ਸੈਟਿੰਗਾਂ</translation> <translation id="8430824733382774043">ਸਿਰਫ਼ ਸਕ੍ਰੀਨਸ਼ਾਟ ਨੂੰ ਸਾਂਝਾ ਕਰੋ</translation> -<translation id="8431730749911729314">Google ਪਾਸਵਰਡ ਪ੍ਰਬੰਧਕ 'ਤੇ ਪਾਸਵਰਡਾਂ ਦੇ ਰੱਖਿਅਤ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਉਨ੍ਹਾਂ ਨੂੰ ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ ਇਨਕ੍ਰਿਪਟ ਕਰੋ</translation> <translation id="8438566539970814960">ਖੋਜਾਂ ਅਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਬਿਹਤਰ ਬਣਾਓ</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ਭਾਸ਼ਾ ਤਿਆਰ ਹੈ, <ph name="APP_NAME" /> ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ।</translation> <translation id="8442258441309440798">ਕੋਈ ਕਹਾਣੀ ਉਪਲਬਧ ਨਹੀਂ ਹੈ</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">ਆਪਣੀ ਪੜ੍ਹਨ-ਸੂਚੀ ਨੂੰ ਬੁੱਕਮਾਰਕ ਵਿੱਚ ਲੱਭੋ</translation> <translation id="8562452229998620586">ਸੁਰੱਖਿਅਤ ਕੀਤੇ ਪਾਸਵਰਡ ਇੱਥੇ ਦਿਖਾਈ ਦੇਣਗੇ।</translation> <translation id="856481929701340285">ਬੇਨਤੀ ਡੈਸਕਟਾਪ ਸਾਈਟ</translation> -<translation id="8569404424186215731"><ph name="DATE" /> ਤੋਂ</translation> <translation id="8570677896027847510">ਫ਼ਾਈਲ ਨੂੰ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation> <translation id="8571213806525832805">ਪਿਛਲੇ 4 ਹਫ਼ਤੇ</translation> <translation id="8572344201470131220">ਚਿੱਤਰ ਕਾਪੀ ਕੀਤਾ ਗਿਆ</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 763c6664..be156b9 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Przejdź do strony</translation> <translation id="2122601567107267586">Nie udało się otworzyć aplikacji</translation> <translation id="2126426811489709554">Technologia Chrome</translation> -<translation id="2131665479022868825">Zaoszczędzono <ph name="DATA" /></translation> <translation id="2132122640199389833">Usuń wszystkie połączone urządzenia</translation> <translation id="213279576345780926">Zamknięto: <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodaj do ekranu głównego</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Zaktualizuj: <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Szukam najlepszych treści w internecie…</translation> <translation id="3924911262913579434">Tryb <ph name="SAFE_BROWSING_MODE" /> jest włączony</translation> -<translation id="3925830358619338299">Przed zapisaniem w menedżerze haseł Google hasła są szyfrowane na urządzeniu</translation> <translation id="3927692899758076493">Bezszeryfowa</translation> <translation id="3928666092801078803">Połącz moje dane</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Plik zostanie zapisany w katalogu <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Edytuj<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Przełącz na kartę</translation> <translation id="572328651809341494">Ostatnie karty</translation> -<translation id="5723735397759933332">Wersja uproszczona oszczędza teraz więcej danych dzięki optymalizacji obrazów na stronach HTTPS.</translation> <translation id="5726692708398506830">Powiększ całą zawartość strony</translation> <translation id="5748802427693696783">Przełączono na karty standardowe</translation> <translation id="5749068826913805084">Chrome musi mieć dostęp do pamięci, by pobierać pliki.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Karta podglądu jest otwarta w połowie</translation> <translation id="8428213095426709021">Ustawienia</translation> <translation id="8430824733382774043">Udostępnij tylko zrzut ekranu</translation> -<translation id="8431730749911729314">Zanim zapiszesz hasła w menedżerze haseł Google, zaszyfruj je na urządzeniu</translation> <translation id="8438566539970814960">Ulepsz wyszukiwanie i przeglądanie</translation> <translation id="8439974325294139057"><ph name="LANG" /> – ten język jest gotowy. Uruchom ponownie aplikację <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Brak artykułów</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Swoją listę Do przeczytania znajdziesz w zakładkach</translation> <translation id="8562452229998620586">Tutaj pojawią się zapisane hasła.</translation> <translation id="856481929701340285">Wersja na komputer</translation> -<translation id="8569404424186215731">od <ph name="DATE" /></translation> <translation id="8570677896027847510">Nie można pobrać pliku w bezpieczny sposób</translation> <translation id="8571213806525832805">Ostatnie 4 tygodnie</translation> <translation id="8572344201470131220">Obraz został skopiowany</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 6c1b5cd9..8cc5d5d 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Ir para a página</translation> <translation id="2122601567107267586">Não foi possível abrir o aplicativo</translation> <translation id="2126426811489709554">Em execução no Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> economizado(s)</translation> <translation id="2132122640199389833">Remover todos os dispositivos vinculados</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> fechada</translation> <translation id="2139186145475833000">Adicionar à tela inicial</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Atualizar <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Procurando o melhor da Web…</translation> <translation id="3924911262913579434">O modo <ph name="SAFE_BROWSING_MODE" /> está ativado</translation> -<translation id="3925830358619338299">Suas senhas são criptografadas no dispositivo antes de serem salvas no Gerenciador de senhas do Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Integrar meus dados</translation> <translation id="3934366560681368531">"</translation> @@ -809,7 +807,6 @@ <translation id="5697688514913266141">O arquivo será salvo em <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Editar<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Alternar para a guia</translation> <translation id="572328651809341494">Guias recentes</translation> -<translation id="5723735397759933332">Agora, o Modo Lite economiza mais dados para você com a otimização de imagens em páginas HTTPS.</translation> <translation id="5726692708398506830">Aumentar tudo na página</translation> <translation id="5748802427693696783">Alternada para guias padrão</translation> <translation id="5749068826913805084">O Chrome precisa de acesso para fazer o download e armazenar arquivos.</translation> @@ -1324,7 +1321,6 @@ <translation id="8427875596167638501">A guia "Visualizar" está parcialmente aberta</translation> <translation id="8428213095426709021">Configurações</translation> <translation id="8430824733382774043">Compartilhar apenas a captura de tela</translation> -<translation id="8431730749911729314">Criptografe as senhas no dispositivo antes que elas sejam salvas no Gerenciador de senhas do Google</translation> <translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation> <translation id="8439974325294139057"><ph name="LANG" />: idioma pronto. Reinicie o <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Nenhuma matéria disponível</translation> @@ -1360,7 +1356,6 @@ <translation id="8560602726703398413">Encontre sua lista de leitura nos Favoritos</translation> <translation id="8562452229998620586">As senhas salvas aparecerão aqui.</translation> <translation id="856481929701340285">Versão para desktop</translation> -<translation id="8569404424186215731">desde <ph name="DATE" /></translation> <translation id="8570677896027847510">Não é possível salvar o arquivo com segurança</translation> <translation id="8571213806525832805">Últimas quatro semanas</translation> <translation id="8572344201470131220">Imagem copiada</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 9735d13..bae2f45 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Ir para a página</translation> <translation id="2122601567107267586">Não foi possível abrir a aplicação.</translation> <translation id="2126426811489709554">Com tecnologia do Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> guardado(s)</translation> <translation id="2132122640199389833">Remover todos os dispositivos associados</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> fechado</translation> <translation id="2139186145475833000">Adicionar ao ecrã principal</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Atualizar <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">A procurar o melhor da Web…</translation> <translation id="3924911262913579434">A funcionalidade <ph name="SAFE_BROWSING_MODE" /> está ativada.</translation> -<translation id="3925830358619338299">As palavras-passe são encriptadas no seu dispositivo antes de serem guardadas no Gestor de palavras-passe da Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Combinar os meus dados</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">O ficheiro será guardado em <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Edite-o<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Mudar para o separador</translation> <translation id="572328651809341494">Separadores recentes</translation> -<translation id="5723735397759933332">Agora, o Modo Lite guarda mais dados ao otimizar imagens em páginas HTTPS.</translation> <translation id="5726692708398506830">Aumentar o tamanho de todos os itens na página</translation> <translation id="5748802427693696783">Mudado para separadores padrão</translation> <translation id="5749068826913805084">O Chrome necessita de acesso ao armazenamento para transferir ficheiros.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">O separador Pré-visualização está aberto até meio.</translation> <translation id="8428213095426709021">Definições</translation> <translation id="8430824733382774043">Apenas partilhar captura de ecrã</translation> -<translation id="8431730749911729314">Encripte as palavras-passe no seu dispositivo antes de serem guardadas no Gestor de palavras-passe da Google</translation> <translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Idioma pronto, reinicie a app <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Nenhuma história disponível</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Encontre a sua lista de leitura nos Marcadores.</translation> <translation id="8562452229998620586">As palavras-passe guardadas aparecem aqui.</translation> <translation id="856481929701340285">Versão para computador</translation> -<translation id="8569404424186215731">desde <ph name="DATE" /></translation> <translation id="8570677896027847510">Não é possível transferir o ficheiro em segurança</translation> <translation id="8571213806525832805">Últimas 4 semanas</translation> <translation id="8572344201470131220">Imagem copiada.</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 3ad7394..197933d 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Accesează pagina</translation> <translation id="2122601567107267586">Aplicația nu poate fi deschisă</translation> <translation id="2126426811489709554">Afișată de Chrome</translation> -<translation id="2131665479022868825">Date economisite: <ph name="DATA" /></translation> <translation id="2132122640199389833">Elimină toate dispozitivele conectate</translation> <translation id="213279576345780926">Fila <ph name="TAB_TITLE" /> a fost închisă</translation> <translation id="2139186145475833000">Adaugă pe ecran pornire</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Actualizează <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Se caută tot ce e mai bun de pe web…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> este activă</translation> -<translation id="3925830358619338299">Parolele tale se criptează pe dispozitiv înainte să se salveze în Managerul de parole Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Combină datele</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Fișierul va fi salvat în <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Modifică<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Comută la fila</translation> <translation id="572328651809341494">File recente</translation> -<translation id="5723735397759933332">Modul Lite economisește acum mai multe date optimizând imaginile din paginile HTTPS.</translation> <translation id="5726692708398506830">Mărește întregul conținut al paginii</translation> <translation id="5748802427693696783">Ai comutat la filele standard</translation> <translation id="5749068826913805084">Pentru a descărca fișiere, Chrome necesită acces la stocare.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Fila de previzualizare este pe jumătate deschisă</translation> <translation id="8428213095426709021">Setări</translation> <translation id="8430824733382774043">Trimite numai captura de ecran</translation> -<translation id="8431730749911729314">Criptează parolele pe dispozitiv înainte să se salveze în Managerul de parole Google</translation> <translation id="8438566539970814960">Îmbunătățește căutările și navigarea</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Limba este gata, repornește <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Nu sunt disponibile subiecte</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Accesează lista de lectură în marcaje</translation> <translation id="8562452229998620586">Parolele salvate vor fi afișate aici.</translation> <translation id="856481929701340285">Versiune site desktop</translation> -<translation id="8569404424186215731">începând cu <ph name="DATE" /></translation> <translation id="8570677896027847510">Fișierul nu se poate descărca în siguranță</translation> <translation id="8571213806525832805">Ultimele 4 săptămâni</translation> <translation id="8572344201470131220">Imaginea a fost copiată</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 44882ca..e6923027 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Перейти на страницу</translation> <translation id="2122601567107267586">Не удалось открыть приложение</translation> <translation id="2126426811489709554">Технологии Chrome</translation> -<translation id="2131665479022868825">Сэкономлено: <ph name="DATA" /></translation> <translation id="2132122640199389833">Удалить все связанные устройства</translation> <translation id="213279576345780926">Вкладка "<ph name="TAB_TITLE" />" закрыта.</translation> <translation id="2139186145475833000">Добавить на гл. экран</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Обновить: <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Загрузка данных из Интернета…</translation> <translation id="3924911262913579434">Включен режим "<ph name="SAFE_BROWSING_MODE" />"</translation> -<translation id="3925830358619338299">Ваши пароли шифруются на устройстве и только потом сохраняются в Диспетчере паролей Google.</translation> <translation id="3927692899758076493">Без засечек</translation> <translation id="3928666092801078803">Объединить данные</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Куда будет сохранен файл: <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Изменить<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Переключиться на вкладку</translation> <translation id="572328651809341494">Недавние вкладки</translation> -<translation id="5723735397759933332">Упрощенный режим позволяет экономить больше трафика благодаря оптимизации изображений на страницах с поддержкой HTTPS.</translation> <translation id="5726692708398506830">Увеличить масштаб страницы</translation> <translation id="5748802427693696783">Переключено на обычные вкладки</translation> <translation id="5749068826913805084">Для скачивания файлов браузеру Chrome требуется доступ к хранилищу.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Вкладка предпросмотра открыта на половину высоты</translation> <translation id="8428213095426709021">Настройки</translation> <translation id="8430824733382774043">Поделиться только скриншотом</translation> -<translation id="8431730749911729314">Шифруйте пароли на устройстве, прежде чем они будут сохраняться в Диспетчере паролей Google.</translation> <translation id="8438566539970814960">Помогать улучшить просмотр страниц и поиск</translation> <translation id="8439974325294139057"><ph name="LANG" /> – языковой пакет скачан. Перезапустите <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Нет рекомендаций</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Список для чтения находится в закладках</translation> <translation id="8562452229998620586">Здесь будут показаны сохраненные пароли.</translation> <translation id="856481929701340285">Полная версия</translation> -<translation id="8569404424186215731">с <ph name="DATE" /></translation> <translation id="8570677896027847510">Невозможно безопасно скачать файл</translation> <translation id="8571213806525832805">Последние 4 недели</translation> <translation id="8572344201470131220">Изображение скопировано.</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 26c0422..8fbce6d 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">පිටුවට යන්න</translation> <translation id="2122601567107267586">යෙදුම විවෘත කළ නොහැකි විය</translation> <translation id="2126426811489709554">Chrome විසින් බලගන්වන ලද</translation> -<translation id="2131665479022868825"><ph name="DATA" /> සුරැකිණි</translation> <translation id="2132122640199389833">සියලුම සබැඳි කළ උපාංග ඉවත් කරන්න</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> වසන ලදී</translation> <translation id="2139186145475833000">මුල් පිටු තිරයට එක් කරන්න</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Chrome සංචාලනය කරන්න</translation> <translation id="5487521232677179737">දත්ත හිස් කරන්නෙ</translation> <translation id="549025011754480756">ඔබගේ කටහඬ සමගින් සොයන ආකාරය</translation> +<translation id="5492637351392383067">උපාංගයේ සංකේතනය</translation> <translation id="5514904542973294328">මෙම උපාංගයේ පරිපාලක විසින් අබල කර ඇත</translation> <translation id="5515439363601853141">ඔබේ මුරපදය බැලීමට අගුළු හරින්න</translation> <translation id="5517095782334947753">ඔබට <ph name="FROM_ACCOUNT" /> වෙතින් පිටුසන්, ඉතිහාසය, මුරපද, සහ වෙනත් සැකසීම් ඇත.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">ඔබගේ ගොනුව <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> වෙත සුරකිනු ඇත. <ph name="BEGIN_LINK2" />සංස්කරණය කරන්න<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">පටිත්තට මාරු වන්න</translation> <translation id="572328651809341494">මෑතකාලීන පටිති</translation> -<translation id="5723735397759933332">සැහැල්ලු ප්රකාරය දැන් HTTPS පිටුවල රූප ප්රශස්ත කිරීමෙන් ඔබට තව දත්ත ඉතිරි කර දෙයි.</translation> <translation id="5726692708398506830">පිටුවේ සැම දෙයක්ම වඩා විශාල කරන්න</translation> <translation id="5748802427693696783">සම්මත ටැබ වෙත මාරු විය</translation> <translation id="5749068826913805084">Chrome හට ගොනු බාගැනීමට ආචයන ප්රවේශය අවශ්යයි.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">පිටුසන් තුළ ඔබගේ කියවීම් ලැයිස්තුව සොයා ගන්න</translation> <translation id="8562452229998620586">සුරැකි මුරපද මෙහි පෙන්වෙනු ඇත.</translation> <translation id="856481929701340285">ඩෙක්ස්ටොප් අඩවිය ඉල්ලන්න</translation> -<translation id="8569404424186215731"><ph name="DATE" /> සිට</translation> <translation id="8570677896027847510">ගොනුව සුරක්ෂිතව බාගැනීමට නොහැකිය</translation> <translation id="8571213806525832805">පසුගිය සති 4</translation> <translation id="8572344201470131220">රූපය පිටපත් කරන ලදි</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 92aea56..01eab70 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Prejdite na stránku</translation> <translation id="2122601567107267586">Aplikáciu sa nepodarilo otvoriť</translation> <translation id="2126426811489709554">Používa technológiu prehliadača Chrome</translation> -<translation id="2131665479022868825">Uložené: <ph name="DATA" /></translation> <translation id="2132122640199389833">Odstrániť všetky prepojené zariadenia</translation> <translation id="213279576345780926">Karta „<ph name="TAB_TITLE" />“ je zavretá</translation> <translation id="2139186145475833000">Pridať na plochu</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Aktualizovať službu <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Vyhľadáva sa to najlepšie z internetu…</translation> <translation id="3924911262913579434">Je zapnutý režim <ph name="SAFE_BROWSING_MODE" /></translation> -<translation id="3925830358619338299">Heslá sú šifrované v zariadení ešte pred ich uložením do správcu hesiel Google</translation> <translation id="3927692899758076493">Bezpätkové</translation> <translation id="3928666092801078803">Spojiť moje dáta</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Váš súbor bude uložený do adresára <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Upraviť<ph name="END_LINK2" /></translation> <translation id="570347048394355941">Prepnúť na kartu</translation> <translation id="572328651809341494">Nedávne karty</translation> -<translation id="5723735397759933332">Zjednodušený režim teraz šetrí viac dát optimalizovaním obrázkov na stránkach HTTPS.</translation> <translation id="5726692708398506830">Zväčšenie obsahu na stránke</translation> <translation id="5748802427693696783">Prepnuté na štandardné karty</translation> <translation id="5749068826913805084">Chrome potrebuje na sťahovanie súborov prístup k úložisku.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Karta ukážky je dopoly otvorená</translation> <translation id="8428213095426709021">Nastavenia</translation> <translation id="8430824733382774043">Zdieľať iba snímku obrazovky</translation> -<translation id="8431730749911729314">Zašifrujte si heslá v zariadení ešte pred ich uložením do správcu hesiel Google</translation> <translation id="8438566539970814960">Zlepšovať vyhľadávanie a prehliadanie</translation> <translation id="8439974325294139057"><ph name="LANG" /> – jazyk je k dispozícii. Reštartujte <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">K dispozícii nie sú žiadne príbehy</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Čitateľský zoznam nájdete v záložkách</translation> <translation id="8562452229998620586">Tu sa zobrazia uložené heslá.</translation> <translation id="856481929701340285">Verzia webu pre počítače</translation> -<translation id="8569404424186215731">od <ph name="DATE" /></translation> <translation id="8570677896027847510">Súbor sa nedá bezpečne stiahnuť</translation> <translation id="8571213806525832805">Posledné 4 týždne</translation> <translation id="8572344201470131220">Obrázok bol skopírovaný</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 4f494245..b8a771e4 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Pojdi na stran</translation> <translation id="2122601567107267586">Aplikacije ni bilo mogoče odpreti</translation> <translation id="2126426811489709554">Uporablja tehnologijo Chrome</translation> -<translation id="2131665479022868825">Shranjeno <ph name="DATA" /></translation> <translation id="2132122640199389833">Odstrani vse povezane naprave</translation> <translation id="213279576345780926">Zaprt zavihek: <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodajanje na začetni zaslon</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Posodobi <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Iskanje najboljšega v spletu …</translation> <translation id="3924911262913579434">Način »<ph name="SAFE_BROWSING_MODE" />« je vklopljen</translation> -<translation id="3925830358619338299">Gesla se šifrirajo v napravi, preden se shranijo v Google Upravitelju gesel.</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Združevanje podatkov</translation> <translation id="3934366560681368531">»</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Datoteka bo shranjena v mapo <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Uredi<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Preklop na zavihek</translation> <translation id="572328651809341494">Nedavni zavihki</translation> -<translation id="5723735397759933332">Lahki način z optimiziranjem slik na straneh HTTPS zdaj poskrbi, da prihranite pri prenosu podatkov.</translation> <translation id="5726692708398506830">Povečanje vsebine strani</translation> <translation id="5748802427693696783">Preklopljeno na standardne zavihke</translation> <translation id="5749068826913805084">Chrome za prenos datotek potrebuje dostop do shrambe.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Zavihek za predogled je napol odprt</translation> <translation id="8428213095426709021">Nastavitve</translation> <translation id="8430824733382774043">Deli samo posnetek zaslona</translation> -<translation id="8431730749911729314">Šifrirajte gesla v napravi, preden se shranijo v Google Upravitelju gesel.</translation> <translation id="8438566539970814960">Izboljšanje iskanja in brskanja</translation> <translation id="8439974325294139057"><ph name="LANG" /> – jezik je pripravljen, znova zaženite aplikacijo <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Novice niso na voljo</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Poiščite svoj bralni seznam v zaznamkih</translation> <translation id="8562452229998620586">Shranjena gesla bodo prikazana tukaj.</translation> <translation id="856481929701340285">Zah. za namiz. sp. mesto</translation> -<translation id="8569404424186215731">od <ph name="DATE" /></translation> <translation id="8570677896027847510">Datoteke ni mogoče varno prenesti</translation> <translation id="8571213806525832805">Zadnji 4 tedni</translation> <translation id="8572344201470131220">Slika je bila kopirana</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 3a5443e3..8226d4a 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Shko te faqja</translation> <translation id="2122601567107267586">Aplikacioni nuk mund të hapej</translation> <translation id="2126426811489709554">E mundësuar nga Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> të kursyera</translation> <translation id="2132122640199389833">Hiq të gjitha pajisjet e lidhura</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> është mbyllur</translation> <translation id="2139186145475833000">Shtoje te ekrani "Faqja kryesore"</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Si të navigosh në Chrome</translation> <translation id="5487521232677179737">Pastro të dhënat</translation> <translation id="549025011754480756">Si të kërkosh me anë të zërit</translation> +<translation id="5492637351392383067">Enkriptimi në pajisje</translation> <translation id="5514904542973294328">Çaktivizuar nga administratori i kësaj pajisjeje</translation> <translation id="5515439363601853141">Shkyçe për të parë fjalëkalimin</translation> <translation id="5517095782334947753">Ke faqeshënues, historik, fjalëkalime dhe cilësime të tjera nga <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Skedari yt do të ruhet te <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Modifiko<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Kalo te skeda</translation> <translation id="572328651809341494">Skedat e fundit</translation> -<translation id="5723735397759933332">"Modaliteti i lehtë" tani të ruan më shumë të dhëna duke optimizuar imazhet në faqet HTTPS.</translation> <translation id="5726692708398506830">Bëje më të madhe gjithçka në faqe</translation> <translation id="5748802427693696783">Kaloi në skedat standarde</translation> <translation id="5749068826913805084">Chrome ka nevojë për qasje te hapësira ruajtëse për të shkarkuar skedarë.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Gjej listën tënd të leximit te "Faqeshënuesit"</translation> <translation id="8562452229998620586">Fjalëkalimet e ruajtura do të shfaqen këtu.</translation> <translation id="856481929701340285">Kërko sajtin për desktop</translation> -<translation id="8569404424186215731">që nga data <ph name="DATE" /></translation> <translation id="8570677896027847510">Skedari nuk mund të shkarkohet në mënyrë të sigurt</translation> <translation id="8571213806525832805">4 javët e fundit</translation> <translation id="8572344201470131220">Imazhi u kopjua</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 908983d6..f12209bc 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Idi na stranicu</translation> <translation id="2122601567107267586">Otvaranje aplikacije nije uspelo</translation> <translation id="2126426811489709554">Omogućava Chrome</translation> -<translation id="2131665479022868825">Sačuvano: <ph name="DATA" /></translation> <translation id="2132122640199389833">Ukloni sve povezane uređaje</translation> <translation id="213279576345780926">Zatvorili ste karticu <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodaj na početni ekran</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Ažurirajte <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Traže se najbolji podaci sa veba…</translation> <translation id="3924911262913579434">Režim <ph name="SAFE_BROWSING_MODE" /> je uključen</translation> -<translation id="3925830358619338299">Lozinka se šifruje na uređaju pre nego što se sačuva u Google menadžeru lozinki</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Kombinuj podatke</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Datoteka će se sačuvati u direktorijumu <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Izmeni<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Pređi na karticu</translation> <translation id="572328651809341494">Nedavno korišćene kartice</translation> -<translation id="5723735397759933332">Lite režim vam sada štedi više podataka optimizovanjem slika na HTTPS stranicama.</translation> <translation id="5726692708398506830">Uvećavanje celokupnog prikaza stranice</translation> <translation id="5748802427693696783">Prebacili ste na standardne kartice</translation> <translation id="5749068826913805084">Chrome-u je potreban pristup memorijskom prostoru da bi preuzimao datoteke.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Kartica za pregled je poluotvorena</translation> <translation id="8428213095426709021">Podešavanja</translation> <translation id="8430824733382774043">Delite samo snimak ekrana</translation> -<translation id="8431730749911729314">Šifrujte lozinke na uređaju pre nego što se sačuvaju u Google menadžer lozinki</translation> <translation id="8438566539970814960">Poboljšaj pretrage i pregledanje</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Jezik je spreman, restartujte aplikaciju <ph name="APP_NAME" /></translation> <translation id="8442258441309440798">Nije dostupna nijedna vest</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Potražite listu za čitanje u Google obeleživačima</translation> <translation id="8562452229998620586">Sačuvane lozinke će se pojaviti ovde.</translation> <translation id="856481929701340285">Zahtevaj sajt za računar</translation> -<translation id="8569404424186215731">od <ph name="DATE" /></translation> <translation id="8570677896027847510">Fajl ne može da se bezbedno preuzme</translation> <translation id="8571213806525832805">Poslednje 4 nedelje</translation> <translation id="8572344201470131220">Slika je kopirana</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 ec34445..37bfb42 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Иди на страницу</translation> <translation id="2122601567107267586">Отварање апликације није успело</translation> <translation id="2126426811489709554">Омогућава Chrome</translation> -<translation id="2131665479022868825">Сачувано: <ph name="DATA" /></translation> <translation id="2132122640199389833">Уклони све повезане уређаје</translation> <translation id="213279576345780926">Затворили сте картицу <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Додај на почетни екран</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Ажурирајте <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Траже се најбољи подаци са веба…</translation> <translation id="3924911262913579434">Режим <ph name="SAFE_BROWSING_MODE" /> је укључен</translation> -<translation id="3925830358619338299">Лозинка се шифрује на уређају пре него што се сачува у Google менаџеру лозинки</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Комбинуј податке</translation> <translation id="3934366560681368531">„</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Датотека ће се сачувати у директоријуму <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Измени<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Пређи на картицу</translation> <translation id="572328651809341494">Недавно коришћене картице</translation> -<translation id="5723735397759933332">Lite режим вам сада штеди више података оптимизовањем слика на HTTPS страницама.</translation> <translation id="5726692708398506830">Увећавање целокупног приказа странице</translation> <translation id="5748802427693696783">Пребацили сте на стандардне картице</translation> <translation id="5749068826913805084">Chrome-у је потребан приступ меморијском простору да би преузимао датотеке.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Картица за преглед је полуотворена</translation> <translation id="8428213095426709021">Подешавања</translation> <translation id="8430824733382774043">Делите само снимак екрана</translation> -<translation id="8431730749911729314">Шифрујте лозинке на уређају пре него што се сачувају у Google менаџер лозинки</translation> <translation id="8438566539970814960">Побољшај претраге и прегледање</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Језик је спреман, рестартујте апликацију <ph name="APP_NAME" /></translation> <translation id="8442258441309440798">Није доступна ниједна вест</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Потражите листу за читање у Google обележивачима</translation> <translation id="8562452229998620586">Сачуване лозинке ће се појавити овде.</translation> <translation id="856481929701340285">Захтевај сајт за рачунар</translation> -<translation id="8569404424186215731">од <ph name="DATE" /></translation> <translation id="8570677896027847510">Фајл не може да се безбедно преузме</translation> <translation id="8571213806525832805">Последње 4 недеље</translation> <translation id="8572344201470131220">Слика је копирана</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 b5051d9..603585ac 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Öppna sida</translation> <translation id="2122601567107267586">Det gick inte att öppna appen</translation> <translation id="2126426811489709554">Drivs av Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> har sparats</translation> <translation id="2132122640199389833">Ta bort alla länkade enheter</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> har stängts</translation> <translation id="2139186145475833000">Lägg till på startskärmen</translation> @@ -501,7 +500,6 @@ <translation id="3908308510347173149">Uppdatera <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Letar efter det bästa på webben …</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> är på</translation> -<translation id="3925830358619338299">Dina lösenord krypteras på enheten innan de sparas i Google Lösenordshantering</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Slå ihop data</translation> <translation id="3934366560681368531">”</translation> @@ -809,7 +807,6 @@ <translation id="5697688514913266141">Filen sparas i <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Redigera<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Byt till flik</translation> <translation id="572328651809341494">Senaste flikarna</translation> -<translation id="5723735397759933332">Nu sparar du mer data i Begränsat läge tack vare att bilder på HTTPS-sidor optimeras.</translation> <translation id="5726692708398506830">Gör allt på sidan större</translation> <translation id="5748802427693696783">Bytte till standardflikar</translation> <translation id="5749068826913805084">Chrome måste ha åtkomst till lagringsutrymmet om det ska gå att ladda ned filer.</translation> @@ -1324,7 +1321,6 @@ <translation id="8427875596167638501">Fliken Förhandsgranskning visas på halva skärmen</translation> <translation id="8428213095426709021">Inställningar</translation> <translation id="8430824733382774043">Dela endast skärmbild</translation> -<translation id="8431730749911729314">Kryptera lösenord på enheten innan de sparas i Google Lösenordshantering</translation> <translation id="8438566539970814960">Förbättra sökningar och surfandet</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Språket kan nu användas. Starta om <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Inga berättelser tillgängliga</translation> @@ -1360,7 +1356,6 @@ <translation id="8560602726703398413">Du hittar läslistan under Bokmärken</translation> <translation id="8562452229998620586">Sparade lösenord visas här.</translation> <translation id="856481929701340285">Begär skrivbordsversion</translation> -<translation id="8569404424186215731">sedan <ph name="DATE" /></translation> <translation id="8570677896027847510">Det går inte att ladda ned filen på ett säkert sätt</translation> <translation id="8571213806525832805">Senaste fyra veckorna</translation> <translation id="8572344201470131220">Bilden har kopierats</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 099802c..d8de76c6 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Nenda kwenye ukurasa</translation> <translation id="2122601567107267586">Imeshindwa kufungua programu</translation> <translation id="2126426811489709554">Unaendeshwa na Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> imeokolewa</translation> <translation id="2132122640199389833">Ondoa vifaa vyote vilivyounganishwa</translation> <translation id="213279576345780926">Umefunga <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Ongeza kwenye skrini ya kwanza</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Kutumia Chrome</translation> <translation id="5487521232677179737">Futa data</translation> <translation id="549025011754480756">Jinsi ya kutafuta kwa kutumia sauti yako</translation> +<translation id="5492637351392383067">Usimbaji fiche kwenye kifaa</translation> <translation id="5514904542973294328">Imezimwa na msimamizi wa kifaa hiki</translation> <translation id="5515439363601853141">Fungua ili uangalie nenosiri lako</translation> <translation id="5517095782334947753">Una alamisho, historia, manenosiri na mipangilio mingine kutoka <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Faili yako itahifadhiwa kwenye <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Badilisha<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Nenda Kwenye Kichupo</translation> <translation id="572328651809341494">Vichupo vya hivi punde</translation> -<translation id="5723735397759933332">Hali nyepesi sasa inaokoa data yako zaidi kwa kuboresha picha kwenye kurasa za HTTPS.</translation> <translation id="5726692708398506830">Fanya kila kitu kwenye ukurasa kiwe kikubwa zaidi</translation> <translation id="5748802427693696783">Imebadilisha kwenda vichupo muundo-msingi</translation> <translation id="5749068826913805084">Chrome inahitaji idhini ya kufikia hifadhi ili ipakue faili.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Pata orodha yako ya kusoma katika alamisho</translation> <translation id="8562452229998620586">Manenosiri yaliyohifadhiwa yataonekana hapa.</translation> <translation id="856481929701340285">Omba tovuti ya eneo-kazi</translation> -<translation id="8569404424186215731">tangu <ph name="DATE" /></translation> <translation id="8570677896027847510">Faili haiwezi kupakuliwa kwa usalama</translation> <translation id="8571213806525832805">Wiki 4 zilizopita</translation> <translation id="8572344201470131220">Picha Imenakiliwa</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 07a5228..6772fbe 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">பக்கத்திற்குச் செல்லவும்</translation> <translation id="2122601567107267586">பயன்பாட்டைத் திறக்க முடியவில்லை</translation> <translation id="2126426811489709554">Chromeஇல் இயங்குகிறது</translation> -<translation id="2131665479022868825"><ph name="DATA" /> சேமிக்கப்பட்டது</translation> <translation id="2132122640199389833">இணைக்கப்பட்டுள்ள சாதனங்கள் அனைத்தையும் அகற்று</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> மூடப்பட்டது</translation> <translation id="2139186145475833000">முகப்புத் திரையில் சேர்</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> ஐப் புதுப்பி</translation> <translation id="3912508018559818924">இணையத்திலிருந்து தரவை ஏற்றுகிறோம்…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> இயக்கத்தில் உள்ளது</translation> -<translation id="3925830358619338299">Google கடவுச்சொல் நிர்வாகியில் கடவுச்சொற்கள் சேமிக்கப்படுவதற்கு முன்பு உங்கள் சாதனத்தில் அவை என்க்ரிப்ஷன் செய்யப்படுகின்றன</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">எனது தரவை ஒன்றிணை</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">உங்கள் ஃபைல் <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> இல் சேமிக்கப்படும். <ph name="BEGIN_LINK2" />மாற்று<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">தாவலுக்கு மாறும்</translation> <translation id="572328651809341494">சமீபத்திய தாவல்கள்</translation> -<translation id="5723735397759933332">HTTPS பக்கங்களில் உள்ள படங்களைச் சுருக்குவதன் மூலம் லைட் பயன்முறை இப்போது கூடுதல் டேட்டாவைச் சேமிக்கிறது.</translation> <translation id="5726692708398506830">பக்கத்திலுள்ள அனைத்தையும் பெரிதாக்கும்</translation> <translation id="5748802427693696783">இயல்பான தாவல்களுக்கு மாற்றப்பட்டது</translation> <translation id="5749068826913805084">ஃபைல்களைப் பதிவிறக்க Chromeக்கு சேமிப்பிட அணுகல் தேவை.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">மாதிரிக்காட்சித் தாவல் பாதியளவு திறந்துள்ளது</translation> <translation id="8428213095426709021">அமைப்புகள்</translation> <translation id="8430824733382774043">ஸ்கிரீன்ஷாட்டை மட்டும் பகிரும்</translation> -<translation id="8431730749911729314">Google கடவுச்சொல் நிர்வாகியில் கடவுச்சொற்கள் சேமிக்கப்படுவதற்கு முன்பு உங்கள் சாதனத்தில் அவை என்க்ரிப்ஷன் செய்யப்படும்</translation> <translation id="8438566539970814960">தேடல்களையும் உலாவலையும் மேலும் சிறப்பாக்குக</translation> <translation id="8439974325294139057"><ph name="LANG" /> - பதிவிறக்கப்பட்டது, <ph name="APP_NAME" /> ஆப்ஸை மீண்டும் தொடங்கவும்.</translation> <translation id="8442258441309440798">புதிய கட்டுரைகள் எதுவுமில்லை</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">புக்மார்க்குகளில் உங்கள் வாசிப்புப் பட்டியலைக் கண்டறியலாம்</translation> <translation id="8562452229998620586">சேமிக்கப்பட்ட கடவுச்சொற்கள் இங்கு காண்பிக்கப்படும்.</translation> <translation id="856481929701340285">டெஸ்க்டாப் தளத்தைக் கோரு</translation> -<translation id="8569404424186215731"><ph name="DATE" /> முதல்</translation> <translation id="8570677896027847510">ஃபைலைப் பாதுகாப்பாகப் பதிவிறக்க முடியாது</translation> <translation id="8571213806525832805">கடந்த 4 வாரங்கள்</translation> <translation id="8572344201470131220">படம் நகலெடுக்கப்பட்டது</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 2d0f6d8..95499d2 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">పేజీకి వెళ్లండి</translation> <translation id="2122601567107267586">యాప్ను తెరవడం సాధ్యపడలేదు</translation> <translation id="2126426811489709554">Chrome ఆధారితం</translation> -<translation id="2131665479022868825"><ph name="DATA" /> ఆదా చేయబడింది</translation> <translation id="2132122640199389833">అన్ని లింక్ చేయబడిన పరికరాలను తీసివేయండి</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> మూసివేయబడింది</translation> <translation id="2139186145475833000">హోమ్ స్క్రీన్కు జోడించు</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" />ని అప్డేట్ చేయి</translation> <translation id="3912508018559818924">వెబ్ నుండి ఉత్తమమైనది కనుగొంటోంది…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> ఆన్లో ఉంది</translation> -<translation id="3925830358619338299">మీ పాస్వర్డ్ Google పాస్వర్డ్ మేనేజర్లో సేవ్ అవ్వడానికంటే ముందు అది మీ పరికరంలో ఎన్క్రిప్ట్ చేయబడుతుంది</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">నా డేటాను కలపండి</translation> <translation id="3934366560681368531">“</translation> @@ -743,7 +741,7 @@ <translation id="5292796745632149097">ఈ పరికరానికి పంపండి</translation> <translation id="5304593522240415983">ఈ ఫీల్డ్ ఖాళీగా ఉండరాదు</translation> <translation id="5308380583665731573">కనెక్ట్ చేయండి</translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5319359161174645648">Chromeను Google సిఫార్సు చేస్తోంది</translation> <translation id="5324858694974489420">పేరెంటల్ సెట్టింగ్లు</translation> <translation id="5326921373682845375">ప్రీ - లోడ్ చేయబడిన పేజీలు ఎన్క్రిప్ట్ చేయబడినందున, అలాగే పేజీలకు లింక్ చేసే సైట్ Google సైట్ అయినందున, ఈ పేజీలను ప్రైవేట్గా ప్రీ - లోడ్ చేస్తున్నప్పుడు Google సర్వర్లు కొత్త సమాచారాన్ని అందుకోవు.</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">మీ ఫైల్ <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />లో సేవ్ చేయబడుతుంది. <ph name="BEGIN_LINK2" />ఎడిట్<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">ట్యాబ్కు మారండి</translation> <translation id="572328651809341494">ఇటీవలి ట్యాబ్లు</translation> -<translation id="5723735397759933332">లైట్ మోడ్ ఇప్పుడు HTTPS పేజీలలో ఇమేజ్లను ఆప్టిమైజ్ చేయడం ద్వారా మీకు మరింత డేటాను ఆదా చేస్తోంది.</translation> <translation id="5726692708398506830">పేజీలోని అన్నింటినీ పెద్దవిగా చేయండి</translation> <translation id="5748802427693696783">ప్రామాణిక ట్యాబ్లకు మార్చబడింది</translation> <translation id="5749068826913805084">ఫైళ్లను డౌన్లోడ్ చేయడానికి Chromeకు నిల్వ యాక్సెస్ అవసరం.</translation> @@ -1182,7 +1179,7 @@ <translation id="7641339528570811325">బ్రౌజింగ్ డేటాను తీసివేయి…</translation> <translation id="7646772052135772216">పాస్వర్డ్ సింక్ పనిచేయడం లేదు</translation> <translation id="7655900163790317559">బ్లూటూత్ ఆన్ అవుతోంది…</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7663313374500954251">ఈ బ్రౌజర్ <ph name="PARENT_NAME" /> ద్వారా మేనేజ్ చేయబడుతోంది.</translation> <translation id="7665369617277396874">ఖాతాను జోడించండి</translation> <translation id="766587987807204883">కథనాలు ఇక్కడ కనిపిస్తాయి, మీరు ఆఫ్లైన్లో ఉన్నప్పటికీ కూడా వీటిని చదవవచ్చు</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">ప్రివ్యూ ట్యాబ్ సగం తెరవబడింది</translation> <translation id="8428213095426709021">సెట్టింగ్లు</translation> <translation id="8430824733382774043">స్క్రీన్షాట్ను మాత్రమే షేర్ చేయండి</translation> -<translation id="8431730749911729314">పాస్వర్డ్లు Google పాస్వర్డ్ మేనేజర్లో సేవ్ అవ్వడానికంటే ముందు వాటిని మీ పరికరంలో ఎన్క్రిప్ట్ చేయండి</translation> <translation id="8438566539970814960">సెర్చ్లను, బ్రౌజింగ్ను మెరుగుపరచండి</translation> <translation id="8439974325294139057"><ph name="LANG" /> - భాష సిద్ధంగా ఉంది, <ph name="APP_NAME" />ను రీస్టార్ట్ చేయండి.</translation> <translation id="8442258441309440798">కథనాలు ఏవీ అందుబాటులో లేవు</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">బుక్మార్క్లలో మీ చదవాల్సిన లిస్ట్ను కనుగొనండి</translation> <translation id="8562452229998620586">సేవ్ చేయబడిన పాస్వర్డ్లు ఇక్కడ కనిపిస్తాయి.</translation> <translation id="856481929701340285">డెస్క్టాప్ సైట్ను అభ్యర్థించు</translation> -<translation id="8569404424186215731"><ph name="DATE" /> నుండి</translation> <translation id="8570677896027847510">ఫైల్ను సురక్షితంగా డౌన్లోడ్ చేయడం సాధ్యపడదు</translation> <translation id="8571213806525832805">గత 4 వారాలు</translation> <translation id="8572344201470131220">ఇమేజ్ కాపీ చేయబడింది</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 21dcffd..00158a5 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">ไปที่หน้า</translation> <translation id="2122601567107267586">เปิดแอปไม่ได้</translation> <translation id="2126426811489709554">สนับสนุนโดย Chrome</translation> -<translation id="2131665479022868825">ประหยัดไป <ph name="DATA" /></translation> <translation id="2132122640199389833">นำอุปกรณ์ทั้งหมดที่ลิงก์ออก</translation> <translation id="213279576345780926">ปิด <ph name="TAB_TITLE" /> แล้ว</translation> <translation id="2139186145475833000">เพิ่มลงในหน้าจอหลัก</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">อัปเดต <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">กำลังหาข้อมูลที่ดีที่สุดจากเว็บ…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> เปิดอยู่</translation> -<translation id="3925830358619338299">ระบบจะเข้ารหัสให้กับรหัสผ่านในอุปกรณ์ก่อนบันทึกลงในเครื่องมือจัดการรหัสผ่านของ Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">รวมข้อมูลของฉัน</translation> <translation id="3934366560681368531">"</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">ระบบจะบันทึกไฟล์ลงใน<ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> <ph name="BEGIN_LINK2" />แก้ไข<ph name="END_LINK2" /></translation> <translation id="570347048394355941">เปลี่ยนเป็นแท็บ</translation> <translation id="572328651809341494">แท็บล่าสุด</translation> -<translation id="5723735397759933332">ตอนนี้โหมด Lite จะประหยัดอินเทอร์เน็ตมือถือโดยการเพิ่มประสิทธิภาพให้รูปภาพในหน้า HTTPS</translation> <translation id="5726692708398506830">ขยายรายละเอียดทั้งหมดบนหน้า</translation> <translation id="5748802427693696783">สลับเป็นแท็บมาตรฐานแล้ว</translation> <translation id="5749068826913805084">Chrome ต้องมีสิทธิ์เข้าถึงพื้นที่เก็บข้อมูลเพื่อดาวน์โหลดไฟล์</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">แท็บแสดงตัวอย่างเปิดอยู่ครึ่งเดียว</translation> <translation id="8428213095426709021">การตั้งค่า</translation> <translation id="8430824733382774043">แชร์ภาพหน้าจอเท่านั้น</translation> -<translation id="8431730749911729314">เข้ารหัสให้กับรหัสผ่านในอุปกรณ์ก่อนบันทึกลงในเครื่องมือจัดการรหัสผ่านของ Google</translation> <translation id="8438566539970814960">ปรับปรุงการค้นหาและการท่องเว็บให้ดียิ่งขึ้น</translation> <translation id="8439974325294139057"><ph name="LANG" /> - ภาษาพร้อมใช้งานแล้ว โปรดรีสตาร์ท <ph name="APP_NAME" /></translation> <translation id="8442258441309440798">ไม่มีเรื่องราว</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">หาเรื่องรออ่านในบุ๊กมาร์ก</translation> <translation id="8562452229998620586">รหัสผ่านที่บันทึกไว้จะแสดงที่นี่</translation> <translation id="856481929701340285">ขอเว็บไซต์เดสก์ท็อป</translation> -<translation id="8569404424186215731">ตั้งแต่วันที่ <ph name="DATE" /></translation> <translation id="8570677896027847510">ดาวน์โหลดไฟล์อย่างปลอดภัยไม่ได้</translation> <translation id="8571213806525832805">4 สัปดาห์ที่แล้ว</translation> <translation id="8572344201470131220">คัดลอกรูปภาพแล้ว</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 53ef86d..989bf4a0 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Sayfaya gidin</translation> <translation id="2122601567107267586">Uygulama açılamadı</translation> <translation id="2126426811489709554">Chrome tarafından desteklenmektedir</translation> -<translation id="2131665479022868825"><ph name="DATA" /> tasarruf edildi</translation> <translation id="2132122640199389833">Tüm bağlı cihazları kaldır</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> kapatıldı</translation> <translation id="2139186145475833000">Ana ekrana ekle</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> cihazı güncelle</translation> <translation id="3912508018559818924">Web'in en iyilerini buluyoruz…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> açık</translation> -<translation id="3925830358619338299">Şifreleriniz Google Şifre Yöneticisi'ne kaydedilmeden önce cihazınızda şifrelenir</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Verilerimi birleştir</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Dosyanız <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> konumuna kaydedilecek. <ph name="BEGIN_LINK2" />Düzenle<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Sekmeye Geç</translation> <translation id="572328651809341494">Son sekmeler</translation> -<translation id="5723735397759933332">Basit mod, HTTPS sayfalarındaki görselleri optimize ederek size veri tasarrufu sağlıyor.</translation> <translation id="5726692708398506830">Sayfadaki her şeyi büyütür</translation> <translation id="5748802427693696783">Standart sekmelere geçildi</translation> <translation id="5749068826913805084">Dosya indirmek için Chrome'un depolama alanına erişmesi gerekiyor.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Önizleme sekmesi yarım açık</translation> <translation id="8428213095426709021">Ayarlar</translation> <translation id="8430824733382774043">Yalnızca ekran görüntüsü paylaşılıyor</translation> -<translation id="8431730749911729314">Google Şifre Yöneticisi'ne kaydedilmeden önce şifrelerinizi cihazınızda şifreleyin</translation> <translation id="8438566539970814960">Aramaları ve göz atmayı daha iyi yap</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Dil hazır, <ph name="APP_NAME" /> uygulamasını yeniden başlatın.</translation> <translation id="8442258441309440798">Kullanılabilir hikaye yok</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Okuma listenizi Yer işaretleri'nde görün</translation> <translation id="8562452229998620586">Kayıtlı şifreleriniz burada görünür.</translation> <translation id="856481929701340285">Masaüstü sitesi iste</translation> -<translation id="8569404424186215731"><ph name="DATE" /> tarihinden bu yana</translation> <translation id="8570677896027847510">Dosya güvenli bir şekilde indirilemiyor</translation> <translation id="8571213806525832805">Son 4 hafta</translation> <translation id="8572344201470131220">Resim kopyalandı</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 db8f0810..7164e5f6 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Перейти на сторінку</translation> <translation id="2122601567107267586">Не вдалося відкрити додаток</translation> <translation id="2126426811489709554">Технології Chrome</translation> -<translation id="2131665479022868825">Заощаджено <ph name="DATA" /></translation> <translation id="2132122640199389833">Видалити всі зв’язані пристрої</translation> <translation id="213279576345780926">Вкладку "<ph name="TAB_TITLE" />" закрито</translation> <translation id="2139186145475833000">Додати на головний екран</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">Навігація в Chrome</translation> <translation id="5487521232677179737">Видалити дані</translation> <translation id="549025011754480756">Як шукати за допомогою голосу</translation> +<translation id="5492637351392383067">Шифрування на пристрої</translation> <translation id="5514904542973294328">Вимкнено адміністратором пристрою</translation> <translation id="5515439363601853141">Розблокуйте, щоб переглянути пароль</translation> <translation id="5517095782334947753">У вас є закладки, історія, паролі й інші налаштування з облікового запису <ph name="FROM_ACCOUNT" />.</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">Файл буде збережено в каталозі <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Змінити<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Перейти на вкладку</translation> <translation id="572328651809341494">Останні вкладки</translation> -<translation id="5723735397759933332">Тепер спрощений режим оптимізує зображення на сторінках HTTPS, щоб заощаджувати більше трафіку.</translation> <translation id="5726692708398506830">Збільшити всі елементи на сторінці</translation> <translation id="5748802427693696783">Ви перейшли на стандартні вкладки</translation> <translation id="5749068826913805084">Щоб завантажувати файли, Chrome потребує доступу до пам’яті.</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">Ваш список читання буде в закладках</translation> <translation id="8562452229998620586">Тут відображатимуться збережені паролі.</translation> <translation id="856481929701340285">Версія для комп’ютера</translation> -<translation id="8569404424186215731">з <ph name="DATE" /></translation> <translation id="8570677896027847510">Не можна безпечно завантажити файл</translation> <translation id="8571213806525832805">Останні 4 тижні</translation> <translation id="8572344201470131220">Зображення скопійовано</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 a550843..7d7420a 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">صفحہ پر جائیں</translation> <translation id="2122601567107267586">ایپ نہیں کھولی جا سکی</translation> <translation id="2126426811489709554">تقویت یافتہ بذریعہ Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> کی بچت ہوئی</translation> <translation id="2132122640199389833">سبھی لنک کردہ آلات کو ہٹائیں</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> کو بند کر دیا گیا</translation> <translation id="2139186145475833000">ہوم اسکرین میں شامل کریں</translation> @@ -211,6 +210,7 @@ <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> کے بطور جاری رکھیں</translation> <translation id="2230777942707397948">خالی ونڈو</translation> <translation id="2239812875700136898">اختیارات برائے Discover بٹن سے اپنی کہانیاں کنٹرول کریں</translation> +<translation id="2248941474044011069">آپ کے پاس ورڈز Google پاس ورڈ مینیجر میں محفوظ ہونے سے پہلے آپ کے آلے پر مرموز ہو جاتے ہیں</translation> <translation id="2259659629660284697">پاسورڈز برآمد کریں…</translation> <translation id="2276696007612801991">اپنے پاس ورڈز چیک کرنے کے لئے اپنے Google اکاؤنٹ میں سائن ان کریں</translation> <translation id="2278052315791335171">اس پاس ورڈ کو حذف کرنے سے آپ کا اکاؤنٹ <ph name="SITE" /> سے حذف نہیں ہوگا</translation> @@ -500,7 +500,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> اپ ڈیٹ کریں</translation> <translation id="3912508018559818924">ویب سے بہترین چیزیں تلاش کی جا رہی ہیں…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> آن ہے</translation> -<translation id="3925830358619338299">آپ کا پاس ورڈ Google پاس ورڈ مینیجر میں محفوظ ہونے سے پہلے آپ کے آلے پر مرموز ہو جاتا ہے</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">میرا ڈیٹا ملائیں</translation> <translation id="3934366560681368531">“</translation> @@ -661,6 +660,7 @@ <translation id="4837753911714442426">صفحہ پرنٹ کرنے کیلئے اختیارات کھولیں</translation> <translation id="4842092870884894799">پاس ورڈ بنانے کے پاپ اپ کو دکھا رہا ہے</translation> <translation id="4842515939542199281">اپنی آواز سے تلاش کرنے کے لیے مائیکروفون پر تھپتھپائیں</translation> +<translation id="4844633725025837809">اضافی حفاظت کے لیے، پاس ورڈز کو Google پاس ورڈ مینیجر میں محفوظ کرنے سے پہلے اپنے آلے پر مرموز کریں</translation> <translation id="4850886885716139402">دیکھیں</translation> <translation id="4860895144060829044">کال کریں</translation> <translation id="4864369630010738180">سائن ان کر رہا ہے…</translation> @@ -808,7 +808,6 @@ <translation id="5697688514913266141">آپ کی فائل <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> میں محفوظ کر دی جائے گی۔ <ph name="BEGIN_LINK2" />ترمیم کریں<ph name="END_LINK2" />۔</translation> <translation id="570347048394355941">ٹیب پر سوئچ کریں</translation> <translation id="572328651809341494">حالیہ ٹیبز</translation> -<translation id="5723735397759933332">لائٹ وضع اب HTTPS صفحات پر تصاویر کو بہتر بنا کر آپ کیلئے مزید ڈیٹا کی بچت کرتی ہے۔</translation> <translation id="5726692708398506830">صفحہ پر موجود ہر چیز کو اور بڑا کریں</translation> <translation id="5748802427693696783">معیاری ٹیبز میں سوئچ کر دیا گیا</translation> <translation id="5749068826913805084">Chrome کو فائلیں ڈاؤن لوڈ کرنے کیلئے اسٹوریج تک رسائی درکار ہے۔</translation> @@ -1323,7 +1322,6 @@ <translation id="8427875596167638501">پیش منظر ٹیب آدھا کھلا ہے</translation> <translation id="8428213095426709021">ترتیبات</translation> <translation id="8430824733382774043">صرف اسکرین شاٹ کا استعمال کریں</translation> -<translation id="8431730749911729314">Google پاس ورڈ مینیجر میں محفوظ ہونے سے پہلے اپنے آلے پر پاس ورڈز کو مرموز کریں</translation> <translation id="8438566539970814960">تلاشوں اور براؤزنگ کو بہتر بنائیں</translation> <translation id="8439974325294139057"><ph name="LANG" /> - زبان تیار ہے، <ph name="APP_NAME" /> کو ری سٹارٹ کریں۔</translation> <translation id="8442258441309440798">کوئی کہانی دستیاب نہیں ہے</translation> @@ -1359,7 +1357,6 @@ <translation id="8560602726703398413">Bookmarks میں اپنی پڑھنے کی فہرست پائيں</translation> <translation id="8562452229998620586">محفوظ کردہ پاس ورڈز یہاں نمودار ہوں گے۔</translation> <translation id="856481929701340285">ڈیسک ٹاپ سائٹ کی درخواست کریں</translation> -<translation id="8569404424186215731"><ph name="DATE" /> سے</translation> <translation id="8570677896027847510">فائل کو محفوظ طریقے سے ڈاؤن لوڈ نہیں کیا جا سکتا</translation> <translation id="8571213806525832805">گزشتہ 4 ہفتے</translation> <translation id="8572344201470131220">تصویر کو کاپی کر دیا گیا</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 9f47824..b20a4c9 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Sahifaga o‘tish</translation> <translation id="2122601567107267586">Dastur ochilmadi</translation> <translation id="2126426811489709554">Chrome asosida ishlaydi</translation> -<translation id="2131665479022868825"><ph name="DATA" /> tejaldi</translation> <translation id="2132122640199389833">Ulangan barcha qurilmalarni olib tashlash</translation> <translation id="213279576345780926">Yopildi: <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Bosh ekranga qo‘shish</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149"><ph name="PRODUCT_NAME" /> ilovasini yangilang</translation> <translation id="3912508018559818924">Internetdan maʼlumotlar yuklanmoqda…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> yoniq</translation> -<translation id="3925830358619338299">Parolingiz Google Parollar menejeriga saqlanishidan oldin qurilmangizda shifrlangan</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Ma’lumotlarni birlashtirish</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Fayl <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" /> jildiga saqlanadi. <ph name="BEGIN_LINK2" />Tahrirlash<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Varaqqa oʻtish</translation> <translation id="572328651809341494">Oxirgi varaqlar</translation> -<translation id="5723735397759933332">Lite rejimi HTTPS sahifalardagi rasmlarni arxivlash hisobiga endi koʻproq trafikni tejaydi</translation> <translation id="5726692708398506830">Sahifadagi hamma narsani kattalashtirish</translation> <translation id="5748802427693696783">Standart rejimdagi varaqlarga o‘tildi</translation> <translation id="5749068826913805084">Yuklab olish uchun Chrome brauzerida omborga saqlash ruxsati bo‘lishi zarur.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Razm solish sahifasi yarim hajmda ochildi</translation> <translation id="8428213095426709021">Sozlamalar</translation> <translation id="8430824733382774043">Faqat skrinshotni ulashish</translation> -<translation id="8431730749911729314">Parollarni Google Parollar menejeriga saqlashdan oldin qurilmangizda shifrlang</translation> <translation id="8438566539970814960">Sahifalarni kezish va qidiruvni yaxshilash</translation> <translation id="8439974325294139057"><ph name="LANG" /> – Til tayyor, <ph name="APP_NAME" /> ilovasini qayta ishga tushiring.</translation> <translation id="8442258441309440798">Maqolalar topilmadi</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Mutolaa roʻyxatini Bukmarklardan topish mumkin</translation> <translation id="8562452229998620586">Saqlangan parollar bu yerda paydo bo‘ladi.</translation> <translation id="856481929701340285">To‘liq versiya</translation> -<translation id="8569404424186215731"><ph name="DATE" /> sanasidan beri</translation> <translation id="8570677896027847510">Faylni xavfsiz yuklab olish imkonsiz</translation> <translation id="8571213806525832805">Oxirgi 4 hafta</translation> <translation id="8572344201470131220">Rasmdan nusxa olindi</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 d9923bc..cecd9b7 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Chuyển đến trang</translation> <translation id="2122601567107267586">Không thể mở ứng dụng</translation> <translation id="2126426811489709554">Được hỗ trợ bởi Chrome</translation> -<translation id="2131665479022868825">Đã tiết kiệm <ph name="DATA" /></translation> <translation id="2132122640199389833">Xoá mọi thiết bị đã liên kết</translation> <translation id="213279576345780926">Đã đóng <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Thêm vào Màn hình chính</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Cập nhật <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Đang tìm dữ liệu thích hợp nhất từ web…</translation> <translation id="3924911262913579434"><ph name="SAFE_BROWSING_MODE" /> đang bật</translation> -<translation id="3925830358619338299">Mật khẩu của bạn được mã hoá trên thiết bị trước khi lưu vào Trình quản lý mật khẩu của Google</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">Kết hợp dữ liệu của tôi</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Tệp của bạn sẽ được lưu vào <ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Chỉnh sửa<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Chuyển sang thẻ</translation> <translation id="572328651809341494">Các thẻ gần đây</translation> -<translation id="5723735397759933332">Giờ đây, chế độ thu gọn giúp bạn tiết kiệm được nhiều dữ liệu hơn bằng cách tối ưu hóa hình ảnh trên các trang HTTPS.</translation> <translation id="5726692708398506830">Phóng to mọi nội dung trên trang</translation> <translation id="5748802427693696783">Đã chuyển sang thẻ chuẩn</translation> <translation id="5749068826913805084">Chrome cần quyền truy cập vào bộ nhớ để tải tệp xuống.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Thẻ xem trước đang mở trên nửa màn hình</translation> <translation id="8428213095426709021">Cài đặt</translation> <translation id="8430824733382774043">Chỉ chia sẻ ảnh chụp màn hình</translation> -<translation id="8431730749911729314">Mã hoá mật khẩu trên thiết bị của bạn trước khi lưu vào Trình quản lý mật khẩu của Google</translation> <translation id="8438566539970814960">Cải thiện tính năng tìm kiếm và duyệt web</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Ngôn ngữ đã sẵn sàng, hãy khởi động lại <ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Không có tin bài nào</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Tìm danh sách đọc trong phần Dấu trang</translation> <translation id="8562452229998620586">Mật khẩu đã lưu của bạn sẽ xuất hiện tại đây.</translation> <translation id="856481929701340285">Yêu cầu trang web cho máy tính</translation> -<translation id="8569404424186215731">kể từ <ph name="DATE" /></translation> <translation id="8570677896027847510">Không thể tải tệp xuống một cách an toàn</translation> <translation id="8571213806525832805">4 tuần qua</translation> <translation id="8572344201470131220">Đã sao chép hình ảnh</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 cf211b4..3299ca7 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">转至相关网页</translation> <translation id="2122601567107267586">无法打开此应用</translation> <translation id="2126426811489709554">由 Chrome 提供支持</translation> -<translation id="2131665479022868825">节省了 <ph name="DATA" /></translation> <translation id="2132122640199389833">移除所有已关联的设备</translation> <translation id="213279576345780926">已关闭“<ph name="TAB_TITLE" />”</translation> <translation id="2139186145475833000">添加到主屏幕</translation> @@ -772,6 +771,7 @@ <translation id="5483197086164197190">探索 Chrome</translation> <translation id="5487521232677179737">清除数据</translation> <translation id="549025011754480756">如何使用语音进行搜索</translation> +<translation id="5492637351392383067">设备上加密</translation> <translation id="5514904542973294328">已被此设备的管理员停用</translation> <translation id="5515439363601853141">需解锁才能查看您的密码</translation> <translation id="5517095782334947753">您有来自 <ph name="FROM_ACCOUNT" /> 的书签、历史记录、密码及其他设置。</translation> @@ -806,7 +806,6 @@ <translation id="5697688514913266141">您的文件将会保存到<ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />。<ph name="BEGIN_LINK2" />修改<ph name="END_LINK2" />。</translation> <translation id="570347048394355941">切换至标签页</translation> <translation id="572328651809341494">最近打开的标签页</translation> -<translation id="5723735397759933332">现在,精简模式会优化 HTTPS 网页上的图片,为您节省更多流量。</translation> <translation id="5726692708398506830">放大网页上的所有内容</translation> <translation id="5748802427693696783">已切换到标准标签页</translation> <translation id="5749068826913805084">Chrome 需要具备存储空间使用权限,才能下载文件。</translation> @@ -1356,7 +1355,6 @@ <translation id="8560602726703398413">您可在“书签”界面中找到自己的阅读清单</translation> <translation id="8562452229998620586">已保存的密码将显示在这里。</translation> <translation id="856481929701340285">请求切换到桌面版网站</translation> -<translation id="8569404424186215731">自 <ph name="DATE" />以来</translation> <translation id="8570677896027847510">无法安全地下载文件</translation> <translation id="8571213806525832805">过去 4 周</translation> <translation id="8572344201470131220">图片已复制</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 f8788ae..d6ed60c8 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">前往網頁</translation> <translation id="2122601567107267586">無法開啟應用程式</translation> <translation id="2126426811489709554">Chrome 技術提供</translation> -<translation id="2131665479022868825">已節省 <ph name="DATA" /></translation> <translation id="2132122640199389833">移除所有已連結的裝置</translation> <translation id="213279576345780926">已關閉「<ph name="TAB_TITLE" />」</translation> <translation id="2139186145475833000">新增至主螢幕</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">更新 <ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">正在網上搜尋最佳結果…</translation> <translation id="3924911262913579434">已開啟「<ph name="SAFE_BROWSING_MODE" />」</translation> -<translation id="3925830358619338299">你的密碼在儲存至 Google 密碼管理員之前,已在裝置上加密</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">合併我的資料</translation> <translation id="3934366560681368531">「</translation> @@ -773,7 +771,7 @@ <translation id="5483197086164197190">導覽 Chrome</translation> <translation id="5487521232677179737">清除資料</translation> <translation id="549025011754480756">如何使用語音搜尋</translation> -<translation id="5492637351392383067">裝置端加密</translation> +<translation id="5492637351392383067">在裝置上加密</translation> <translation id="5514904542973294328">此裝置的管理員已停用</translation> <translation id="5515439363601853141">解鎖即可查看您的密碼</translation> <translation id="5517095782334947753">您有來自 <ph name="FROM_ACCOUNT" /> 的書籤、記錄、密碼和其他設定。</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">您的檔案將儲存至「<ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />」。<ph name="BEGIN_LINK2" />編輯位置<ph name="END_LINK2" />。</translation> <translation id="570347048394355941">切換至分頁</translation> <translation id="572328651809341494">最近開啟的分頁</translation> -<translation id="5723735397759933332">精簡模式現在會優化 HTTPS 網頁上的圖片,為您節省更多數據用量。</translation> <translation id="5726692708398506830">放大網頁中的所有內容</translation> <translation id="5748802427693696783">已切換至標準分頁</translation> <translation id="5749068826913805084">Chrome 需要儲存空間的存取權才能下載檔案。</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">預覽分頁喺畫面下半部分顯示</translation> <translation id="8428213095426709021">設定</translation> <translation id="8430824733382774043">只分享螢幕截圖</translation> -<translation id="8431730749911729314">系統會先在裝置上將你的密碼加密,再儲存至 Google 密碼管理員</translation> <translation id="8438566539970814960">改善搜尋和瀏覽體驗</translation> <translation id="8439974325294139057"><ph name="LANG" /> - 語言套件已下載完成,請重新啟動 <ph name="APP_NAME" />。</translation> <translation id="8442258441309440798">沒有任何報導</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">在書籤中尋找閱讀清單</translation> <translation id="8562452229998620586">已儲存的密碼會顯示在這裡。</translation> <translation id="856481929701340285">切換至電腦版網站</translation> -<translation id="8569404424186215731">自 <ph name="DATE" />起</translation> <translation id="8570677896027847510">無法安全下載檔案</translation> <translation id="8571213806525832805">過去 4 週</translation> <translation id="8572344201470131220">已複製圖片</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 3f0c853..f592114a 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">前往指定頁面</translation> <translation id="2122601567107267586">無法開啟應用程式</translation> <translation id="2126426811489709554">技術提供:Chrome</translation> -<translation id="2131665479022868825">已節省 <ph name="DATA" /></translation> <translation id="2132122640199389833">移除所有連結的裝置</translation> <translation id="213279576345780926">已關閉「<ph name="TAB_TITLE" />」</translation> <translation id="2139186145475833000">加到主畫面</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">更新「<ph name="PRODUCT_NAME" />」</translation> <translation id="3912508018559818924">正在從網路上尋找最佳內容…</translation> <translation id="3924911262913579434">已開啟<ph name="SAFE_BROWSING_MODE" /></translation> -<translation id="3925830358619338299">你的密碼在儲存至 Google 密碼管理員之前,已在裝置上加密</translation> <translation id="3927692899758076493">Sans Serif</translation> <translation id="3928666092801078803">合併我的資料</translation> <translation id="3934366560681368531">「</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">檔案會儲存至「<ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />」。<ph name="BEGIN_LINK2" />編輯<ph name="END_LINK2" />。</translation> <translation id="570347048394355941">切換至分頁</translation> <translation id="572328651809341494">最近開啟的分頁</translation> -<translation id="5723735397759933332">精簡模式現在可將 HTTPS 頁面上的圖片最佳化,為你進一步節省資料用量。</translation> <translation id="5726692708398506830">放大網頁上的所有內容</translation> <translation id="5748802427693696783">已切換成標準分頁</translation> <translation id="5749068826913805084">Chrome 必須取得儲存空間的存取權才能下載檔案。</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">已在畫面下半部顯示預覽分頁</translation> <translation id="8428213095426709021">設定</translation> <translation id="8430824733382774043">僅分享螢幕截圖</translation> -<translation id="8431730749911729314">系統會先在裝置上將你的密碼加密,再儲存至 Google 密碼管理員</translation> <translation id="8438566539970814960">改善搜尋和瀏覽體驗</translation> <translation id="8439974325294139057"><ph name="LANG" /> - 這個語言套件已下載完成,請重新啟動 <ph name="APP_NAME" />。</translation> <translation id="8442258441309440798">沒有任何報導</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">在書籤中尋找閱讀清單</translation> <translation id="8562452229998620586">已儲存的密碼會顯示在這裡。</translation> <translation id="856481929701340285">切換為電腦版網站</translation> -<translation id="8569404424186215731">(<ph name="DATE" />起)</translation> <translation id="8570677896027847510">無法安全下載檔案</translation> <translation id="8571213806525832805">過去 4 週</translation> <translation id="8572344201470131220">已複製圖片</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 f6f8151..bef640ae 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
@@ -189,7 +189,6 @@ <translation id="2111511281910874386">Iya kwikhasi</translation> <translation id="2122601567107267586">Ayikwazanga ukuvula uhlelo lokusebenza</translation> <translation id="2126426811489709554">Kuxhaswe i-Chrome</translation> -<translation id="2131665479022868825"><ph name="DATA" /> elondoloziwe</translation> <translation id="2132122640199389833">Susa wonke amadivayisi alinkiwe</translation> <translation id="213279576345780926">I-<ph name="TAB_TITLE" /> evaliwe</translation> <translation id="2139186145475833000">Engeza kusikrini sasekhaya</translation> @@ -500,7 +499,6 @@ <translation id="3908308510347173149">Buyekeza i-<ph name="PRODUCT_NAME" /></translation> <translation id="3912508018559818924">Ithola okuhamba phambili kusukela kuwebhu…</translation> <translation id="3924911262913579434">I-<ph name="SAFE_BROWSING_MODE" /> ivuliwe</translation> -<translation id="3925830358619338299">Amaphasiwedi akho abethelwa kudivayisi yakho ngaphambi kokuthi alondolozwe ku-Google Password Manager</translation> <translation id="3927692899758076493">I-Sans Serif</translation> <translation id="3928666092801078803">Hlanganisa idatha yami</translation> <translation id="3934366560681368531">“</translation> @@ -808,7 +806,6 @@ <translation id="5697688514913266141">Ifayela lakho lizolondolozwa ku-<ph name="BEGIN_BOLD" /><ph name="DIRECTORY" /><ph name="END_BOLD" />. <ph name="BEGIN_LINK2" />Hlela<ph name="END_LINK2" />.</translation> <translation id="570347048394355941">Shintshela Kuthebhu</translation> <translation id="572328651809341494">Amathebhu wakamuva</translation> -<translation id="5723735397759933332">Imodi elula manje ikulondolozela idatha eningi ngokulungiselela izithombe emakhasini e-HTTPS.</translation> <translation id="5726692708398506830">Yenza yonke into kukhasi ibe yinkulu</translation> <translation id="5748802427693696783">Ishintshele kumathebhu ajwayelekile</translation> <translation id="5749068826913805084">I-Chrome idinga ukufinyelela kwesitoreji ukuze ilande amafayela.</translation> @@ -1323,7 +1320,6 @@ <translation id="8427875596167638501">Ithebhu lokubuka kuqala livulwe ngohhafu</translation> <translation id="8428213095426709021">Izilungiselelo</translation> <translation id="8430824733382774043">Yabelana ngezithombe-skrini kuphela</translation> -<translation id="8431730749911729314">Bethela amaphasiwedi kudivayisi yakho ngaphambi kokuba alondolozwe ku-Google Password Manager</translation> <translation id="8438566539970814960">Yenza usesho nokuphequlula kube ngcono</translation> <translation id="8439974325294139057"><ph name="LANG" /> - Ulimi lulungile, qala kabusha i-<ph name="APP_NAME" />.</translation> <translation id="8442258441309440798">Azikho izindaba ezitholakalayo</translation> @@ -1359,7 +1355,6 @@ <translation id="8560602726703398413">Thola uhlu lwakho lokufunda kumabhukhimakhi</translation> <translation id="8562452229998620586">Amaphasiwedi alondoloziwe azovela lapha.</translation> <translation id="856481929701340285">Cela isayithi ledeskithophu</translation> -<translation id="8569404424186215731">kusukela ngomhla ka-<ph name="DATE" /></translation> <translation id="8570677896027847510">Ifayela alikwazi ukudawunilodeka ngokuphephile</translation> <translation id="8571213806525832805">Umjikelezo wesikhathi sokugcina.</translation> <translation id="8572344201470131220">Isithombe Sikopishiwe</translation>
diff --git a/chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm b/chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm index 91603add..d7ddc8f8 100644 --- a/chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm +++ b/chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm
@@ -83,8 +83,8 @@ if (!local_state) FAIL(); - DictionaryPrefUpdateDeprecated dict_update( - local_state, prefs::kTaskManagerColumnVisibility); + DictionaryPrefUpdate dict_update(local_state, + prefs::kTaskManagerColumnVisibility); dict_update->DictClear(); }
diff --git a/chrome/browser/ui/cocoa/window_size_autosaver.mm b/chrome/browser/ui/cocoa/window_size_autosaver.mm index d091057f..6938a16c 100644 --- a/chrome/browser/ui/cocoa/window_size_autosaver.mm +++ b/chrome/browser/ui/cocoa/window_size_autosaver.mm
@@ -53,7 +53,7 @@ } - (void)save:(NSNotification*)notification { - DictionaryPrefUpdateDeprecated update(_prefService, _path); + DictionaryPrefUpdate update(_prefService, _path); base::Value* windowPrefs = update.Get(); NSRect frame = [_window frame]; if ([_window styleMask] & NSResizableWindowMask) { @@ -87,7 +87,7 @@ if (x2.value() - x1.value() < kMinWindowWidth || y2.value() - y1.value() < kMinWindowHeight) { // Windows should never be very small. - DictionaryPrefUpdateDeprecated update(_prefService, _path); + DictionaryPrefUpdate update(_prefService, _path); base::Value* mutableWindowPrefs = update.Get(); mutableWindowPrefs->RemoveKey("left"); mutableWindowPrefs->RemoveKey("right");
diff --git a/chrome/browser/ui/cocoa/window_size_autosaver_unittest.mm b/chrome/browser/ui/cocoa/window_size_autosaver_unittest.mm index d12a94c..365ff61 100644 --- a/chrome/browser/ui/cocoa/window_size_autosaver_unittest.mm +++ b/chrome/browser/ui/cocoa/window_size_autosaver_unittest.mm
@@ -180,7 +180,7 @@ PrefService* pref = profile()->GetPrefs(); ASSERT_TRUE(pref); - DictionaryPrefUpdateDeprecated update(pref, path_); + DictionaryPrefUpdate update(pref, path_); base::Value* windowPref = update.Get(); windowPref->SetIntKey("left", 50); windowPref->SetIntKey("right", 50);
diff --git a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc index 27300cb..ae64db9 100644 --- a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc +++ b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
@@ -56,8 +56,8 @@ #include "ui/views/controls/separator.h" #include "ui/views/controls/throbber.h" #include "ui/views/layout/box_layout.h" -#include "ui/views/layout/fill_layout.h" #include "ui/views/layout/flex_layout.h" +#include "ui/views/layout/table_layout_view.h" #include "ui/views/style/typography.h" #include "ui/views/style/typography_provider.h" #include "ui/views/view.h" @@ -125,18 +125,20 @@ } // Builds a column set for |layout| used in the autofill dropdown. -void BuildColumnSet(views::GridLayout* layout) { - views::ColumnSet* column_set = layout->AddColumnSet(0); +void BuildColumnSet(views::TableLayoutView* layout_view) { const int column_divider = ChromeLayoutProvider::Get()->GetDistanceMetric( DISTANCE_RELATED_LABEL_HORIZONTAL_LIST); - column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, - views::GridLayout::kFixedSize, - views::GridLayout::ColumnSize::kUsePreferred, 0, 0); - column_set->AddPaddingColumn(views::GridLayout::kFixedSize, column_divider); - column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, - views::GridLayout::kFixedSize, - views::GridLayout::ColumnSize::kUsePreferred, 0, 0); + layout_view + ->AddColumn(views::LayoutAlignment::kStart, + views::LayoutAlignment::kStretch, + views::TableLayout::kFixedSize, + views::TableLayout::ColumnSize::kUsePreferred, 0, 0) + .AddPaddingColumn(views::TableLayout::kFixedSize, column_divider) + .AddColumn(views::LayoutAlignment::kStart, + views::LayoutAlignment::kStretch, + views::TableLayout::kFixedSize, + views::TableLayout::ColumnSize::kUsePreferred, 0, 0); } std::unique_ptr<views::ImageView> ImageViewFromImageSkia( @@ -702,11 +704,9 @@ CreateSubtextViews(); std::unique_ptr<views::View> description_label = CreateDescriptionView(); - std::unique_ptr<views::View> all_labels = std::make_unique<views::View>(); - views::GridLayout* grid_layout = - all_labels->SetLayoutManager(std::make_unique<views::GridLayout>()); - BuildColumnSet(grid_layout); - grid_layout->StartRow(0, 0); + auto all_labels = std::make_unique<views::TableLayoutView>(); + BuildColumnSet(all_labels.get()); + all_labels->AddRows(1, 0); // Create the first line text view. if (minor_text_label) { @@ -727,22 +727,22 @@ first_line_container->AddChildView(std::move(main_text_label)); first_line_container->AddChildView(std::move(minor_text_label)); - grid_layout->AddView(std::move(first_line_container)); + all_labels->AddChildView(std::move(first_line_container)); } else { - grid_layout->AddView(std::move(main_text_label)); + all_labels->AddChildView(std::move(main_text_label)); } if (description_label) { - grid_layout->AddView(std::move(description_label)); + all_labels->AddChildView(std::move(description_label)); } else { - grid_layout->SkipColumns(1); + all_labels->AddChildView(std::make_unique<views::View>()); } UpdateLayoutSize(layout_manager, subtext_labels.size()); for (std::unique_ptr<views::View>& subtext_label : subtext_labels) { - grid_layout->StartRowWithPadding(0, 0, 0, kAdjacentLabelsVerticalSpacing); - grid_layout->AddView(std::move(subtext_label)); - grid_layout->SkipColumns(1); + all_labels->AddPaddingRow(0, kAdjacentLabelsVerticalSpacing).AddRows(1, 0); + all_labels->AddChildView(std::move(subtext_label)); + all_labels->AddChildView(std::make_unique<views::View>()); } AddChildView(std::move(all_labels)); @@ -1174,7 +1174,7 @@ } void AutofillPopupSeparatorView::CreateContent() { - SetLayoutManager(std::make_unique<views::FillLayout>()); + SetUseDefaultFillLayout(true); AddChildView(std::make_unique<PopupSeparator>(popup_view())); } @@ -1229,7 +1229,7 @@ int horizontal_margin = GetHorizontalMargin(); int vertical_margin = AutofillPopupBaseView::GetCornerRadius(); - SetLayoutManager(std::make_unique<views::FillLayout>()); + SetUseDefaultFillLayout(true); SetBorder(views::CreateEmptyBorder( gfx::Insets(vertical_margin, horizontal_margin))); @@ -1551,7 +1551,7 @@ (footer_item_line_numbers.empty()) ? GetContentsVerticalPadding() : 0, 0))); - padding_wrapper->SetLayoutManager(std::make_unique<views::FillLayout>()); + padding_wrapper->SetUseDefaultFillLayout(true); padding_wrapper->AddChildView(scroll_view_.get()); content_view->AddChildView(padding_wrapper); content_layout->SetFlexForView(padding_wrapper, 1);
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest.cc b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest.cc index 4123cfc..d9f27d5 100644 --- a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest.cc
@@ -363,6 +363,35 @@ IntentPickerBubbleViewPrerenderingBrowserTest, testing::Values("", "noopener", "noreferrer", "nofollow")); +class IntentPickerChipEnabledBrowserTest + : public IntentPickerBubbleViewBrowserTest { + public: + IntentPickerChipEnabledBrowserTest() { + scoped_feature_list_.InitAndEnableFeature(features::kLinkCapturingUiUpdate); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +// When kLinkCapturingUiUpdate is enabled, clicking the Intent Picker icon +// should open the app directly, without showing the bubble. +IN_PROC_BROWSER_TEST_F(IntentPickerChipEnabledBrowserTest, SkipBubble) { + auto app_id = InstallTestWebApp(GetAppUrlHost(), GetAppScopePath()); + PageActionIconView* intent_picker_view = GetIntentPickerIcon(); + + const GURL in_scope_url = + https_server().GetURL(GetAppUrlHost(), GetInScopeUrlPath()); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), in_scope_url)); + + ASSERT_TRUE(intent_picker_view->GetVisible()); + intent_picker_view->ExecuteForTesting(); + + Browser* app_browser = BrowserList::GetInstance()->GetLastActive(); + EXPECT_TRUE(web_app::AppBrowserController::IsForWebApp(app_browser, app_id)); + ASSERT_FALSE(intent_picker_bubble()); +} + class IntentPickerDialogTest : public DialogBrowserTest { public: IntentPickerDialogTest() = default;
diff --git a/chrome/browser/ui/views/payments/order_summary_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/order_summary_view_controller_browsertest.cc index af2759b..379dfce 100644 --- a/chrome/browser/ui/views/payments/order_summary_view_controller_browsertest.cc +++ b/chrome/browser/ui/views/payments/order_summary_view_controller_browsertest.cc
@@ -5,10 +5,12 @@ #include <list> #include "base/strings/utf_string_conversions.h" +#include "base/test/scoped_feature_list.h" #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h" #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" #include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/data_model/autofill_profile.h" +#include "content/public/common/content_features.h" #include "content/public/test/browser_test.h" #include "testing/gtest/include/gtest/gtest.h" @@ -23,7 +25,12 @@ const PaymentRequestOrderSummaryViewControllerTest&) = delete; protected: - PaymentRequestOrderSummaryViewControllerTest() {} + PaymentRequestOrderSummaryViewControllerTest() { + feature_list_.InitAndEnableFeature(::features::kPaymentRequestBasicCard); + } + + private: + base::test::ScopedFeatureList feature_list_; }; IN_PROC_BROWSER_TEST_F(PaymentRequestOrderSummaryViewControllerTest, @@ -136,4 +143,139 @@ EXPECT_EQ(u"$5.00", GetLabelText(DialogViewID::ORDER_SUMMARY_LINE_ITEM_2)); } +class PaymentRequestOrderSummaryViewControllerBasicCardDisabledTest + : public PaymentRequestBrowserTestBase { + public: + PaymentRequestOrderSummaryViewControllerBasicCardDisabledTest( + const PaymentRequestOrderSummaryViewControllerBasicCardDisabledTest&) = + delete; + PaymentRequestOrderSummaryViewControllerBasicCardDisabledTest& operator=( + const PaymentRequestOrderSummaryViewControllerBasicCardDisabledTest&) = + delete; + + protected: + PaymentRequestOrderSummaryViewControllerBasicCardDisabledTest() { + feature_list_.InitAndDisableFeature(::features::kPaymentRequestBasicCard); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F( + PaymentRequestOrderSummaryViewControllerBasicCardDisabledTest, + OrderSummaryReflectsShippingOption) { + std::string payment_method_name; + InstallPaymentApp("a.com", "payment_request_success_responder.js", + &payment_method_name); + + NavigateTo("/payment_request_dynamic_shipping_test.html"); + // In MI state, shipping is $5.00. + autofill::AutofillProfile michigan = autofill::test::GetFullProfile2(); + michigan.set_use_count(100U); + AddAutofillProfile(michigan); + // In CA state, there is free shipping. + autofill::AutofillProfile california = autofill::test::GetFullProfile(); + california.set_use_count(50U); + AddAutofillProfile(california); + + InvokePaymentRequestUIWithJs("buyWithMethods([{supportedMethods:'" + + payment_method_name + "'}]);"); + + OpenOrderSummaryScreen(); + + // No address is selected. + // Verify the expected amounts are shown ('Total', 'Pending Shipping Price' + // and 'Subtotal', respectively). + EXPECT_EQ(u"USD", + GetLabelText(DialogViewID::ORDER_SUMMARY_TOTAL_CURRENCY_LABEL)); + EXPECT_EQ(u"$5.00", + GetLabelText(DialogViewID::ORDER_SUMMARY_TOTAL_AMOUNT_LABEL)); + EXPECT_EQ(u"$0.00", GetLabelText(DialogViewID::ORDER_SUMMARY_LINE_ITEM_1)); + EXPECT_EQ(u"$5.00", GetLabelText(DialogViewID::ORDER_SUMMARY_LINE_ITEM_2)); + + // Go to the shipping address screen and select the first address (MI state). + ClickOnBackArrow(); + OpenShippingAddressSectionScreen(); + ResetEventWaiterForSequence({DialogEvent::PROCESSING_SPINNER_SHOWN, + DialogEvent::PROCESSING_SPINNER_HIDDEN, + DialogEvent::SPEC_DONE_UPDATING, + DialogEvent::BACK_NAVIGATION}); + ClickOnChildInListViewAndWait( + /* child_index=*/0, /*total_num_children=*/2, + DialogViewID::SHIPPING_ADDRESS_SHEET_LIST_VIEW, + /*wait_for_animation=*/false); + // Wait for the animation here explicitly, otherwise + // ClickOnChildInListViewAndWait tries to install an AnimationDelegate before + // the animation is kicked off (since that's triggered off of the spec being + // updated) and this hits a DCHECK. + WaitForAnimation(); + + // Michigan address is selected and has standard shipping. + std::vector<std::u16string> shipping_address_labels = GetProfileLabelValues( + DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION); + EXPECT_EQ(u"Jane A. Smith", shipping_address_labels[0]); + EXPECT_EQ(u"ACME, 123 Main Street, Unit 1, Greensdale, MI 48838", + shipping_address_labels[1]); + EXPECT_EQ(u"+1 310-555-7889", shipping_address_labels[2]); + std::vector<std::u16string> shipping_option_labels = + GetShippingOptionLabelValues( + DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION); + EXPECT_EQ(u"Standard shipping in US", shipping_option_labels[0]); + EXPECT_EQ(u"$5.00", shipping_option_labels[1]); + + // Go back to Order Summary screen to see updated totals. + OpenOrderSummaryScreen(); + + // Verify the expected amounts are shown ('Total', 'Standard shipping in US' + // and 'Subtotal', respectively). + EXPECT_EQ(u"USD", + GetLabelText(DialogViewID::ORDER_SUMMARY_TOTAL_CURRENCY_LABEL)); + EXPECT_EQ(u"$10.00", + GetLabelText(DialogViewID::ORDER_SUMMARY_TOTAL_AMOUNT_LABEL)); + EXPECT_EQ(u"$5.00", GetLabelText(DialogViewID::ORDER_SUMMARY_LINE_ITEM_1)); + EXPECT_EQ(u"$5.00", GetLabelText(DialogViewID::ORDER_SUMMARY_LINE_ITEM_2)); + + // Go to the shipping address screen and select the second address (CA state). + ClickOnBackArrow(); + OpenShippingAddressSectionScreen(); + ResetEventWaiterForSequence({DialogEvent::PROCESSING_SPINNER_SHOWN, + DialogEvent::PROCESSING_SPINNER_HIDDEN, + DialogEvent::SPEC_DONE_UPDATING, + DialogEvent::BACK_NAVIGATION}); + ClickOnChildInListViewAndWait( + /* child_index=*/1, /*total_num_children=*/2, + DialogViewID::SHIPPING_ADDRESS_SHEET_LIST_VIEW, + /*wait_for_animation=*/false); + // Wait for the animation here explicitly, otherwise + // ClickOnChildInListViewAndWait tries to install an AnimationDelegate before + // the animation is kicked off (since that's triggered off of the spec being + // updated) and this hits a DCHECK. + WaitForAnimation(); + + // California address is selected and has free shipping. + shipping_address_labels = GetProfileLabelValues( + DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION); + EXPECT_EQ(u"John H. Doe", shipping_address_labels[0]); + EXPECT_EQ(u"Underworld, 666 Erebus St., Apt 8, Elysium, CA 91111", + shipping_address_labels[1]); + EXPECT_EQ(u"+1 650-211-1111", shipping_address_labels[2]); + shipping_option_labels = GetShippingOptionLabelValues( + DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION); + EXPECT_EQ(u"Free shipping in California", shipping_option_labels[0]); + EXPECT_EQ(u"$0.00", shipping_option_labels[1]); + + // Go back to Order Summary screen to see updated totals. + OpenOrderSummaryScreen(); + + // Verify the expected amounts are shown ('Total', + // 'Free shipping in California' and 'Subtotal', respectively). + EXPECT_EQ(u"USD", + GetLabelText(DialogViewID::ORDER_SUMMARY_TOTAL_CURRENCY_LABEL)); + EXPECT_EQ(u"$5.00", + GetLabelText(DialogViewID::ORDER_SUMMARY_TOTAL_AMOUNT_LABEL)); + EXPECT_EQ(u"$0.00", GetLabelText(DialogViewID::ORDER_SUMMARY_LINE_ITEM_1)); + EXPECT_EQ(u"$5.00", GetLabelText(DialogViewID::ORDER_SUMMARY_LINE_ITEM_2)); +} + } // namespace payments
diff --git a/chrome/browser/ui/views/payments/shipping_option_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/shipping_option_view_controller_browsertest.cc index b5da9157..8e79ed15e 100644 --- a/chrome/browser/ui/views/payments/shipping_option_view_controller_browsertest.cc +++ b/chrome/browser/ui/views/payments/shipping_option_view_controller_browsertest.cc
@@ -5,11 +5,13 @@ #include <list> #include "base/strings/utf_string_conversions.h" +#include "base/test/scoped_feature_list.h" #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h" #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" #include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/data_model/autofill_profile.h" #include "components/autofill/core/browser/field_types.h" +#include "content/public/common/content_features.h" #include "content/public/test/browser_test.h" #include "testing/gtest/include/gtest/gtest.h" @@ -24,7 +26,12 @@ const PaymentRequestShippingOptionViewControllerTest&) = delete; protected: - PaymentRequestShippingOptionViewControllerTest() {} + PaymentRequestShippingOptionViewControllerTest() { + feature_list_.InitAndEnableFeature(::features::kPaymentRequestBasicCard); + } + + private: + base::test::ScopedFeatureList feature_list_; }; IN_PROC_BROWSER_TEST_F(PaymentRequestShippingOptionViewControllerTest, @@ -113,4 +120,124 @@ DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION_BUTTON))); } +// The tests in this class correspond to the tests of the same name in +// PaymentRequestShippingOptionViewControllerTest, with basic-card disabled. +// Parameterized tests are not used because the test setup for both tests are +// too different. +class PaymentRequestShippingOptionViewControllerBasicCardDisabledTest + : public PaymentRequestBrowserTestBase { + public: + PaymentRequestShippingOptionViewControllerBasicCardDisabledTest( + const PaymentRequestShippingOptionViewControllerBasicCardDisabledTest&) = + delete; + PaymentRequestShippingOptionViewControllerBasicCardDisabledTest& operator=( + const PaymentRequestShippingOptionViewControllerBasicCardDisabledTest&) = + delete; + + protected: + PaymentRequestShippingOptionViewControllerBasicCardDisabledTest() { + feature_list_.InitAndDisableFeature(::features::kPaymentRequestBasicCard); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F( + PaymentRequestShippingOptionViewControllerBasicCardDisabledTest, + SelectingVariousShippingOptions) { + // Installs two apps so that the Payment Request UI will be shown. + std::string a_method_name; + InstallPaymentApp("a.com", "payment_request_success_responder.js", + &a_method_name); + std::string b_method_name; + InstallPaymentApp("b.com", "payment_request_success_responder.js", + &b_method_name); + + NavigateTo("/payment_request_dynamic_shipping_test.html"); + // In MI state, shipping is $5.00. + autofill::AutofillProfile michigan = autofill::test::GetFullProfile2(); + michigan.set_use_count(100U); + AddAutofillProfile(michigan); + // A Canadian address will have no shipping options. + autofill::AutofillProfile canada = autofill::test::GetFullProfile(); + canada.SetRawInfo(autofill::ADDRESS_HOME_COUNTRY, u"CA"); + canada.set_use_count(50U); + AddAutofillProfile(canada); + + InvokePaymentRequestUIWithJs(content::JsReplace( + "buyWithMethods([{supportedMethods:$1}, {supportedMethods:$2}]);", + a_method_name, b_method_name)); + + // There is no shipping option section, because no address has been selected. + PaymentRequest* request = GetPaymentRequests().front(); + EXPECT_EQ(2U, request->state()->shipping_profiles().size()); + EXPECT_EQ(nullptr, request->state()->selected_shipping_profile()); + EXPECT_EQ(nullptr, dialog_view()->GetViewByID(static_cast<int>( + DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION))); + EXPECT_EQ(nullptr, + dialog_view()->GetViewByID(static_cast<int>( + DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION_BUTTON))); + + // Go to the shipping address screen and select the first address (MI state). + OpenShippingAddressSectionScreen(); + EXPECT_EQ(u"To see shipping methods and requirements, select an address", + GetLabelText(DialogViewID::WARNING_LABEL)); + + ResetEventWaiterForSequence({DialogEvent::PROCESSING_SPINNER_SHOWN, + DialogEvent::PROCESSING_SPINNER_HIDDEN, + DialogEvent::SPEC_DONE_UPDATING, + DialogEvent::BACK_NAVIGATION}); + ClickOnChildInListViewAndWait( + /* child_index=*/0, /*total_num_children=*/2, + DialogViewID::SHIPPING_ADDRESS_SHEET_LIST_VIEW, + /*wait_for_animation=*/false); + // Wait for the animation here explicitly, otherwise + // ClickOnChildInListViewAndWait tries to install an AnimationDelegate before + // the animation is kicked off (since that's triggered off of the spec being + // updated) and this hits a DCHECK. + WaitForAnimation(); + + // Michigan address is selected and has standard shipping. + std::vector<std::u16string> shipping_address_labels = GetProfileLabelValues( + DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION); + EXPECT_EQ(u"Jane A. Smith", shipping_address_labels[0]); + EXPECT_EQ(u"ACME, 123 Main Street, Unit 1, Greensdale, MI 48838", + shipping_address_labels[1]); + EXPECT_EQ(u"+1 310-555-7889", shipping_address_labels[2]); + + // The shipping option section exists, and the shipping option is shown. + std::vector<std::u16string> shipping_option_labels = + GetShippingOptionLabelValues( + DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION); + EXPECT_EQ(u"Standard shipping in US", shipping_option_labels[0]); + EXPECT_EQ(u"$5.00", shipping_option_labels[1]); + + // Go to the shipping address screen and select the second address (Canada). + OpenShippingAddressSectionScreen(); + ResetEventWaiterForSequence({DialogEvent::PROCESSING_SPINNER_SHOWN, + DialogEvent::PROCESSING_SPINNER_HIDDEN, + DialogEvent::SPEC_DONE_UPDATING}); + ClickOnChildInListViewAndWait( + /* child_index=*/1, /*total_num_children=*/2, + DialogViewID::SHIPPING_ADDRESS_SHEET_LIST_VIEW, false); + + // Now no address is selected. + EXPECT_EQ(nullptr, request->state()->selected_shipping_profile()); + EXPECT_EQ(request->state()->shipping_profiles().back(), + request->state()->selected_shipping_option_error_profile()); + + // The address selector has this error. + EXPECT_EQ(u"We do not ship to this address", + GetLabelText(DialogViewID::WARNING_LABEL)); + + // There is no a longer shipping option section, because no shipping options + // are available for Canada. + EXPECT_EQ(nullptr, dialog_view()->GetViewByID(static_cast<int>( + DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION))); + EXPECT_EQ(nullptr, + dialog_view()->GetViewByID(static_cast<int>( + DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION_BUTTON))); +} + } // namespace payments
diff --git a/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.cc b/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.cc index 745613b1a..301015e 100644 --- a/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.cc +++ b/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.cc
@@ -157,28 +157,21 @@ } } -void ArcPowerControlHandler::OnThrottle(ThrottleObserver::PriorityLevel level) { +void ArcPowerControlHandler::OnThrottle(bool throttled) { UpdatePowerControlStatus(); - std::string mode; - switch (instance_throttle_->enforced_level()) { - case ThrottleObserver::PriorityLevel::UNKNOWN: - mode = kThrottlingAuto; - break; - case ThrottleObserver::PriorityLevel::LOW: - mode = kThrottlingForce; - break; - default: - mode = kThrottlingDisable; - break; - } + std::string mode = kThrottlingAuto; + auto* observer = instance_throttle_->GetObserverByName( + arc::ArcInstanceThrottle::kChromeArcPowerControlPageObserver); + if (observer && observer->enforced()) + mode = observer->active() ? kThrottlingDisable : kThrottlingForce; CallJavascriptFunction(GetJavascriptDomain() + "setThrottlingMode", base::Value(mode)); if (stop_tracing_timer_.IsRunning()) { throttling_events_.emplace_back( - std::make_pair(TRACE_TIME_TICKS_NOW(), level)); + std::make_pair(TRACE_TIME_TICKS_NOW(), throttled)); } } @@ -199,7 +192,7 @@ base::BindOnce(&ArcPowerControlHandler::OnIsDeveloperMode, weak_ptr_factory_.GetWeakPtr())); - OnThrottle(instance_throttle_->level()); + OnThrottle(instance_throttle_->should_throttle()); } void ArcPowerControlHandler::HandleSetWakefulnessMode( @@ -261,20 +254,28 @@ return; } - ThrottleObserver::PriorityLevel enforced_level; + auto* observer = instance_throttle_->GetObserverByName( + arc::ArcInstanceThrottle::kChromeArcPowerControlPageObserver); + if (!observer) { + LOG(ERROR) + << "An throttle observer for chrome://arc-power-control not found"; + return; + } + const std::string mode = args->GetList()[0].GetString(); if (mode == kThrottlingDisable) { - enforced_level = ThrottleObserver::PriorityLevel::CRITICAL; + observer->SetActive(true); + observer->SetEnforced(true); } else if (mode == kThrottlingAuto) { - enforced_level = ThrottleObserver::PriorityLevel::UNKNOWN; + observer->SetActive(false); + observer->SetEnforced(false); } else if (mode == kThrottlingForce) { - enforced_level = ThrottleObserver::PriorityLevel::LOW; + observer->SetActive(false); + observer->SetEnforced(true); } else { LOG(ERROR) << "Invalid mode: " << mode; return; } - - instance_throttle_->SetEnforced(enforced_level); } void ArcPowerControlHandler::HandleStartTracing(const base::ListValue* args) { @@ -298,7 +299,7 @@ std::make_pair(tracing_time_min_, wakefulness_mode_)); throttling_events_.clear(); throttling_events_.emplace_back( - std::make_pair(tracing_time_min_, instance_throttle_->level())); + std::make_pair(tracing_time_min_, instance_throttle_->should_throttle())); system_stat_collector_ = std::make_unique<arc::ArcSystemStatCollector>(); system_stat_collector_->Start(kMaxIntervalToDisplay); stop_tracing_timer_.Start(FROM_HERE, system_stat_collector_->max_interval(), @@ -361,23 +362,10 @@ } status += " ("; - switch (instance_throttle_->level()) { - case ThrottleObserver::PriorityLevel::UNKNOWN: - status += "throttling unknown"; - break; - case ThrottleObserver::PriorityLevel::LOW: - status += "throttling"; - break; - case ThrottleObserver::PriorityLevel::NORMAL: - status += "foreground"; - break; - case ThrottleObserver::PriorityLevel::IMPORTANT: - status += "important foreground"; - break; - case ThrottleObserver::PriorityLevel::CRITICAL: - status += "critical foreground"; - break; - } + if (instance_throttle_->should_throttle()) + status += "throttling"; + else + status += "critical foreground"; status += ")"; CallJavascriptFunction(GetJavascriptDomain() + "setPowerControlStatus",
diff --git a/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h b/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h index a3e9601..d99333d 100644 --- a/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h +++ b/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h
@@ -34,9 +34,11 @@ using WakefulnessModeEvents = std::vector<std::pair<base::TimeTicks, arc::mojom::WakefulnessMode>>; using ThrottlingEvents = - std::vector<std::pair<base::TimeTicks, ThrottleObserver::PriorityLevel>>; + std::vector<std::pair<base::TimeTicks, bool /*should_throttle*/>>; ArcPowerControlHandler(); + ArcPowerControlHandler(ArcPowerControlHandler const&) = delete; + ArcPowerControlHandler& operator=(ArcPowerControlHandler const&) = delete; ~ArcPowerControlHandler() override; // content::WebUIMessageHandler: @@ -46,7 +48,7 @@ void OnWakefulnessChanged(arc::mojom::WakefulnessMode mode) override; // ThrottleService::ServiceObserver: - void OnThrottle(ThrottleObserver::PriorityLevel level) override; + void OnThrottle(bool throttled) override; private: // Handlers for calls from JS. @@ -87,9 +89,6 @@ bool power_control_enabled_ = false; base::WeakPtrFactory<ArcPowerControlHandler> weak_ptr_factory_{this}; - - ArcPowerControlHandler(ArcPowerControlHandler const&) = delete; - ArcPowerControlHandler& operator=(ArcPowerControlHandler const&) = delete; }; } // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc index c6a1bc3..b231bfd 100644 --- a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc
@@ -32,6 +32,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/chromeos/login/cookie_waiter.h" #include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h" +#include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler.h" @@ -291,11 +292,6 @@ } } -void EnrollmentScreenHandler::ShowEnrollmentCloudReadyNotAllowedError() { - ShowScreen(EnrollmentScreenView::kScreenId); - CallJS("login.OAuthEnrollmentScreen.showOSNotInstalledError"); -} - void EnrollmentScreenHandler::ShowActiveDirectoryScreen( const std::string& domain_join_config, const std::string& machine_name, @@ -461,10 +457,6 @@ shutdown_ = true; } -void EnrollmentScreenHandler::SetIsBrandedBuild(bool is_branded) { - CallJS("login.OAuthEnrollmentScreen.setIsBrandedBuild", is_branded); -} - void EnrollmentScreenHandler::ShowEnrollmentStatus( policy::EnrollmentStatus status) { switch (status.status()) { @@ -658,8 +650,6 @@ builder->Add("oauthEnrollSuccessTitle", IDS_ENTERPRISE_ENROLLMENT_SUCCESS_TITLE); builder->Add("oauthEnrollErrorTitle", IDS_ENTERPRISE_ENROLLMENT_ERROR_TITLE); - builder->Add("oauthOSNotInstalledError", - IDS_ENTERPRISE_ENROLLMENT_STATUS_CLOUD_READY_NOT_ALLOWED); builder->Add("oauthEnrollDeviceInformation", IDS_ENTERPRISE_ENROLLMENT_DEVICE_INFORMATION); builder->Add("oauthEnrollExplainAttributeLink", @@ -1034,6 +1024,15 @@ retry); } +void EnrollmentScreenHandler::ShowEnrollmentDuringTrialNotAllowedError() { + ShowScreen(EnrollmentScreenView::kScreenId); + ShowErrorMessage( + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_ENROLLMENT_STATUS_CLOUD_READY_NOT_ALLOWED, + l10n_util::GetStringUTF16(IDS_INSTALLED_PRODUCT_OS_NAME)), + /*retry=*/false); +} + void EnrollmentScreenHandler::ShowErrorMessage(const std::string& message, bool retry) { CallJS("login.OAuthEnrollmentScreen.showError", message, retry);
diff --git a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h index 0893f6d..b156593 100644 --- a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h
@@ -85,7 +85,7 @@ void ShowSigninScreen() override; void ShowUserError(UserErrorType error_type, const std::string& email) override; - void ShowEnrollmentCloudReadyNotAllowedError() override; + void ShowEnrollmentDuringTrialNotAllowedError() override; void ShowActiveDirectoryScreen(const std::string& domain_join_config, const std::string& machine_name, const std::string& username, @@ -100,7 +100,6 @@ void ShowOtherError( EnterpriseEnrollmentHelper::OtherError error_code) override; void Shutdown() override; - void SetIsBrandedBuild(bool is_branded) override; // Implements BaseScreenHandler: void Initialize() override;
diff --git a/chrome/browser/ui/webui/history/foreign_session_handler.cc b/chrome/browser/ui/webui/history/foreign_session_handler.cc index e607b4e..874d3b01 100644 --- a/chrome/browser/ui/webui/history/foreign_session_handler.cc +++ b/chrome/browser/ui/webui/history/foreign_session_handler.cc
@@ -334,10 +334,10 @@ FormatSessionTime(session->modified_time)); session_data.SetDoubleKey("timestamp", session->modified_time.ToJsTime()); - bool is_collapsed = collapsed_sessions->HasKey(session_tag); + bool is_collapsed = collapsed_sessions->FindKey(session_tag); session_data.SetBoolKey("collapsed", is_collapsed); if (is_collapsed) - current_collapsed_sessions->SetBoolean(session_tag, true); + current_collapsed_sessions->SetBoolKey(session_tag, true); base::Value window_list(base::Value::Type::LIST);
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc index 0dacad6..8956cc8 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
@@ -580,8 +580,7 @@ void NewTabPageHandler::SetModuleDisabled(const std::string& module_id, bool disabled) { - ListPrefUpdateDeprecated update(profile_->GetPrefs(), - prefs::kNtpDisabledModules); + ListPrefUpdate update(profile_->GetPrefs(), prefs::kNtpDisabledModules); base::Value module_id_value(module_id); if (disabled) { if (!base::Contains(update->GetList(), module_id_value))
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc index 01471b2..d5df6cf9 100644 --- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc +++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -634,8 +634,8 @@ const base::Value* app_page_names = prefs->GetList(prefs::kNtpAppPageNames); if (!app_page_names || !app_page_names->GetList().size()) { - ListPrefUpdateDeprecated update(prefs, prefs::kNtpAppPageNames); - base::ListValue* list = update.Get(); + ListPrefUpdate update(prefs, prefs::kNtpAppPageNames); + base::Value* list = update.Get(); list->Append(l10n_util::GetStringUTF16(IDS_APP_DEFAULT_PAGE_NAME)); dictionary->SetKey("appPageNames", list->Clone()); } else { @@ -1074,8 +1074,8 @@ base::AutoReset<bool> auto_reset(&ignore_changes_, true); PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs(); - ListPrefUpdateDeprecated update(prefs, prefs::kNtpAppPageNames); - base::ListValue* list = update.Get(); + ListPrefUpdate update(prefs, prefs::kNtpAppPageNames); + base::Value* list = update.Get(); if (page_index < list->GetList().size()) { list->GetList()[page_index] = base::Value(name); } else {
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc index a822b7e..0223659 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc
@@ -516,7 +516,7 @@ if (!user_accepted_management) { chrome::enterprise_util::SetUserAcceptedAccountManagement( profile_, enterprise_account_confirmed_); - user_accepted_management = true; + user_accepted_management = enterprise_account_confirmed_; } if (user_accepted_management) signin_aborted_mode_ = SigninAbortedMode::KEEP_ACCOUNT;
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc index 023e3c5..6c113734 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
@@ -19,6 +19,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/enterprise/browser_management/management_service_factory.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/policy/cloud/user_policy_signin_service.h" #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" #include "chrome/browser/profiles/profile.h" @@ -232,10 +233,16 @@ EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); TestingBrowserProcess::GetGlobal()->SetProfileManager( std::make_unique<UnittestProfileManager>(temp_dir_.GetPath())); + auto testing_profile = BuildTestingProfile( + temp_dir_.GetPath().Append(FILE_PATH_LITERAL("profile")), + /*delegate=*/nullptr); + profile_ = testing_profile.get(); - profile_ = BuildTestingProfile(base::FilePath(), /*delegate=*/nullptr); + // Makes sure the profile has profile storage entries. + profile_manager()->RegisterTestingProfile(std::move(testing_profile), + /*add_to_storage=*/true); identity_test_env_profile_adaptor_ = - std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile_.get()); + std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile_); account_id_ = identity_test_env()->MakeAccountAvailable(kEmail).account_id; user_policy_signin_service_ = static_cast<FakeUserPolicySigninService*>( policy::UserPolicySigninServiceFactory::GetForProfile(profile())); @@ -247,13 +254,12 @@ ~DiceTurnSyncOnHelperTest() override { DCHECK_GT(delegate_destroyed_, 0); - // Destroy extra profiles. - TestingBrowserProcess::GetGlobal()->SetProfileManager(nullptr); + ClearProfile(); base::RunLoop().RunUntilIdle(); } // Basic accessors. - Profile* profile() { return profile_.get(); } + Profile* profile() { return profile_; } Profile* new_profile() { return new_profile_; } signin::IdentityTestEnvironment* identity_test_env() { return identity_test_env_profile_adaptor_->identity_test_env(); @@ -277,7 +283,8 @@ } void ClearProfile() { identity_test_env_profile_adaptor_.reset(); - profile_.reset(); + TestingBrowserProcess::GetGlobal()->SetProfileManager(nullptr); + profile_ = nullptr; user_policy_signin_service_ = nullptr; } @@ -364,7 +371,7 @@ #endif } - void CheckSyncAborted() { + void CheckSyncAborted(bool has_primary_account) { // TODO(crbug.com/1263553): Get rid of the lacros special casing once sync // disabled is fully supported on lacros. #if BUILDFLAG(IS_CHROMEOS_LACROS) @@ -376,7 +383,8 @@ #else EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(account_id())); + EXPECT_EQ(has_primary_account, + identity_manager()->HasAccountWithRefreshToken(account_id())); #endif } @@ -511,7 +519,7 @@ base::ScopedTempDir temp_dir_; ScopedTestingLocalState local_state_; CoreAccountId account_id_; - std::unique_ptr<TestingProfile> profile_; + TestingProfile* profile_; std::unique_ptr<IdentityTestEnvironmentProfileAdaptor> identity_test_env_profile_adaptor_; raw_ptr<FakeUserPolicySigninService> user_policy_signin_service_ = nullptr; @@ -649,7 +657,7 @@ DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); base::RunLoop().RunUntilIdle(); // Check expectations. - CheckSyncAborted(); + CheckSyncAborted(/*has_primary_account=*/false); CheckDelegateCalls(); } @@ -670,7 +678,7 @@ DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); base::RunLoop().RunUntilIdle(); // Check expectations. - CheckSyncAborted(); + CheckSyncAborted(/*has_primary_account=*/false); CheckDelegateCalls(); } @@ -741,6 +749,27 @@ EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(account_id())); CheckDelegateCalls(); } + +// Aborts the flow after the cross account dialog. +TEST_F(DiceTurnSyncOnHelperTest, CrossAccountAbortAlreadyManaged) { + // Set expectations. + expected_merge_data_previous_email_ = kPreviousEmail; + expected_merge_data_new_email_ = kEmail; + // Configure the test. + profile()->GetPrefs()->SetString(prefs::kGoogleServicesLastUsername, + kPreviousEmail); + user_policy_signin_service()->set_dm_token("foo"); + user_policy_signin_service()->set_client_id("bar"); + chrome::enterprise_util::SetUserAcceptedAccountManagement(profile(), true); + // Signin flow. + CreateDiceTurnOnSyncHelper( + DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + // Check expectations. + EXPECT_FALSE( + identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); + EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(account_id())); + CheckDelegateCalls(); +} #endif // Merge data after the cross account dialog. @@ -758,7 +787,31 @@ CreateDiceTurnOnSyncHelper( DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. - CheckSyncAborted(); + CheckSyncAborted(/*has_primary_account=*/false); + CheckDelegateCalls(); +} + +// Merge data after the cross account dialog. +TEST_F(DiceTurnSyncOnHelperTest, CrossAccountContinueAlreadyManaged) { + // Set expectations. + expected_merge_data_previous_email_ = kPreviousEmail; + expected_merge_data_new_email_ = kEmail; + expected_sync_confirmation_shown_ = true; + SetExpectationsForSyncStartupCompleted(profile()); + // Configure the test. + merge_data_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; + profile()->GetPrefs()->SetString(prefs::kGoogleServicesLastUsername, + kPreviousEmail); + user_policy_signin_service()->set_dm_token("foo"); + user_policy_signin_service()->set_client_id("bar"); + chrome::enterprise_util::SetUserAcceptedAccountManagement(profile(), true); + // Signin flow. + CreateDiceTurnOnSyncHelper( + DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + // Check expectations. + // This was already a signed-in and managed enterprise account so we keep the + // user signed-in, overriding SigninAbortedMode::REMOVE_ACCOUNT. + CheckSyncAborted(/*has_primary_account=*/true); CheckDelegateCalls(); } @@ -885,6 +938,32 @@ signin::ConsentLevel::kSignin)); CheckDelegateCalls(); } + +// Test that the unconsented primary account is kept if the user creates a new +// account and cancels sync activation. +TEST_F(DiceTurnSyncOnHelperTest, SignedInAccountUndoSyncRemoveAccount) { + // Set expectations. + expected_enterprise_confirmation_email_ = kEnterpriseEmail; + expected_sync_confirmation_shown_ = true; + sync_confirmation_result_ = + LoginUIService::SyncConfirmationUIClosedResult::ABORT_SYNC; + SetExpectationsForSyncStartupCompleted(profile()); + // Configure the test. + user_policy_signin_service()->set_dm_token("foo"); + user_policy_signin_service()->set_client_id("bar"); + enterprise_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; + UseEnterpriseAccount(); + identity_manager()->GetPrimaryAccountMutator()->SetPrimaryAccount( + account_id(), signin::ConsentLevel::kSignin); + + // Signin flow. + CreateDiceTurnOnSyncHelper( + DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + // This was already a signed-in and managed enterprise account so we keep the + // user signed-in, overriding SigninAbortedMode::REMOVE_ACCOUNT. + CheckSyncAborted(/*has_primary_account=*/true); + CheckDelegateCalls(); +} #endif // Tests that the sync confirmation is shown and the user can abort. @@ -900,7 +979,7 @@ CreateDiceTurnOnSyncHelper( DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. - CheckSyncAborted(); + CheckSyncAborted(/*has_primary_account=*/false); CheckDelegateCalls(); }
diff --git a/chrome/browser/webauthn/cablev2_devices.cc b/chrome/browser/webauthn/cablev2_devices.cc index ae982706..3a5fea6 100644 --- a/chrome/browser/webauthn/cablev2_devices.cc +++ b/chrome/browser/webauthn/cablev2_devices.cc
@@ -103,7 +103,7 @@ // DeletePairingByPublicKey erases any pairing with the given public key // from `list`. -void DeletePairingByPublicKey(base::ListValue* list, +void DeletePairingByPublicKey(base::Value* list, const std::string& public_key_base64) { list->EraseListValueIf([&public_key_base64](const auto& value) { if (!value.is_dict()) { @@ -365,7 +365,7 @@ // For Incognito/Guest profiles, pairings will only last for the duration of // that session. While an argument could be made that it's safe to persist // such pairing for longer, this seems like the safe option initially. - ListPrefUpdateDeprecated update(pref_service, kWebAuthnCablePairingsPrefName); + ListPrefUpdate update(pref_service, kWebAuthnCablePairingsPrefName); // Find any existing entries with the same public key and replace them. The // handshake protocol requires the phone to prove possession of the public @@ -374,25 +374,24 @@ base::Base64Encode(pairing->peer_public_key_x962); DeletePairingByPublicKey(update.Get(), public_key_base64); - auto dict = std::make_unique<base::Value>(base::Value::Type::DICTIONARY); - dict->SetKey(kPairingPrefPublicKey, - base::Value(std::move(public_key_base64))); - dict->SetKey(kPairingPrefTunnelServer, - base::Value(pairing->tunnel_server_domain)); - dict->SetKey(kPairingPrefName, base::Value(std::move(name))); - dict->SetKey(kPairingPrefContactId, - base::Value(base::Base64Encode(pairing->contact_id))); - dict->SetKey(kPairingPrefId, base::Value(base::Base64Encode(pairing->id))); - dict->SetKey(kPairingPrefSecret, - base::Value(base::Base64Encode(pairing->secret))); + base::Value dict(base::Value::Type::DICTIONARY); + dict.SetKey(kPairingPrefPublicKey, base::Value(std::move(public_key_base64))); + dict.SetKey(kPairingPrefTunnelServer, + base::Value(pairing->tunnel_server_domain)); + dict.SetKey(kPairingPrefName, base::Value(std::move(name))); + dict.SetKey(kPairingPrefContactId, + base::Value(base::Base64Encode(pairing->contact_id))); + dict.SetKey(kPairingPrefId, base::Value(base::Base64Encode(pairing->id))); + dict.SetKey(kPairingPrefSecret, + base::Value(base::Base64Encode(pairing->secret))); base::Time::Exploded now; base::Time::Now().UTCExplode(&now); - dict->SetKey(kPairingPrefTime, - // RFC 3339 time format. - base::Value(base::StringPrintf( - "%04d-%02d-%02dT%02d:%02d:%02dZ", now.year, now.month, - now.day_of_month, now.hour, now.minute, now.second))); + dict.SetKey(kPairingPrefTime, + // RFC 3339 time format. + base::Value(base::StringPrintf( + "%04d-%02d-%02dT%02d:%02d:%02dZ", now.year, now.month, + now.day_of_month, now.hour, now.minute, now.second))); update->Append(std::move(dict)); } @@ -402,7 +401,7 @@ void DeletePairingByPublicKey( PrefService* pref_service, std::array<uint8_t, device::kP256X962Length> public_key) { - ListPrefUpdateDeprecated update(pref_service, kWebAuthnCablePairingsPrefName); + ListPrefUpdate update(pref_service, kWebAuthnCablePairingsPrefName); DeletePairingByPublicKey(update.Get(), base::Base64Encode(public_key)); } @@ -414,7 +413,7 @@ const std::string name = FindUniqueName(new_name, existing_names); const std::string public_key_base64 = base::Base64Encode(public_key); - ListPrefUpdateDeprecated update(pref_service, kWebAuthnCablePairingsPrefName); + ListPrefUpdate update(pref_service, kWebAuthnCablePairingsPrefName); base::Value::ListView list = update.Get()->GetList(); for (base::Value& value : list) {
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 01eedc75..e2deac6 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1642053592-bbce07ee6e3bbc918928cd8634964b5731057513.profdata +chrome-mac-main-1642075045-0b98c50079ee2ee11ac79ced7015c8b4a4d47b6b.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index c414af9..3c89623 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1642063281-e34662e61b4f1ebc8847cdf9407b49bca0c34e63.profdata +chrome-win32-main-1642085871-c3e866238b172d86b0c5e5d535f17b73a3919498.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index feb0ba1..c4211937 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1642063281-3d6a64382d164705e7b6298e7e942c9293f78c08.profdata +chrome-win64-main-1642085871-c337179c7d831da87b8fc2d291420fc0448582e3.profdata
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index bc6b98d..930e84c 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -372,39 +372,6 @@ "//components/printing/common", "//printing", ] - if (enable_print_preview && !is_chromeos_ash) { - # Part of the service_process_util code below is based on a model where - # the cloud print service is a long-lived process independent of chrome, - # which is not appropriate on android. - assert(!is_android) - sources += [ - "service_process_util.cc", - "service_process_util.h", - ] - if (is_linux || is_chromeos) { - sources += [ "service_process_util_linux.cc" ] - } - if (is_mac) { - sources += [ "service_process_util_mac.mm" ] - } - if (is_posix) { - sources += [ - "service_process_util_posix.cc", - "service_process_util_posix.h", - ] - } - if (is_win) { - sources += [ - "chrome_utility_printing_param_traits_macros.h", - "service_process_util_win.cc", - ] - - public_deps += [ - "//printing/backend", - "//printing/mojom", - ] - } - } } if (is_android) { @@ -781,16 +748,6 @@ } } -if (enable_print_preview && !is_chromeos_ash) { - mojom("service_process_mojom") { - sources = [ - "cloud_print.mojom", - "service_process.mojom", - ] - public_deps = [ "//mojo/public/mojom/base" ] - } -} - mojom("supervised_user_commands_mojom") { sources = [ "supervised_user_commands.mojom" ] } @@ -804,25 +761,3 @@ sources = [ "offline_page_auto_fetcher.mojom" ] public_deps = [ "//url/mojom:url_mojom_gurl" ] } - -if (enable_basic_printing && is_win) { - mojom("cloud_print_utility_mojom") { - sources = [ "cloud_print_utility.mojom" ] - cpp_typemaps = [ - { - types = [ - { - mojom = "chrome.mojom.PrinterCapsAndDefaults" - cpp = "::printing::PrinterCapsAndDefaults" - }, - { - mojom = "chrome.mojom.PrinterSemanticCapsAndDefaults" - cpp = "::printing::PrinterSemanticCapsAndDefaults" - }, - ] - traits_headers = [ "chrome_utility_printing_param_traits_macros.h" ] - traits_public_deps = [ ":common" ] - }, - ] - } -}
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index ed285c3..f5260af4 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -685,7 +685,7 @@ base::FEATURE_DISABLED_BY_DEFAULT}; #endif -#if defined(OS_CHROMEOS) +#if !defined(OS_ANDROID) const base::Feature kLinkCapturingUiUpdate{"LinkCapturingUiUpdate", base::FEATURE_DISABLED_BY_DEFAULT}; #endif
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index b08e1a7..c8ebe69a 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -460,7 +460,7 @@ extern const base::Feature kKernelnextVMs; #endif -#if defined(OS_CHROMEOS) +#if !defined(OS_ANDROID) COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kLinkCapturingUiUpdate; #endif
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 3d48bdf..80cb346 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -127,17 +127,6 @@ // print job. Defaults to null if unspecified. const char kCloudPrintPrintTicket[] = "cloud-print-print-ticket"; -// The process type value which causes a process to run as a cloud print service -// process. -// -// DO NOT CHANGE THIS VALUE. Cloud printing relies on an external binary -// launching Chrome with this process type. -const char kCloudPrintServiceProcess[] = "service"; - -// Setup cloud print proxy for provided printers. This does not start -// service or register proxy for autostart. -const char kCloudPrintSetupProxy[] = "cloud-print-setup-proxy"; - // Comma-separated list of BrowserThreads that cause browser process to crash if // the given browser thread is not responsive. UI/IO are the BrowserThreads that // are supported.
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 929eb5bc..bf0219e6 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h
@@ -60,8 +60,6 @@ extern const char kCloudPrintFileType[]; extern const char kCloudPrintJobTitle[]; extern const char kCloudPrintPrintTicket[]; -extern const char kCloudPrintServiceProcess[]; -extern const char kCloudPrintSetupProxy[]; extern const char kCrashOnHangThreads[]; extern const char kCreateBrowserOnStartupForTests[]; extern const char kCustomDevtoolsFrontend[];
diff --git a/chrome/common/chrome_utility_printing_param_traits_macros.h b/chrome/common/chrome_utility_printing_param_traits_macros.h deleted file mode 100644 index 27000010..0000000 --- a/chrome/common/chrome_utility_printing_param_traits_macros.h +++ /dev/null
@@ -1,56 +0,0 @@ -// Copyright 2014 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_COMMON_CHROME_UTILITY_PRINTING_PARAM_TRAITS_MACROS_H_ -#define CHROME_COMMON_CHROME_UTILITY_PRINTING_PARAM_TRAITS_MACROS_H_ - -#include "build/build_config.h" -#include "ipc/ipc_message_macros.h" -#include "ipc/ipc_message_start.h" -#include "ipc/ipc_param_traits.h" -#include "printing/backend/print_backend.h" -#include "printing/buildflags/buildflags.h" -#include "printing/mojom/print.mojom.h" - -#if defined(OS_WIN) && BUILDFLAG(ENABLE_PRINT_PREVIEW) -// Preview and Cloud Print messages. -IPC_STRUCT_TRAITS_BEGIN(printing::PrinterCapsAndDefaults) - IPC_STRUCT_TRAITS_MEMBER(printer_capabilities) - IPC_STRUCT_TRAITS_MEMBER(caps_mime_type) - IPC_STRUCT_TRAITS_MEMBER(printer_defaults) - IPC_STRUCT_TRAITS_MEMBER(defaults_mime_type) -IPC_STRUCT_TRAITS_END() - -IPC_ENUM_TRAITS_MAX_VALUE(printing::mojom::ColorModel, - printing::mojom::ColorModel::kColorModelLast) - -IPC_STRUCT_TRAITS_BEGIN(printing::PrinterSemanticCapsAndDefaults::Paper) - IPC_STRUCT_TRAITS_MEMBER(display_name) - IPC_STRUCT_TRAITS_MEMBER(vendor_id) - IPC_STRUCT_TRAITS_MEMBER(size_um) -IPC_STRUCT_TRAITS_END() - -IPC_ENUM_TRAITS_MIN_MAX_VALUE(printing::mojom::DuplexMode, - printing::mojom::DuplexMode::kUnknownDuplexMode, - printing::mojom::DuplexMode::kShortEdge) - -IPC_STRUCT_TRAITS_BEGIN(printing::PrinterSemanticCapsAndDefaults) - IPC_STRUCT_TRAITS_MEMBER(collate_capable) - IPC_STRUCT_TRAITS_MEMBER(collate_default) - IPC_STRUCT_TRAITS_MEMBER(copies_max) - IPC_STRUCT_TRAITS_MEMBER(duplex_modes) - IPC_STRUCT_TRAITS_MEMBER(duplex_default) - IPC_STRUCT_TRAITS_MEMBER(color_changeable) - IPC_STRUCT_TRAITS_MEMBER(color_default) - IPC_STRUCT_TRAITS_MEMBER(color_model) - IPC_STRUCT_TRAITS_MEMBER(bw_model) - IPC_STRUCT_TRAITS_MEMBER(papers) - IPC_STRUCT_TRAITS_MEMBER(default_paper) - IPC_STRUCT_TRAITS_MEMBER(dpis) - IPC_STRUCT_TRAITS_MEMBER(default_dpi) -IPC_STRUCT_TRAITS_END() - -#endif // defined(OS_WIN) && BUILDFLAG(ENABLE_PRINT_PREVIEW) - -#endif // CHROME_COMMON_CHROME_UTILITY_PRINTING_PARAM_TRAITS_MACROS_H_
diff --git a/chrome/common/cloud_print.mojom b/chrome/common/cloud_print.mojom deleted file mode 100644 index 6e64341..0000000 --- a/chrome/common/cloud_print.mojom +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright 2017 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. - -module cloud_print.mojom; - -import "mojo/public/mojom/base/values.mojom"; - -// An interface for controlling cloud print running in a service process. -interface CloudPrint { - // Tell the service process to enable the cloud proxy passing in the OAuth2 - // auth code of a robot account. - EnableCloudPrintProxyWithRobot( - string robot_auth_code, - string robot_email, - string user_email, - mojo_base.mojom.DictionaryValue user_settings); - - // Tell the service process to disable the cloud proxy. - DisableCloudPrintProxy(); - - // Gets the current status of the cloud print proxy - // (whether it is enabled, the email address and the proxy id). - GetCloudPrintProxyInfo() => (bool enabled, string email, string proxy_id); - - // Gets all available printers. - GetPrinters() => (array<string> printers); -};
diff --git a/chrome/common/cloud_print_utility.mojom b/chrome/common/cloud_print_utility.mojom deleted file mode 100644 index 0b898db..0000000 --- a/chrome/common/cloud_print_utility.mojom +++ /dev/null
@@ -1,29 +0,0 @@ -// 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. - -module chrome.mojom; - -// Interface implemented by the unsandboxed Cloud Print utility process (see -// src/chrome/utility/printing_handler.cc) and called by the Cloud Print service -// process, which is a special Windows service process run by the deprecated -// Cloud Print Connector tool. The purpose of the utility process is to isolate -// printer driver crashes from the service process. -interface CloudPrintUtility { - // Retrieves capabilities and defaults for the specified printer. Returns null - // on failure. - GetPrinterCapsAndDefaults(string printer_name) - => (PrinterCapsAndDefaults? caps_and_defaults); - - // Retrieves capabilities and defaults for the specified printer. Returns null - // on failure. - GetPrinterSemanticCapsAndDefaults(string printer_name) - => (PrinterSemanticCapsAndDefaults? caps_and_defaults); -}; - -[Native] -struct PrinterCapsAndDefaults; - -[Native] -struct PrinterSemanticCapsAndDefaults; -
diff --git a/chrome/common/common_message_generator.h b/chrome/common/common_message_generator.h index 286981c..73dd729 100644 --- a/chrome/common/common_message_generator.h +++ b/chrome/common/common_message_generator.h
@@ -5,22 +5,12 @@ // Multiply-included file, hence no include guard. #include "chrome/common/search/instant_mojom_traits.h" -#include "services/network/public/cpp/p2p_param_traits.h" #include "components/safe_browsing/buildflags.h" #include "content/public/common/common_param_traits.h" #include "content/public/common/common_param_traits_macros.h" #include "extensions/buildflags/buildflags.h" #include "media/media_buildflags.h" -#include "printing/buildflags/buildflags.h" - -#if BUILDFLAG(ENABLE_PRINTING) -#undef CHROME_COMMON_CHROME_UTILITY_PRINTING_PARAM_TRAITS_MACROS_H_ -#include "chrome/common/chrome_utility_printing_param_traits_macros.h" -#ifndef CHROME_COMMON_CHROME_UTILITY_PRINTING_PARAM_TRAITS_MACROS_H_ -#error \ - "Failed to include header chrome/common/chrome_utility_printing_param_traits_macros.h" -#endif -#endif +#include "services/network/public/cpp/p2p_param_traits.h" #if BUILDFLAG(FULL_SAFE_BROWSING) #include "chrome/services/file_util/public/mojom/safe_archive_analyzer_param_traits.h"
diff --git a/chrome/common/mac/mock_launchd.h b/chrome/common/mac/mock_launchd.h deleted file mode 100644 index 9909703..0000000 --- a/chrome/common/mac/mock_launchd.h +++ /dev/null
@@ -1,77 +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 CHROME_COMMON_MAC_MOCK_LAUNCHD_H_ -#define CHROME_COMMON_MAC_MOCK_LAUNCHD_H_ - -#include <launch.h> - -#include <memory> -#include <string> - -#include "base/callback.h" -#include "base/files/file_path.h" -#include "base/mac/scoped_cftyperef.h" -#include "base/memory/scoped_refptr.h" -#include "chrome/common/mac/launchd.h" -#include "chrome/common/multi_process_lock.h" - -namespace base { -class SingleThreadTaskRunner; -} - -// TODO(dmaclach): Write this in terms of a real mock. -// http://crbug.com/76923 -class MockLaunchd : public Launchd { - public: - static bool MakeABundle(const base::FilePath& dst, - const std::string& name, - base::FilePath* bundle_root, - base::FilePath* executable); - - MockLaunchd(const base::FilePath& file, - scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, - base::OnceClosure quit_closure, - bool as_service); - ~MockLaunchd() override; - - bool GetJobInfo(const std::string& label, - mac::services::JobInfo* info) override; - bool RemoveJob(const std::string& label) override; - bool RestartJob(Domain domain, - Type type, - CFStringRef name, - CFStringRef session_type) override; - CFMutableDictionaryRef CreatePlistFromFile(Domain domain, - Type type, - CFStringRef name) override; - bool WritePlistToFile(Domain domain, - Type type, - CFStringRef name, - CFDictionaryRef dict) override; - bool DeletePlist(Domain domain, Type type, CFStringRef name) override; - - void SignalReady(); - - bool restart_called() const { return restart_called_; } - bool remove_called() const { return remove_called_; } - bool checkin_called() const { return checkin_called_; } - bool write_called() const { return write_called_; } - bool delete_called() const { return delete_called_; } - - private: - base::FilePath file_; - std::string pipe_name_; - scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; - base::OnceClosure quit_closure_; - std::unique_ptr<MultiProcessLock> running_lock_; - bool as_service_; - bool restart_called_; - bool remove_called_; - bool checkin_called_; - bool write_called_; - bool delete_called_; -}; - -#endif // CHROME_COMMON_MAC_MOCK_LAUNCHD_H_
diff --git a/chrome/common/mac/mock_launchd.mm b/chrome/common/mac/mock_launchd.mm deleted file mode 100644 index 87014db..0000000 --- a/chrome/common/mac/mock_launchd.mm +++ /dev/null
@@ -1,165 +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 "chrome/common/mac/mock_launchd.h" - -#include <CoreFoundation/CoreFoundation.h> -#include <errno.h> -#include <stddef.h> -#include <sys/un.h> - -#include <memory> - -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/mac/foundation_util.h" -#include "base/mac/scoped_cftyperef.h" -#include "base/run_loop.h" -#include "base/strings/string_util.h" -#include "base/strings/stringprintf.h" -#include "base/strings/sys_string_conversions.h" -#include "base/task/single_thread_task_runner.h" -#include "chrome/common/mac/launchd.h" -#include "chrome/common/service_process_util.h" -#include "components/version_info/version_info.h" -#include "testing/gtest/include/gtest/gtest.h" - -// static -bool MockLaunchd::MakeABundle(const base::FilePath& dst, - const std::string& name, - base::FilePath* bundle_root, - base::FilePath* executable) { - *bundle_root = dst.Append(name + std::string(".app")); - base::FilePath contents = bundle_root->AppendASCII("Contents"); - base::FilePath mac_os = contents.AppendASCII("MacOS"); - *executable = mac_os.Append(name); - base::FilePath info_plist = contents.Append("Info.plist"); - - if (!base::CreateDirectory(mac_os)) { - return false; - } - const char* data = "#! testbundle\n"; - int len = strlen(data); - if (base::WriteFile(*executable, data, len) != len) { - return false; - } - if (chmod(executable->value().c_str(), 0555) != 0) { - return false; - } - - const char info_plist_format[] = - "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" - "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" " - "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" - "<plist version=\"1.0\">\n" - "<dict>\n" - " <key>CFBundleDevelopmentRegion</key>\n" - " <string>English</string>\n" - " <key>CFBundleExecutable</key>\n" - " <string>%s</string>\n" - " <key>CFBundleIdentifier</key>\n" - " <string>com.test.%s</string>\n" - " <key>CFBundleInfoDictionaryVersion</key>\n" - " <string>6.0</string>\n" - " <key>CFBundleShortVersionString</key>\n" - " <string>%s</string>\n" - " <key>CFBundleVersion</key>\n" - " <string>1</string>\n" - "</dict>\n" - "</plist>\n"; - std::string info_plist_data = - base::StringPrintf(info_plist_format, name.c_str(), name.c_str(), - version_info::GetVersionNumber().c_str()); - len = info_plist_data.length(); - if (base::WriteFile(info_plist, info_plist_data.c_str(), len) != len) { - return false; - } - const UInt8* bundle_root_path = - reinterpret_cast<const UInt8*>(bundle_root->value().c_str()); - base::ScopedCFTypeRef<CFURLRef> url(CFURLCreateFromFileSystemRepresentation( - kCFAllocatorDefault, bundle_root_path, bundle_root->value().length(), - true)); - base::ScopedCFTypeRef<CFBundleRef> bundle( - CFBundleCreate(kCFAllocatorDefault, url)); - return bundle.get(); -} - -MockLaunchd::MockLaunchd( - const base::FilePath& file, - scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, - base::OnceClosure quit_closure, - bool as_service) - : file_(file), - pipe_name_(GetServiceProcessServerName()), - main_task_runner_(std::move(main_task_runner)), - quit_closure_(std::move(quit_closure)), - as_service_(as_service), - restart_called_(false), - remove_called_(false), - checkin_called_(false), - write_called_(false), - delete_called_(false) {} - -MockLaunchd::~MockLaunchd() {} - -bool MockLaunchd::GetJobInfo(const std::string& label, - mac::services::JobInfo* info) { - if (!as_service_) { - std::unique_ptr<MultiProcessLock> running_lock = TakeNamedLock(pipe_name_); - if (running_lock.get()) - return false; - } - - info->program = file_.value(); - info->pid = base::GetCurrentProcId(); - return true; -} - -bool MockLaunchd::RemoveJob(const std::string& label) { - remove_called_ = true; - std::move(quit_closure_).Run(); - return true; -} - -bool MockLaunchd::RestartJob(Domain domain, - Type type, - CFStringRef name, - CFStringRef session_type) { - restart_called_ = true; - std::move(quit_closure_).Run(); - return true; -} - -CFMutableDictionaryRef MockLaunchd::CreatePlistFromFile(Domain domain, - Type type, - CFStringRef name) { - NSString* ns_program = base::SysUTF8ToNSString(file_.value()); - - NSMutableDictionary* dict = [NSMutableDictionary dictionaryWithDictionary:@{ - @LAUNCH_JOBKEY_PROGRAM : ns_program, - @LAUNCH_JOBKEY_PROGRAMARGUMENTS : @[ ns_program ], - }]; - - // Callers expect to be given a reference but dictionaryWithDictionary: is - // autoreleased, so it's necessary to do a manual retain here. - return base::mac::NSToCFCast([dict retain]); -} - -bool MockLaunchd::WritePlistToFile(Domain domain, - Type type, - CFStringRef name, - CFDictionaryRef dict) { - write_called_ = true; - return true; -} - -bool MockLaunchd::DeletePlist(Domain domain, Type type, CFStringRef name) { - delete_called_ = true; - return true; -} - -void MockLaunchd::SignalReady() { - ASSERT_TRUE(as_service_); - running_lock_ = TakeNamedLock(pipe_name_); -}
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index df79a4f..beccfa6 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -2226,7 +2226,7 @@ // List of strings specifying which hosts are allowed to have H2 connections // coalesced when client certs are also used. This follows rules similar to -// the URLBlacklist format for hostnames: a pattern with a leading dot (e.g. +// the URLBlocklist format for hostnames: a pattern with a leading dot (e.g. // ".example.net") matches exactly the hostname following the dot (i.e. only // "example.net"), and a pattern with no leading dot (e.g. "example.com") // matches that hostname and all subdomains.
diff --git a/chrome/common/service_process.mojom b/chrome/common/service_process.mojom deleted file mode 100644 index b2ee6c35..0000000 --- a/chrome/common/service_process.mojom +++ /dev/null
@@ -1,18 +0,0 @@ -// Copyright 2017 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. - -module chrome.mojom; - -// A control interface for a service process -// (https://www.chromium.org/developers/design-documents/service-processes). -interface ServiceProcess { - // A message for ensuring the connection is established. - Hello() => (); - - // Tell the service process that an update is available. - UpdateAvailable(); - - // Tell the service process to shutdown. - ShutDown(); -};
diff --git a/chrome/common/service_process_util.cc b/chrome/common/service_process_util.cc deleted file mode 100644 index 9d99a41..0000000 --- a/chrome/common/service_process_util.cc +++ /dev/null
@@ -1,289 +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 "chrome/common/service_process_util.h" - -#include <stdint.h> - -#include <algorithm> -#include <memory> -#include <string> -#include <utility> - -#include "base/base_switches.h" -#include "base/check.h" -#include "base/command_line.h" -#include "base/cxx17_backports.h" -#include "base/hash/sha1.h" -#include "base/memory/shared_memory_mapping.h" -#include "base/memory/singleton.h" -#include "base/notreached.h" -#include "base/path_service.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_util.h" -#include "base/strings/utf_string_conversions.h" -#include "base/version.h" -#include "build/build_config.h" -#include "chrome/common/chrome_constants.h" -#include "chrome/common/chrome_paths.h" -#include "chrome/common/chrome_switches.h" -#include "components/cloud_devices/common/cloud_devices_switches.h" -#include "components/crash/core/app/crash_switches.h" -#include "components/crash/core/app/crashpad.h" -#include "components/network_session_configurator/common/network_switches.h" -#include "components/version_info/version_info.h" -#include "content/public/common/content_paths.h" -#include "content/public/common/content_switches.h" -#include "google_apis/gaia/gaia_switches.h" -#include "services/network/public/cpp/network_switches.h" -#include "ui/base/ui_base_switches.h" - -#if !defined(OS_MAC) - -namespace { - -// This should be more than enough to hold a version string assuming each part -// of the version string is an int64_t. -const uint32_t kMaxVersionStringLength = 256; - -// The structure that gets written to shared memory. -struct ServiceProcessSharedData { - char service_process_version[kMaxVersionStringLength]; - base::ProcessId service_process_pid; -}; - -} // namespace - -// Return a name that is scoped to this instance of the service process. We -// use the user-data-dir and the version as a scoping prefix. -std::string GetServiceProcessScopedVersionedName( - const std::string& append_str) { - std::string versioned_str = version_info::GetVersionNumber(); - versioned_str.append(append_str); - return GetServiceProcessScopedName(versioned_str); -} - -// Reads the named shared memory to get the shared data. Returns false if no -// matching shared memory was found. -// static -bool ServiceProcessState::GetServiceProcessData(std::string* version, - base::ProcessId* pid) { - base::ReadOnlySharedMemoryMapping service_process_data_mapping = - OpenServiceProcessDataMapping(sizeof(ServiceProcessSharedData)); - if (!service_process_data_mapping.IsValid()) - return false; - - const ServiceProcessSharedData* service_data = - service_process_data_mapping.GetMemoryAs<ServiceProcessSharedData>(); - // Make sure the version in shared memory is null-terminated. If it is not, - // treat it as invalid. - if (version && memchr(service_data->service_process_version, '\0', - sizeof(service_data->service_process_version))) - *version = service_data->service_process_version; - if (pid) - *pid = service_data->service_process_pid; - return true; -} -#endif // !OS_MAC - -// Return a name that is scoped to this instance of the service process. We -// use the hash of the user-data-dir as a scoping prefix. We can't use -// the user-data-dir itself as we have limits on the size of the lock names. -std::string GetServiceProcessScopedName(const std::string& append_str) { - base::FilePath user_data_dir; - base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); -#if defined(OS_WIN) - std::string user_data_dir_path = base::WideToUTF8(user_data_dir.value()); -#elif defined(OS_POSIX) - std::string user_data_dir_path = user_data_dir.value(); -#endif // defined(OS_WIN) - std::string hash = base::SHA1HashString(user_data_dir_path); - std::string hex_hash = base::HexEncode(hash.c_str(), hash.length()); - return hex_hash + "." + append_str; -} - -std::unique_ptr<base::CommandLine> CreateServiceProcessCommandLine() { - base::FilePath exe_path; - base::PathService::Get(content::CHILD_PROCESS_EXE, &exe_path); - DCHECK(!exe_path.empty()) << "Unable to get service process binary name."; - std::unique_ptr<base::CommandLine> command_line( - new base::CommandLine(exe_path)); - command_line->AppendSwitchASCII(switches::kProcessType, - switches::kCloudPrintServiceProcess); - -#if defined(OS_WIN) - command_line->AppendArg(switches::kPrefetchArgumentOther); -#endif // defined(OS_WIN) - -#if defined(OS_LINUX) || defined(OS_CHROMEOS) - if (crash_reporter::IsCrashpadEnabled()) { - command_line->AppendSwitch(switches::kEnableCrashpad); - - pid_t pid; - if (crash_reporter::GetHandlerSocket(nullptr, &pid)) { - command_line->AppendSwitchASCII( - crash_reporter::switches::kCrashpadHandlerPid, - base::NumberToString(pid)); - } - } -#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) - - static const char* const kSwitchesToCopy[] = { - network::switches::kIgnoreUrlFetcherCertRequests, - switches::kCloudPrintSetupProxy, - switches::kCloudPrintURL, - switches::kCloudPrintXmppEndpoint, - switches::kEnableLogging, - switches::kLang, - switches::kLoggingLevel, - switches::kLsoUrl, - switches::kNoServiceAutorun, - switches::kUserDataDir, - switches::kV, - switches::kVModule, - switches::kWaitForDebugger, - }; - - command_line->CopySwitchesFrom(*base::CommandLine::ForCurrentProcess(), - kSwitchesToCopy, base::size(kSwitchesToCopy)); - return command_line; -} - -ServiceProcessState::ServiceProcessState() : state_(nullptr) { - autorun_command_line_ = CreateServiceProcessCommandLine(); - CreateState(); -} - -ServiceProcessState::~ServiceProcessState() { -#if !defined(OS_MAC) - if (service_process_data_region_.IsValid()) { - service_process_data_region_ = {}; - DeleteServiceProcessDataRegion(); - } -#endif // !OS_MAC - TearDownState(); -} - -void ServiceProcessState::SignalStopped() { - TearDownState(); -#if !defined(OS_MAC) - service_process_data_region_ = {}; -#endif // !OS_MAC -} - -#if !defined(OS_MAC) -bool ServiceProcessState::Initialize() { - if (!TakeSingletonLock()) { - return false; - } - // Now that we have the singleton, take care of killing an older version, if - // it exists. - if (!HandleOtherVersion()) - return false; - - // Write the version we are using to shared memory. This can be used by a - // newer service to signal us to exit. - return CreateSharedData(); -} - -// static -std::string ServiceProcessState::GetServiceProcessSharedMemName() { - return GetServiceProcessScopedName("_service_shmem"); -} - -bool ServiceProcessState::HandleOtherVersion() { - std::string running_version; - base::ProcessId process_id = 0; - ServiceProcessRunningState state = - GetServiceProcessRunningState(&running_version, &process_id); - switch (state) { - case SERVICE_SAME_VERSION_RUNNING: - case SERVICE_NEWER_VERSION_RUNNING: - return false; - case SERVICE_OLDER_VERSION_RUNNING: - // If an older version is running, kill it. - ForceServiceProcessShutdown(running_version, process_id); - break; - case SERVICE_NOT_RUNNING: - break; - } - return true; -} - -bool ServiceProcessState::CreateSharedData() { - if (version_info::GetVersionNumber().length() >= kMaxVersionStringLength) { - NOTREACHED() << "Version string length is << " - << version_info::GetVersionNumber().length() - << " which is longer than" << kMaxVersionStringLength; - return false; - } - - uint32_t alloc_size = sizeof(ServiceProcessSharedData); - service_process_data_region_ = CreateServiceProcessDataRegion(alloc_size); - if (!service_process_data_region_.IsValid()) - return false; - base::WritableSharedMemoryMapping mapping = - service_process_data_region_.Map(); - if (!mapping.IsValid()) - return false; - memset(mapping.memory(), 0, alloc_size); - ServiceProcessSharedData* shared_data = - mapping.GetMemoryAs<ServiceProcessSharedData>(); - DCHECK(shared_data); - memcpy(shared_data->service_process_version, - version_info::GetVersionNumber().c_str(), - version_info::GetVersionNumber().length()); - shared_data->service_process_pid = base::GetCurrentProcId(); - return true; -} - -// static -ServiceProcessState::ServiceProcessRunningState -ServiceProcessState::GetServiceProcessRunningState( - std::string* service_version_out, - base::ProcessId* pid_out) { - std::string version; - if (!ServiceProcessState::GetServiceProcessData(&version, pid_out)) - return SERVICE_NOT_RUNNING; - -#if defined(OS_POSIX) - // We only need to check for service running on POSIX because Windows cleans - // up shared memory files when an app crashes, so there isn't a chance of - // us reading bogus data from shared memory for an app that has died. - if (!CheckServiceProcessReady()) { - return SERVICE_NOT_RUNNING; - } -#endif // defined(OS_POSIX) - - // At this time we have a version string. Set the out param if it exists. - if (service_version_out) - *service_version_out = version; - - base::Version service_version(version); - // If the version string is invalid, treat it like an older version. - if (!service_version.IsValid()) - return SERVICE_OLDER_VERSION_RUNNING; - - // Get the version of the currently *running* instance of Chrome. - const base::Version& running_version = version_info::GetVersion(); - if (!running_version.IsValid()) { - NOTREACHED() << "Failed to parse version info"; - // Our own version is invalid. This is an error case. Pretend that we - // are out of date. - return SERVICE_NEWER_VERSION_RUNNING; - } - - int comp = running_version.CompareTo(service_version); - if (comp == 0) - return SERVICE_SAME_VERSION_RUNNING; - return comp > 0 ? SERVICE_OLDER_VERSION_RUNNING - : SERVICE_NEWER_VERSION_RUNNING; -} - -mojo::NamedPlatformChannel::ServerName -ServiceProcessState::GetServiceProcessServerName() { - return ::GetServiceProcessServerName(); -} - -#endif // !OS_MAC
diff --git a/chrome/common/service_process_util.h b/chrome/common/service_process_util.h deleted file mode 100644 index b448b47..0000000 --- a/chrome/common/service_process_util.h +++ /dev/null
@@ -1,188 +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 CHROME_COMMON_SERVICE_PROCESS_UTIL_H_ -#define CHROME_COMMON_SERVICE_PROCESS_UTIL_H_ - -#include <memory> -#include <string> - -#include "base/callback_forward.h" -#include "base/gtest_prod_util.h" -#include "base/memory/read_only_shared_memory_region.h" -#include "base/memory/ref_counted.h" -#include "base/memory/writable_shared_memory_region.h" -#include "base/process/process.h" -#include "base/task/single_thread_task_runner.h" -#include "build/build_config.h" -#include "mojo/public/cpp/platform/named_platform_channel.h" -#include "mojo/public/cpp/platform/platform_channel_server_endpoint.h" - -class MultiProcessLock; - -namespace base { -class CommandLine; -} - -// Return the IPC channel to connect to the service process. -mojo::NamedPlatformChannel::ServerName GetServiceProcessServerName(); - -// Return a name that is scoped to this instance of the service process. We -// use the user-data-dir as a scoping prefix. -std::string GetServiceProcessScopedName(const std::string& append_str); - -#if !defined(OS_MAC) -// Return a name that is scoped to this instance of the service process. We -// use the user-data-dir and the version as a scoping prefix. -std::string GetServiceProcessScopedVersionedName(const std::string& append_str); -#endif // !OS_MAC - -#if defined(OS_POSIX) -// Attempts to take a session-wide lock named name. Returns a non-null lock if -// successful. -std::unique_ptr<MultiProcessLock> TakeNamedLock(const std::string& name); -#endif - -// The following method is used in a process that acts as a client to the -// service process (typically the browser process). It method checks that if the -// service process is ready to receive IPC commands. -bool CheckServiceProcessReady(); - -// -------------------------------------------------------------------------- - -// Forces a service process matching the specified version to shut down. -bool ForceServiceProcessShutdown(const std::string& version, - base::ProcessId process_id); - -// Creates command-line to run the service process. -std::unique_ptr<base::CommandLine> CreateServiceProcessCommandLine(); - -// This is a class that is used by the service process to signal events and -// share data with external clients. This class lives in this file because the -// internal data structures and mechanisms used by the utility methods above -// and this class are shared. -class ServiceProcessState { - public: - ServiceProcessState(); - ~ServiceProcessState(); - - // Tries to become the sole service process for the current user data dir. - // Returns false if another service process is already running. - bool Initialize(); - - // Signal that the service process is ready. - // This method is called when the service process is running and initialized. - // |terminate_task| is invoked when we get a terminate request from another - // process (in the same thread that called SignalReady). It can be NULL. - // |task_runner| must be of type IO and is the loop that POSIX uses - // to monitor the service process. - bool SignalReady(scoped_refptr<base::SingleThreadTaskRunner> task_runner, - base::OnceClosure terminate_task); - - // Signal that the service process is stopped. - void SignalStopped(); - - // Register the service process to run on startup. - bool AddToAutoRun(); - - // Unregister the service process to run on startup. - bool RemoveFromAutoRun(); - - // Return the channel handle used for communicating with the service. -#if defined(OS_MAC) - mojo::PlatformChannelServerEndpoint GetServiceProcessServerEndpoint(); -#else - mojo::NamedPlatformChannel::ServerName GetServiceProcessServerName(); -#endif - - private: -#if !defined(OS_MAC) - enum ServiceProcessRunningState { - SERVICE_NOT_RUNNING, - SERVICE_OLDER_VERSION_RUNNING, - SERVICE_SAME_VERSION_RUNNING, - SERVICE_NEWER_VERSION_RUNNING, - }; - - // Create the shared memory data for the service process. - bool CreateSharedData(); - - // If an older version of the service process running, it should be shutdown. - // Returns false if this process needs to exit. - bool HandleOtherVersion(); - - // Acquires a singleton lock for the service process. A return value of false - // means that a service process instance is already running. - bool TakeSingletonLock(); - - // Return a name used to name a shared memory file that will be used to locate - // the currently running service process. - static std::string GetServiceProcessSharedMemName(); - - // Create a writable service process data shared memory region of the - // specified size. Returns an invalid region on error. If the backing file for - // the shared memory region already exists but is smaller than |size|, this - // function may return a valid region which will fail to be mapped. - static base::WritableSharedMemoryRegion CreateServiceProcessDataRegion( - size_t size); - - // Open an existing service process data shared memory region of the specified - // size. Returns an invalid region on error. Note that if the size of the - // existing region is smaller than |size|, this function may return a valid - // region which will fail to be mapped. Also note that since the underlying - // file is writable, the region cannot be read-only. - static base::ReadOnlySharedMemoryMapping OpenServiceProcessDataMapping( - size_t size); - - // Deletes a service process data shared memory backing file. Returns false if - // the file was not able to be deleted. - static bool DeleteServiceProcessDataRegion(); - - static ServiceProcessRunningState GetServiceProcessRunningState( - std::string* service_version_out, - base::ProcessId* pid_out); -#endif // !OS_MAC - - // Returns the process id and version of the currently running service - // process. Note: DO NOT use this check whether the service process is ready - // because a true return value only means that some process shared data was - // available, and not that the process is ready to receive IPC commands, or - // even running. - static bool GetServiceProcessData(std::string* version, base::ProcessId* pid); - - // Creates the platform specific state. - void CreateState(); - - // Tear down the platform specific state. - void TearDownState(); - - // An opaque object that maintains state. The actual definition of this is - // platform dependent. - struct StateData; - StateData* state_; - -#if !defined(OS_MAC) - // The shared memory mapping backing the shared state on non-macos - // platforms. This is actually referring to named shared memory, and on some - // platforms (eg, Windows) determines the lifetime of when consumers are able - // to open the named shared region. This means this region must stay alive - // for the named region to be visible. - base::WritableSharedMemoryRegion service_process_data_region_; -#endif - - std::unique_ptr<base::CommandLine> autorun_command_line_; - -#if defined(OS_MAC) - friend bool CheckServiceProcessReady(); -#endif - - FRIEND_TEST_ALL_PREFIXES(ServiceProcessStateTest, SharedMem); - FRIEND_TEST_ALL_PREFIXES(ServiceProcessStateTest, ForceShutdown); - - friend class ServiceProcessControlBrowserTest; - FRIEND_TEST_ALL_PREFIXES(ServiceProcessControlBrowserTest, ForceShutdown); - FRIEND_TEST_ALL_PREFIXES(ServiceProcessControlBrowserTest, CheckPid); -}; - -#endif // CHROME_COMMON_SERVICE_PROCESS_UTIL_H_
diff --git a/chrome/common/service_process_util_linux.cc b/chrome/common/service_process_util_linux.cc deleted file mode 100644 index 976813a..0000000 --- a/chrome/common/service_process_util_linux.cc +++ /dev/null
@@ -1,84 +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 <signal.h> -#include <unistd.h> - -#include <memory> - -#include "base/base_paths.h" -#include "base/command_line.h" -#include "base/files/file_path.h" -#include "base/logging.h" -#include "base/path_service.h" -#include "base/threading/platform_thread.h" -#include "build/branding_buildflags.h" -#include "chrome/common/auto_start_linux.h" -#include "chrome/common/multi_process_lock.h" -#include "chrome/common/service_process_util_posix.h" - -namespace { - -std::string GetBaseDesktopName() { -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) - return "google-chrome-service.desktop"; -#else // BUILDFLAG(CHROMIUM_BRANDING) - return "chromium-service.desktop"; -#endif -} -} // namespace - -std::unique_ptr<MultiProcessLock> TakeServiceRunningLock() { - std::string lock_name = - GetServiceProcessScopedName("_service_running"); - return TakeNamedLock(lock_name); -} - -bool ForceServiceProcessShutdown(const std::string& version, - base::ProcessId process_id) { - if (kill(process_id, SIGTERM) < 0) { - DPLOG(ERROR) << "kill"; - return false; - } - return true; -} - -// Gets the name of the service process IPC channel. -// Returns an absolute path as required. -mojo::NamedPlatformChannel::ServerName GetServiceProcessServerName() { - base::FilePath temp_dir; - base::PathService::Get(base::DIR_TEMP, &temp_dir); - std::string pipe_name = GetServiceProcessScopedVersionedName("_service_ipc"); - return temp_dir.Append(pipe_name).value(); -} - -bool CheckServiceProcessReady() { - std::unique_ptr<MultiProcessLock> running_lock(TakeServiceRunningLock()); - return !running_lock.get(); -} - -bool ServiceProcessState::TakeSingletonLock() { - state_->initializing_lock = - TakeNamedLock(GetServiceProcessScopedName("_service_initializing")); - return state_->initializing_lock.get(); -} - -bool ServiceProcessState::AddToAutoRun() { - DCHECK(autorun_command_line_.get()); -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) - std::string app_name = "Google Chrome Service"; -#else // BUILDFLAG(CHROMIUM_BRANDING) - std::string app_name = "Chromium Service"; -#endif - return AutoStart::AddApplication( - GetServiceProcessScopedName(GetBaseDesktopName()), - app_name, - autorun_command_line_->GetCommandLineString(), - false); -} - -bool ServiceProcessState::RemoveFromAutoRun() { - return AutoStart::Remove( - GetServiceProcessScopedName(GetBaseDesktopName())); -}
diff --git a/chrome/common/service_process_util_mac.mm b/chrome/common/service_process_util_mac.mm deleted file mode 100644 index 11147c9..0000000 --- a/chrome/common/service_process_util_mac.mm +++ /dev/null
@@ -1,405 +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. - -#import <Foundation/Foundation.h> -#include <launch.h> -#include <sys/un.h> - -#include <memory> -#include <vector> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/feature_list.h" -#include "base/files/file_path.h" -#include "base/mac/bundle_locations.h" -#include "base/mac/foundation_util.h" -#include "base/mac/mac_util.h" -#include "base/mac/scoped_nsobject.h" -#include "base/metrics/histogram_macros.h" -#include "base/path_service.h" -#include "base/strings/string_util.h" -#include "base/strings/sys_string_conversions.h" -#include "base/threading/scoped_blocking_call.h" -#include "base/version.h" -#include "chrome/common/chrome_paths.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/mac/launchd.h" -#include "chrome/common/service_process_util_posix.h" -#include "components/version_info/version_info.h" - -using ::base::FilePathWatcher; - -namespace { - -#define kServiceProcessSessionType "Aqua" - -CFStringRef CopyServiceProcessLaunchDName() { - @autoreleasepool { - NSBundle* bundle = base::mac::FrameworkBundle(); - return CFStringCreateCopy(kCFAllocatorDefault, - base::mac::NSToCFCast([bundle bundleIdentifier])); - } -} - -NSString* GetServiceProcessLaunchDLabel() { - base::scoped_nsobject<NSString> name( - base::mac::CFToNSCast(CopyServiceProcessLaunchDName())); - NSString* label = [name stringByAppendingString:@".service_process"]; - base::FilePath user_data_dir; - base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); - std::string user_data_dir_path = user_data_dir.value(); - NSString* ns_path = base::SysUTF8ToNSString(user_data_dir_path); - ns_path = [ns_path stringByReplacingOccurrencesOfString:@" " - withString:@"_"]; - label = [label stringByAppendingString:ns_path]; - return label; -} - -bool RemoveFromLaunchd() { - // We're killing a file. - base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, - base::BlockingType::MAY_BLOCK); - base::ScopedCFTypeRef<CFStringRef> name(CopyServiceProcessLaunchDName()); - return Launchd::GetInstance()->DeletePlist(Launchd::User, - Launchd::Agent, - name); -} - -class ExecFilePathWatcherCallback { - public: - ExecFilePathWatcherCallback() {} - ~ExecFilePathWatcherCallback() {} - - bool Init(const base::FilePath& path); - void NotifyPathChanged(const base::FilePath& path, bool error); - - private: - base::scoped_nsobject<NSURL> executable_fsref_; -}; - -NSString* GetServiceProcessMachName() { - base::scoped_nsobject<NSString> name( - base::mac::CFToNSCast(CopyServiceProcessLaunchDName())); - return [name stringByAppendingFormat:@".service_process.%lu", - [GetServiceProcessLaunchDLabel() hash]]; -} - -} // namespace - -mojo::NamedPlatformChannel::ServerName GetServiceProcessServerName() { - return base::SysNSStringToUTF8(GetServiceProcessMachName()); -} - -bool ForceServiceProcessShutdown(const std::string& /* version */, - base::ProcessId /* process_id */) { - const std::string& label = - base::SysNSStringToUTF8(GetServiceProcessLaunchDLabel()); - bool ret = Launchd::GetInstance()->RemoveJob(label); - if (!ret) { - DLOG(ERROR) << "ForceServiceProcessShutdown: " << label; - } - return ret; -} - -bool ServiceProcessState::GetServiceProcessData(std::string* version, - base::ProcessId* pid) { - @autoreleasepool { - std::string label = - base::SysNSStringToUTF8(GetServiceProcessLaunchDLabel()); - mac::services::JobInfo info; - if (!Launchd::GetInstance()->GetJobInfo(label, &info)) - return false; - // Anything past here will return true in that there does appear - // to be a service process of some sort registered with launchd. - if (version) { - *version = "0"; - NSString* exe_path = base::SysUTF8ToNSString(info.program); - if (exe_path) { - NSString* bundle_path = [[[exe_path stringByDeletingLastPathComponent] - stringByDeletingLastPathComponent] - stringByDeletingLastPathComponent]; - NSBundle* bundle = [NSBundle bundleWithPath:bundle_path]; - if (bundle) { - NSString* ns_version = - [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; - if (ns_version) { - *version = base::SysNSStringToUTF8(ns_version); - } else { - DLOG(ERROR) << "Unable to get version at: " - << reinterpret_cast<CFStringRef>(bundle_path); - } - } else { - // The bundle has been deleted out from underneath the registered - // job. - DLOG(ERROR) << "Unable to get bundle at: " - << reinterpret_cast<CFStringRef>(bundle_path); - } - } else { - DLOG(ERROR) << "Unable to get executable path for service process"; - } - } - if (pid) { - *pid = info.pid ? *info.pid : -1; - } - return true; - } -} - -bool ServiceProcessState::Initialize() { - mac::services::JobInfo info; - // The Mach service will be checked when GetServiceProcessServerEndpoint() - // is called. - bool ok = Launchd::GetInstance()->GetJobInfo( - base::SysNSStringToUTF8(GetServiceProcessLaunchDLabel()), &info); - if (!ok) { - DLOG(ERROR) << "Failed to look up job info."; - return false; - } - state_->job_info.program = info.program; - return true; -} - -mojo::PlatformChannelServerEndpoint -ServiceProcessState::GetServiceProcessServerEndpoint() { - mojo::NamedPlatformChannel::Options options; - options.server_name = base::SysNSStringToUTF8(GetServiceProcessMachName()); - return mojo::NamedPlatformChannel(options).TakeServerEndpoint(); -} - -bool CheckServiceProcessReady() { - std::string version; - pid_t pid; - if (!ServiceProcessState::GetServiceProcessData(&version, &pid)) { - return false; - } - base::Version service_version(version); - bool ready = true; - if (!service_version.IsValid()) { - ready = false; - } else { - const base::Version& running_version = version_info::GetVersion(); - if (!running_version.IsValid()) { - // Our own version is invalid. This is an error case. Pretend that we - // are out of date. - NOTREACHED(); - ready = true; - } else { - ready = running_version.CompareTo(service_version) <= 0; - } - } - if (!ready) { - ForceServiceProcessShutdown(version, pid); - } - return ready; -} - -mac::services::JobOptions GetServiceProcessJobOptions( - base::CommandLine* cmd_line, - bool for_auto_launch) { - mac::services::JobOptions options; - - options.label = base::SysNSStringToUTF8(GetServiceProcessLaunchDLabel()); - options.executable_path = cmd_line->GetProgram().value(); - options.arguments = cmd_line->argv(); - options.mach_service_name = - base::SysNSStringToUTF8(GetServiceProcessMachName()); - options.run_at_load = for_auto_launch; - options.auto_launch = for_auto_launch; - - return options; -} - -CFDictionaryRef CreateServiceProcessLaunchdPlist(base::CommandLine* cmd_line, - bool for_auto_launch) { - @autoreleasepool { - NSString* program = base::SysUTF8ToNSString(cmd_line->GetProgram().value()); - - std::vector<std::string> args = cmd_line->argv(); - NSMutableArray* ns_args = [NSMutableArray arrayWithCapacity:args.size()]; - - for (std::vector<std::string>::iterator iter = args.begin(); - iter < args.end(); ++iter) { - [ns_args addObject:base::SysUTF8ToNSString(*iter)]; - } - - // See the man page for launchd.plist. - NSMutableDictionary* launchd_plist = [@{ - @LAUNCH_JOBKEY_LABEL : GetServiceProcessLaunchDLabel(), - @LAUNCH_JOBKEY_PROGRAM : program, - @LAUNCH_JOBKEY_PROGRAMARGUMENTS : ns_args, - @LAUNCH_JOBKEY_MACHSERVICES : GetServiceProcessMachName(), - } mutableCopy]; - - if (for_auto_launch) { - // We want the service process to be able to exit if there are no services - // enabled. With a value of NO in the SuccessfulExit key, launchd will - // relaunch the service automatically in any other case than exiting - // cleanly with a 0 return code. - NSDictionary* keep_alive = - @{@LAUNCH_JOBKEY_KEEPALIVE_SUCCESSFULEXIT : @NO}; - NSDictionary* auto_launchd_plist = @{ - @LAUNCH_JOBKEY_RUNATLOAD : @YES, - @LAUNCH_JOBKEY_KEEPALIVE : keep_alive, - @LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE : @kServiceProcessSessionType - }; - [launchd_plist addEntriesFromDictionary:auto_launchd_plist]; - } - return reinterpret_cast<CFDictionaryRef>(launchd_plist); - } -} - -// Writes the launchd property list into the user's LaunchAgents directory, -// creating that directory if needed. This will cause the service process to be -// auto launched on the next user login. -bool ServiceProcessState::AddToAutoRun() { - // We're creating directories and writing a file. - base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, - base::BlockingType::MAY_BLOCK); - DCHECK(autorun_command_line_.get()); - base::ScopedCFTypeRef<CFStringRef> name(CopyServiceProcessLaunchDName()); - base::ScopedCFTypeRef<CFDictionaryRef> plist( - CreateServiceProcessLaunchdPlist(autorun_command_line_.get(), true)); - return Launchd::GetInstance()->WritePlistToFile(Launchd::User, - Launchd::Agent, - name, - plist); -} - -bool ServiceProcessState::RemoveFromAutoRun() { - return RemoveFromLaunchd(); -} - -bool ServiceProcessState::StateData::WatchExecutable() { - @autoreleasepool { - base::FilePath executable_path = base::FilePath(job_info.program); - std::unique_ptr<ExecFilePathWatcherCallback> callback( - new ExecFilePathWatcherCallback); - if (!callback->Init(executable_path)) { - DLOG(ERROR) << "executable_watcher.Init " << executable_path.value(); - return false; - } - if (!executable_watcher.Watch( - executable_path, base::FilePathWatcher::Type::kNonRecursive, - base::BindRepeating(&ExecFilePathWatcherCallback::NotifyPathChanged, - base::Owned(callback.release())))) { - DLOG(ERROR) << "executable_watcher.watch " << executable_path.value(); - return false; - } - return true; - } -} - -bool ExecFilePathWatcherCallback::Init(const base::FilePath& path) { - NSString* path_string = base::mac::FilePathToNSString(path); - NSURL* path_url = [NSURL fileURLWithPath:path_string isDirectory:NO]; - executable_fsref_.reset([[path_url fileReferenceURL] retain]); - return executable_fsref_.get() != nil; -} - -void ExecFilePathWatcherCallback::NotifyPathChanged(const base::FilePath& path, - bool error) { - if (error) { - NOTREACHED(); // TODO(darin): Do something smarter? - return; - } - - @autoreleasepool { - bool needs_shutdown = false; - bool needs_restart = false; - bool good_bundle = false; - - // Go from bundle/Contents/MacOS/executable to bundle. - NSURL* bundle_url = [[[executable_fsref_ URLByDeletingLastPathComponent] - URLByDeletingLastPathComponent] URLByDeletingLastPathComponent]; - if (bundle_url) { - base::ScopedCFTypeRef<CFBundleRef> bundle(CFBundleCreate( - kCFAllocatorDefault, base::mac::NSToCFCast(bundle_url))); - good_bundle = CFBundleGetIdentifier(bundle) != NULL; - } - - if (!good_bundle) { - needs_shutdown = true; - } else { - bool in_trash = false; - NSFileManager* file_manager = [NSFileManager defaultManager]; - NSURLRelationship relationship; - if ([file_manager getRelationship:&relationship - ofDirectory:NSTrashDirectory - inDomain:0 - toItemAtURL:executable_fsref_ - error:nil]) { - in_trash = relationship == NSURLRelationshipContains; - } - if (in_trash) { - needs_shutdown = true; - } else { - bool was_moved = true; - NSString* path_string = base::mac::FilePathToNSString(path); - NSURL* path_url = [NSURL fileURLWithPath:path_string isDirectory:NO]; - NSURL* path_ref = [path_url fileReferenceURL]; - if (path_ref != nil) { - if ([path_ref isEqual:executable_fsref_]) { - was_moved = false; - } - } - if (was_moved) { - needs_restart = true; - } - } - } - if (needs_shutdown || needs_restart) { - // First deal with the plist. - base::ScopedCFTypeRef<CFStringRef> name(CopyServiceProcessLaunchDName()); - if (needs_restart) { - base::ScopedCFTypeRef<CFMutableDictionaryRef> plist( - Launchd::GetInstance()->CreatePlistFromFile(Launchd::User, - Launchd::Agent, name)); - if (plist.get()) { - NSMutableDictionary* ns_plist = base::mac::CFToNSCast(plist); - NSURL* new_path = [executable_fsref_ filePathURL]; - DCHECK([new_path isFileURL]); - NSString* ns_new_path = [new_path path]; - ns_plist[@LAUNCH_JOBKEY_PROGRAM] = ns_new_path; - base::scoped_nsobject<NSMutableArray> args( - [ns_plist[@LAUNCH_JOBKEY_PROGRAMARGUMENTS] mutableCopy]); - args[0] = ns_new_path; - ns_plist[@LAUNCH_JOBKEY_PROGRAMARGUMENTS] = args; - if (!Launchd::GetInstance()->WritePlistToFile( - Launchd::User, Launchd::Agent, name, plist)) { - DLOG(ERROR) << "Unable to rewrite plist."; - needs_shutdown = true; - } - } else { - DLOG(ERROR) << "Unable to read plist."; - needs_shutdown = true; - } - } - if (needs_shutdown) { - if (!RemoveFromLaunchd()) { - DLOG(ERROR) << "Unable to RemoveFromLaunchd."; - } - } - - // Then deal with the process. - CFStringRef session_type = CFSTR(kServiceProcessSessionType); - if (needs_restart) { - if (!Launchd::GetInstance()->RestartJob(Launchd::User, Launchd::Agent, - name, session_type)) { - DLOG(ERROR) << "RestartLaunchdJob"; - needs_shutdown = true; - } - } - if (needs_shutdown) { - const std::string& label = - base::SysNSStringToUTF8(GetServiceProcessLaunchDLabel()); - if (!Launchd::GetInstance()->RemoveJob(label)) { - DLOG(ERROR) << "RemoveJob " << label; - // Exiting with zero, so launchd doesn't restart the process. - exit(0); - } - } - } - } -}
diff --git a/chrome/common/service_process_util_mac_unittest.mm b/chrome/common/service_process_util_mac_unittest.mm deleted file mode 100644 index adf0b2a..0000000 --- a/chrome/common/service_process_util_mac_unittest.mm +++ /dev/null
@@ -1,193 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/common/service_process_util.h" - -#import <Foundation/Foundation.h> - -#include <memory> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/feature_list.h" -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/files/scoped_temp_dir.h" -#include "base/mac/mac_util.h" -#include "base/mac/scoped_nsobject.h" -#include "base/message_loop/message_pump_type.h" -#include "base/process/launch.h" -#include "base/run_loop.h" -#include "base/strings/sys_string_conversions.h" -#include "base/test/task_environment.h" -#include "base/test/test_timeouts.h" -#include "base/threading/thread.h" -#include "chrome/common/mac/launchd.h" -#include "chrome/common/mac/mock_launchd.h" -#include "testing/gtest/include/gtest/gtest.h" - -class ServiceProcessStateFileManipulationTest : public ::testing::Test { - public: - void TrashFunc(const base::FilePath& src) { - NSURL* url = [NSURL fileURLWithPath:base::SysUTF8ToNSString(src.value())]; - ASSERT_TRUE(url); - NSURL* resultingItemURL = nil; - BOOL success = - [[NSFileManager defaultManager] trashItemAtURL:url - resultingItemURL:&resultingItemURL - error:nil]; - ASSERT_TRUE(success); - trashed_url_.reset([resultingItemURL retain]); - } - - protected: - ServiceProcessStateFileManipulationTest() - : io_thread_("ServiceProcessStateFileManipulationTest_IO") {} - - void SetUp() override { - base::Thread::Options options; - options.message_pump_type = base::MessagePumpType::IO; - ASSERT_TRUE(io_thread_.StartWithOptions(std::move(options))); - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - ASSERT_TRUE(MockLaunchd::MakeABundle(GetTempDirPath(), "Test", - &bundle_path_, &executable_path_)); - mock_launchd_ = std::make_unique<MockLaunchd>( - executable_path_, task_environment_.GetMainThreadTaskRunner(), - run_loop_.QuitClosure(), true); - scoped_launchd_instance_ = - std::make_unique<Launchd::ScopedInstance>(mock_launchd_.get()); - ASSERT_TRUE(service_process_state_.Initialize()); - ASSERT_TRUE(service_process_state_.SignalReady( - io_thread_.task_runner().get(), base::OnceClosure())); - task_environment_.GetMainThreadTaskRunner()->PostDelayedTask( - FROM_HERE, run_loop_.QuitWhenIdleClosure(), - TestTimeouts::action_max_timeout()); - } - - const MockLaunchd* mock_launchd() const { return mock_launchd_.get(); } - const base::FilePath& executable_path() const { return executable_path_; } - const base::FilePath& bundle_path() const { return bundle_path_; } - const base::FilePath& GetTempDirPath() const { return temp_dir_.GetPath(); } - - base::SingleThreadTaskRunner* GetIOTaskRunner() { - return io_thread_.task_runner().get(); - } - void Run() { run_loop_.Run(); } - - base::scoped_nsobject<NSURL> trashed_url_; - - private: - base::ScopedTempDir temp_dir_; - base::test::SingleThreadTaskEnvironment task_environment_{ - base::test::SingleThreadTaskEnvironment::MainThreadType::UI}; - base::RunLoop run_loop_; - base::Thread io_thread_; - base::FilePath executable_path_, bundle_path_; - std::unique_ptr<MockLaunchd> mock_launchd_; - std::unique_ptr<Launchd::ScopedInstance> scoped_launchd_instance_; - ServiceProcessState service_process_state_; -}; - -void DeleteFunc(const base::FilePath& file) { - EXPECT_TRUE(base::DeletePathRecursively(file)); -} - -void MoveFunc(const base::FilePath& from, const base::FilePath& to) { - EXPECT_TRUE(base::Move(from, to)); -} - -void ChangeAttr(const base::FilePath& from, int mode) { - EXPECT_EQ(chmod(from.value().c_str(), mode), 0); -} - -class ScopedAttributesRestorer { - public: - ScopedAttributesRestorer(const base::FilePath& path, int mode) - : path_(path), mode_(mode) {} - ~ScopedAttributesRestorer() { ChangeAttr(path_, mode_); } - - private: - base::FilePath path_; - int mode_; -}; - -TEST_F(ServiceProcessStateFileManipulationTest, VerifyLaunchD) { - // There have been problems where launchd has gotten into a bad state, usually - // because something had deleted all the files in /tmp. launchd depends on - // a Unix Domain Socket that it creates at /tmp/launchd*/sock. - // The symptom of this problem is that the service process connect fails - // on Mac and "launch_msg(): Socket is not connected" appears. - // This test is designed to make sure that launchd is working. - // http://crbug/75518 - // Note: This particular problem no longer affects launchd in 10.10+, since - // there is no user owned launchd process and sockets are no longer made at - // /tmp/launchd*/sock. This test is still useful as a sanity check to make - // sure that launchd appears to be working. - - base::CommandLine cl(base::FilePath("/bin/launchctl")); - cl.AppendArg("limit"); - - std::string output; - int exit_code = -1; - ASSERT_TRUE(base::GetAppOutputWithExitCode(cl, &output, &exit_code) && - exit_code == 0) - << " exit_code:" << exit_code << " " << output; -} - -// Flaky: https://crbug.com/903823 -TEST_F(ServiceProcessStateFileManipulationTest, DISABLED_DeleteFile) { - GetIOTaskRunner()->PostTask(FROM_HERE, - base::BindOnce(&DeleteFunc, executable_path())); - Run(); - ASSERT_TRUE(mock_launchd()->remove_called()); - ASSERT_TRUE(mock_launchd()->delete_called()); -} - -TEST_F(ServiceProcessStateFileManipulationTest, DeleteBundle) { - GetIOTaskRunner()->PostTask(FROM_HERE, - base::BindOnce(&DeleteFunc, bundle_path())); - Run(); - ASSERT_TRUE(mock_launchd()->remove_called()); - ASSERT_TRUE(mock_launchd()->delete_called()); -} - -TEST_F(ServiceProcessStateFileManipulationTest, MoveBundle) { - base::FilePath new_loc = GetTempDirPath().AppendASCII("MoveBundle"); - GetIOTaskRunner()->PostTask( - FROM_HERE, base::BindOnce(&MoveFunc, bundle_path(), new_loc)); - Run(); - ASSERT_TRUE(mock_launchd()->restart_called()); - ASSERT_TRUE(mock_launchd()->write_called()); -} - -TEST_F(ServiceProcessStateFileManipulationTest, MoveFile) { - base::FilePath new_loc = GetTempDirPath().AppendASCII("MoveFile"); - GetIOTaskRunner()->PostTask( - FROM_HERE, base::BindOnce(&MoveFunc, executable_path(), new_loc)); - Run(); - ASSERT_TRUE(mock_launchd()->remove_called()); - ASSERT_TRUE(mock_launchd()->delete_called()); -} - -TEST_F(ServiceProcessStateFileManipulationTest, TrashBundle) { - GetIOTaskRunner()->PostTask( - FROM_HERE, - base::BindOnce(&ServiceProcessStateFileManipulationTest::TrashFunc, - base::Unretained(this), bundle_path())); - Run(); - ASSERT_TRUE(mock_launchd()->remove_called()); - ASSERT_TRUE(mock_launchd()->delete_called()); - std::string path(base::SysNSStringToUTF8([trashed_url_ path])); - base::FilePath file_path(path); - ASSERT_TRUE(base::DeletePathRecursively(file_path)); -} - -TEST_F(ServiceProcessStateFileManipulationTest, ChangeAttr) { - ScopedAttributesRestorer restorer(bundle_path(), 0777); - GetIOTaskRunner()->PostTask(FROM_HERE, - base::BindOnce(&ChangeAttr, bundle_path(), 0222)); - Run(); - ASSERT_TRUE(mock_launchd()->remove_called()); - ASSERT_TRUE(mock_launchd()->delete_called()); -}
diff --git a/chrome/common/service_process_util_posix.cc b/chrome/common/service_process_util_posix.cc deleted file mode 100644 index 05917450..0000000 --- a/chrome/common/service_process_util_posix.cc +++ /dev/null
@@ -1,347 +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 "chrome/common/service_process_util_posix.h" - -#include <fcntl.h> - -#include <string> -#include <utility> - -#include "base/bind.h" -#include "base/files/file_util.h" -#include "base/location.h" -#include "base/logging.h" -#include "base/posix/eintr_wrapper.h" -#include "base/synchronization/waitable_event.h" -#include "base/task/current_thread.h" -#include "build/branding_buildflags.h" -#include "chrome/common/multi_process_lock.h" - -#if defined(OS_ANDROID) -#error "Should not be built on android" -#endif - -namespace { -int g_signal_socket = -1; - -#if !defined(OS_MAC) - -bool FilePathForMemoryName(const std::string& mem_name, base::FilePath* path) { - // mem_name will be used for a filename; make sure it doesn't - // contain anything which will confuse us. - DCHECK_EQ(std::string::npos, mem_name.find('/')); - DCHECK_EQ(std::string::npos, mem_name.find('\0')); - - base::FilePath temp_dir; - if (!GetShmemTempDir(false, &temp_dir)) - return false; - -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) - static const char kShmem[] = "com.google.Chrome.shmem."; -#else - static const char kShmem[] = "org.chromium.Chromium.shmem."; -#endif - *path = temp_dir.AppendASCII(kShmem + mem_name); - return true; -} - -#endif // !defined(OS_MAC) - -} // namespace - -#if !defined(OS_MAC) - -// static -base::WritableSharedMemoryRegion -ServiceProcessState::CreateServiceProcessDataRegion(size_t size) { - base::FilePath path; - - if (!FilePathForMemoryName(GetServiceProcessSharedMemName(), &path)) - return {}; - - // Make sure that the file is opened without any permission - // to other users on the system. - const mode_t kOwnerOnly = S_IRUSR | S_IWUSR; - - bool fix_size = true; - - // First, try to create the file. - base::ScopedFD fd(HANDLE_EINTR( - open(path.value().c_str(), O_RDWR | O_CREAT | O_EXCL, kOwnerOnly))); - if (!fd.is_valid()) { - // If this doesn't work, try and open an existing file in append mode. - // Opening an existing file in a world writable directory has two main - // security implications: - // - Attackers could plant a file under their control, so ownership of - // the file is checked below. - // - Attackers could plant a symbolic link so that an unexpected file - // is opened, so O_NOFOLLOW is passed to open(). -#if !defined(OS_AIX) - fd.reset(HANDLE_EINTR( - open(path.value().c_str(), O_RDWR | O_APPEND | O_NOFOLLOW))); -#else - // AIX has no 64-bit support for open flags such as - - // O_CLOEXEC, O_NOFOLLOW and O_TTY_INIT. - fd.reset(HANDLE_EINTR(open(path.value().c_str(), O_RDWR | O_APPEND))); -#endif - // Check that the current user owns the file. - // If uid != euid, then a more complex permission model is used and this - // API is not appropriate. - const uid_t real_uid = getuid(); - const uid_t effective_uid = geteuid(); - struct stat sb; - if (fd.is_valid() && (fstat(fd.get(), &sb) != 0 || sb.st_uid != real_uid || - sb.st_uid != effective_uid)) { - DLOG(ERROR) << "Invalid owner when opening existing shared memory file."; - return {}; - } - - // An existing file was opened, so its size should not be fixed. - fix_size = false; - } - - if (fd.is_valid() && fix_size) { - // Get current size. - struct stat stat; - if (fstat(fd.get(), &stat) != 0) - return {}; - const size_t current_size = stat.st_size; - if (current_size != size) { - if (HANDLE_EINTR(ftruncate(fd.get(), size)) != 0) - return {}; - } - } - - // Everything has worked out so far, so open a read-only handle to the region - // in order to be able to create a writable region (which needs a read-only - // handle in order to convert to a read-only region. - base::ScopedFD read_only_fd( - HANDLE_EINTR(open(path.value().c_str(), O_RDONLY, kOwnerOnly))); - if (!read_only_fd.is_valid()) { - DPLOG(ERROR) << "Could not reopen shared memory region as read-only"; - return {}; - } - - base::WritableSharedMemoryRegion writable_region = - base::WritableSharedMemoryRegion::Deserialize( - base::subtle::PlatformSharedMemoryRegion::Take( - base::subtle::ScopedFDPair(std::move(fd), - std::move(read_only_fd)), - base::subtle::PlatformSharedMemoryRegion::Mode::kWritable, size, - base::UnguessableToken::Create())); - if (!writable_region.IsValid()) { - DLOG(ERROR) << "Could not deserialize named region"; - return {}; - } - return writable_region; -} - -// static -base::ReadOnlySharedMemoryMapping -ServiceProcessState::OpenServiceProcessDataMapping(size_t size) { - base::FilePath path; - if (!FilePathForMemoryName(GetServiceProcessSharedMemName(), &path)) - return {}; - - base::ScopedFD fd(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY))); - if (!fd.is_valid()) { - DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed"; - return {}; - } - return base::ReadOnlySharedMemoryRegion::Deserialize( - base::subtle::PlatformSharedMemoryRegion::Take( - base::subtle::ScopedFDPair(std::move(fd), base::ScopedFD()), - base::subtle::PlatformSharedMemoryRegion::Mode::kReadOnly, - size, base::UnguessableToken::Create())) - .Map(); -} - -// static -bool ServiceProcessState::DeleteServiceProcessDataRegion() { - base::FilePath path; - if (!FilePathForMemoryName(GetServiceProcessSharedMemName(), &path)) - return false; - - if (PathExists(path)) - return base::DeleteFile(path); - - // Doesn't exist, so success. - return true; -} - -#endif // !defined(OS_MAC) - -// Attempts to take a lock named |name|. Returns the lock if successful, or -// nullptr if not. -std::unique_ptr<MultiProcessLock> TakeNamedLock(const std::string& name) { - std::unique_ptr<MultiProcessLock> lock = MultiProcessLock::Create(name); - if (!lock->TryLock()) - lock.reset(); - return lock; -} - -ServiceProcessTerminateMonitor::ServiceProcessTerminateMonitor( - base::OnceClosure terminate_task) - : terminate_task_(std::move(terminate_task)) {} - -ServiceProcessTerminateMonitor::~ServiceProcessTerminateMonitor() { -} - -void ServiceProcessTerminateMonitor::OnFileCanReadWithoutBlocking(int fd) { - if (!terminate_task_.is_null()) { - int buffer; - int length = read(fd, &buffer, sizeof(buffer)); - if ((length == sizeof(buffer)) && (buffer == kTerminateMessage)) { - std::move(terminate_task_).Run(); - } else if (length > 0) { - DLOG(ERROR) << "Unexpected read: " << buffer; - } else if (length == 0) { - DLOG(ERROR) << "Unexpected fd close"; - } else if (length < 0) { - DPLOG(ERROR) << "read"; - } - } -} - -void ServiceProcessTerminateMonitor::OnFileCanWriteWithoutBlocking(int fd) { - NOTIMPLEMENTED(); -} - -// "Forced" Shutdowns on POSIX are done via signals. The magic signal for -// a shutdown is SIGTERM. "write" is a signal safe function. PLOG(ERROR) is -// not, but we don't ever expect it to be called. -static void SigTermHandler(int sig, siginfo_t* info, void* uap) { - // TODO(dmaclach): add security here to make sure that we are being shut - // down by an appropriate process. - int message = ServiceProcessTerminateMonitor::kTerminateMessage; - if (write(g_signal_socket, &message, sizeof(message)) < 0) { - DPLOG(ERROR) << "write"; - } -} - -ServiceProcessState::StateData::StateData() - : watcher(FROM_HERE), set_action(false) { - memset(sockets, -1, sizeof(sockets)); - memset(&old_action, 0, sizeof(old_action)); -} - -void ServiceProcessState::StateData::SignalReady(base::WaitableEvent* signal, - bool* success) { - DCHECK(task_runner->BelongsToCurrentThread()); - DCHECK_EQ(g_signal_socket, -1); - DCHECK(!signal->IsSignaled()); - *success = base::CurrentIOThread::Get()->WatchFileDescriptor( - sockets[0], true, base::MessagePumpForIO::WATCH_READ, &watcher, - terminate_monitor.get()); - if (!*success) { - DLOG(ERROR) << "WatchFileDescriptor"; - signal->Signal(); - return; - } - g_signal_socket = sockets[1]; - - // Set up signal handler for SIGTERM. - struct sigaction action; - memset(&action, 0, sizeof(action)); - action.sa_sigaction = SigTermHandler; - sigemptyset(&action.sa_mask); - action.sa_flags = SA_SIGINFO; - *success = sigaction(SIGTERM, &action, &old_action) == 0; - if (!*success) { - DPLOG(ERROR) << "sigaction"; - signal->Signal(); - return; - } - - // If the old_action is not default, somebody else has installed a - // a competing handler. Our handler is going to override it so it - // won't be called. If this occurs it needs to be fixed. - DCHECK_EQ(old_action.sa_handler, SIG_DFL); - set_action = true; - -#if defined(OS_MAC) - *success = WatchExecutable(); - if (!*success) { - DLOG(ERROR) << "WatchExecutable"; - signal->Signal(); - return; - } -#elif defined(OS_POSIX) - initializing_lock.reset(); -#endif // OS_POSIX - signal->Signal(); -} - -ServiceProcessState::StateData::~StateData() { - // StateData is destroyed on the thread that called SignalReady() (if any) to - // satisfy the requirement that base::FilePathWatcher is destroyed in sequence - // with base::FilePathWatcher::Watch(). - DCHECK(!task_runner || task_runner->BelongsToCurrentThread()); - - // Cancel any pending file-descriptor watch before closing the descriptor. - watcher.StopWatchingFileDescriptor(); - - if (sockets[0] != -1) { - if (IGNORE_EINTR(close(sockets[0]))) { - DPLOG(ERROR) << "close"; - } - } - if (sockets[1] != -1) { - if (IGNORE_EINTR(close(sockets[1]))) { - DPLOG(ERROR) << "close"; - } - } - if (set_action) { - if (sigaction(SIGTERM, &old_action, NULL) < 0) { - DPLOG(ERROR) << "sigaction"; - } - } - g_signal_socket = -1; -} - -void ServiceProcessState::CreateState() { - DCHECK(!state_); - state_ = new StateData(); -} - -bool ServiceProcessState::SignalReady( - scoped_refptr<base::SingleThreadTaskRunner> task_runner, - base::OnceClosure terminate_task) { - DCHECK(task_runner); - DCHECK(state_); - -#if !defined(OS_MAC) - state_->running_lock = TakeServiceRunningLock(); - if (!state_->running_lock.get()) { - return false; - } -#endif - state_->terminate_monitor = std::make_unique<ServiceProcessTerminateMonitor>( - std::move(terminate_task)); - if (pipe(state_->sockets) < 0) { - DPLOG(ERROR) << "pipe"; - return false; - } - base::WaitableEvent signal_ready( - base::WaitableEvent::ResetPolicy::MANUAL, - base::WaitableEvent::InitialState::NOT_SIGNALED); - bool success = false; - - state_->task_runner = std::move(task_runner); - state_->task_runner->PostTask( - FROM_HERE, - base::BindOnce(&ServiceProcessState::StateData::SignalReady, - base::Unretained(state_), &signal_ready, &success)); - signal_ready.Wait(); - return success; -} - -void ServiceProcessState::TearDownState() { - if (state_ && state_->task_runner) - state_->task_runner->DeleteSoon(FROM_HERE, state_); - else - delete state_; - state_ = nullptr; -}
diff --git a/chrome/common/service_process_util_posix.h b/chrome/common/service_process_util_posix.h deleted file mode 100644 index d9ad391d..0000000 --- a/chrome/common/service_process_util_posix.h +++ /dev/null
@@ -1,93 +0,0 @@ -// Copyright (c) 2011 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_COMMON_SERVICE_PROCESS_UTIL_POSIX_H_ -#define CHROME_COMMON_SERVICE_PROCESS_UTIL_POSIX_H_ - -#include "chrome/common/service_process_util.h" - -#include <signal.h> - -#include <memory> - -#include "base/callback.h" -#include "base/memory/ref_counted.h" -#include "base/message_loop/message_pump_for_io.h" -#include "base/task/single_thread_task_runner.h" -#include "build/build_config.h" - -#if defined(OS_POSIX) && !defined(OS_MAC) -#include "chrome/common/multi_process_lock.h" -std::unique_ptr<MultiProcessLock> TakeServiceRunningLock(); -#endif - -#if defined(OS_MAC) -#include "base/files/file_path_watcher.h" -#include "base/mac/scoped_cftyperef.h" -#include "chrome/common/mac/service_management.h" - -namespace base { -class CommandLine; -} - -mac::services::JobOptions GetServiceProcessJobOptions( - base::CommandLine* cmd_line, - bool for_auto_launch); -#endif // OS_MAC - -namespace base { -class WaitableEvent; -} - -// Watches for |kTerminateMessage| to be written to the file descriptor it is -// watching. When it reads |kTerminateMessage|, it performs |terminate_task_|. -// Used here to monitor the socket listening to g_signal_socket. -class ServiceProcessTerminateMonitor - : public base::MessagePumpForIO::FdWatcher { - public: - - enum { - kTerminateMessage = 0xdecea5e - }; - - explicit ServiceProcessTerminateMonitor(base::OnceClosure terminate_task); - ~ServiceProcessTerminateMonitor() override; - - // MessagePumpForIO::FdWatcher overrides - void OnFileCanReadWithoutBlocking(int fd) override; - void OnFileCanWriteWithoutBlocking(int fd) override; - - private: - base::OnceClosure terminate_task_; -}; - -struct ServiceProcessState::StateData { - StateData(); - ~StateData(); - - // WatchFileDescriptor needs to be set up by the thread that is going - // to be monitoring it. - void SignalReady(base::WaitableEvent* signal, bool* success); - -#if defined(OS_MAC) - bool WatchExecutable(); - - mac::services::JobCheckinInfo job_info; - base::FilePathWatcher executable_watcher; -#else - std::unique_ptr<MultiProcessLock> initializing_lock; - std::unique_ptr<MultiProcessLock> running_lock; -#endif - std::unique_ptr<ServiceProcessTerminateMonitor> terminate_monitor; - base::MessagePumpForIO::FdWatchController watcher; - int sockets[2]; - struct sigaction old_action; - bool set_action; - - // The SingleThreadTaskRunner on which SignalReady and the destructor are - // invoked. - scoped_refptr<base::SingleThreadTaskRunner> task_runner; -}; - -#endif // CHROME_COMMON_SERVICE_PROCESS_UTIL_POSIX_H_
diff --git a/chrome/common/service_process_util_unittest.cc b/chrome/common/service_process_util_unittest.cc deleted file mode 100644 index 4dc4e30..0000000 --- a/chrome/common/service_process_util_unittest.cc +++ /dev/null
@@ -1,253 +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 "chrome/common/service_process_util.h" - -#include <memory> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/files/file_path.h" -#include "base/location.h" -#include "base/process/kill.h" -#include "base/process/launch.h" -#include "base/run_loop.h" -#include "base/strings/string_split.h" -#include "base/task/single_thread_task_runner.h" -#include "base/test/task_environment.h" -#include "base/threading/platform_thread.h" -#include "base/threading/thread_task_runner_handle.h" -#include "build/branding_buildflags.h" -#include "build/build_config.h" - -#if !defined(OS_MAC) -#include "base/at_exit.h" -#include "base/message_loop/message_pump_type.h" -#include "base/strings/string_util.h" -#include "base/strings/utf_string_conversions.h" -#include "base/test/multiprocess_test.h" -#include "base/test/test_timeouts.h" -#include "base/threading/thread.h" -#include "chrome/common/chrome_switches.h" -#include "components/version_info/version_info.h" -#include "content/public/common/content_switches.h" -#include "testing/multiprocess_func_list.h" - -#if defined(OS_WIN) -#include "base/win/win_util.h" -#endif - -#if defined(OS_POSIX) -#include "chrome/common/auto_start_linux.h" -#endif - -#if defined(USE_AURA) -// This test fails http://crbug.com/84854, and is very flaky on CrOS and -// somewhat flaky on other Linux. -#define MAYBE_ForceShutdown DISABLED_ForceShutdown -#else -#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_WIN) -#define MAYBE_ForceShutdown DISABLED_ForceShutdown -#else -#define MAYBE_ForceShutdown ForceShutdown -#endif -#endif - -namespace { - -bool g_good_shutdown = false; - -void ShutdownTask(base::RunLoop* loop) { - // Quit the main message loop. - ASSERT_FALSE(g_good_shutdown); - g_good_shutdown = true; - loop->QuitWhenIdle(); -} - -} // namespace - -TEST(ServiceProcessUtilTest, ScopedVersionedName) { - std::string test_str = "test"; - std::string scoped_name = GetServiceProcessScopedVersionedName(test_str); - EXPECT_TRUE(base::EndsWith(scoped_name, test_str, - base::CompareCase::SENSITIVE)); - EXPECT_NE(std::string::npos, - scoped_name.find(version_info::GetVersionNumber())); -} - -class ServiceProcessStateTest : public base::MultiProcessTest { - public: - ServiceProcessStateTest(); - ~ServiceProcessStateTest() override; - void SetUp() override; - base::SingleThreadTaskRunner* IOTaskRunner() { - return io_thread_.task_runner().get(); - } - void LaunchAndWait(const std::string& name); - - private: - // This is used to release the ServiceProcessState singleton after each test. - base::ShadowingAtExitManager at_exit_manager_; - base::Thread io_thread_; -}; - -ServiceProcessStateTest::ServiceProcessStateTest() - : io_thread_("ServiceProcessStateTestThread") { -} - -ServiceProcessStateTest::~ServiceProcessStateTest() { -} - -void ServiceProcessStateTest::SetUp() { - base::Thread::Options options(base::MessagePumpType::IO, 0); - ASSERT_TRUE(io_thread_.StartWithOptions(std::move(options))); -} - -void ServiceProcessStateTest::LaunchAndWait(const std::string& name) { - base::Process process = SpawnChild(name); - ASSERT_TRUE(process.IsValid()); - int exit_code = 0; - ASSERT_TRUE(process.WaitForExit(&exit_code)); - ASSERT_EQ(exit_code, 0); -} - -TEST_F(ServiceProcessStateTest, Singleton) { - ServiceProcessState state; - ASSERT_TRUE(state.Initialize()); - LaunchAndWait("ServiceProcessStateTestSingleton"); -} - -// http://crbug.com/396390 -TEST_F(ServiceProcessStateTest, DISABLED_ReadyState) { - ASSERT_FALSE(CheckServiceProcessReady()); - ServiceProcessState state; - ASSERT_TRUE(state.Initialize()); - ASSERT_TRUE(state.SignalReady(IOTaskRunner(), base::OnceClosure())); - LaunchAndWait("ServiceProcessStateTestReadyTrue"); - state.SignalStopped(); - LaunchAndWait("ServiceProcessStateTestReadyFalse"); -} - -TEST_F(ServiceProcessStateTest, AutoRun) { - ServiceProcessState state; - ASSERT_TRUE(state.AddToAutoRun()); - std::unique_ptr<base::CommandLine> autorun_command_line; -#if defined(OS_WIN) - std::string value_name = GetServiceProcessScopedName("_service_run"); - std::wstring value; - EXPECT_TRUE(base::win::ReadCommandFromAutoRun(HKEY_CURRENT_USER, - base::UTF8ToWide(value_name), - &value)); - autorun_command_line = - std::make_unique<base::CommandLine>(base::CommandLine::FromString(value)); -#elif defined(OS_POSIX) && !defined(OS_MAC) -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) - std::string base_desktop_name = "google-chrome-service.desktop"; -#else // BUILDFLAG(CHROMIUM_BRANDING) - std::string base_desktop_name = "chromium-service.desktop"; -#endif - std::string exec_value; - EXPECT_TRUE(AutoStart::GetAutostartFileValue( - GetServiceProcessScopedName(base_desktop_name), "Exec", &exec_value)); - - // Make sure |exec_value| doesn't contain strings a shell would - // treat specially. - ASSERT_EQ(std::string::npos, exec_value.find('#')); - ASSERT_EQ(std::string::npos, exec_value.find('\n')); - ASSERT_EQ(std::string::npos, exec_value.find('"')); - ASSERT_EQ(std::string::npos, exec_value.find('\'')); - - base::CommandLine::StringVector argv = base::SplitString( - exec_value, base::CommandLine::StringType(1, ' '), - base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - ASSERT_GE(argv.size(), 2U) - << "Expected at least one command-line option in: " << exec_value; - autorun_command_line.reset(new base::CommandLine(argv)); -#endif // defined(OS_WIN) - if (autorun_command_line.get()) { - EXPECT_EQ(autorun_command_line->GetSwitchValueASCII(switches::kProcessType), - std::string(switches::kCloudPrintServiceProcess)); - } - ASSERT_TRUE(state.RemoveFromAutoRun()); -#if defined(OS_WIN) - EXPECT_FALSE(base::win::ReadCommandFromAutoRun(HKEY_CURRENT_USER, - base::UTF8ToWide(value_name), - &value)); -#elif defined(OS_POSIX) && !defined(OS_MAC) - EXPECT_FALSE(AutoStart::GetAutostartFileValue( - GetServiceProcessScopedName(base_desktop_name), "Exec", &exec_value)); -#endif // defined(OS_WIN) -} - -TEST_F(ServiceProcessStateTest, SharedMem) { - std::string version; - base::ProcessId pid; -#if defined(OS_POSIX) - // On Posix, named shared memory uses a file on disk. This file could be lying - // around from previous crashes which could cause GetServiceProcessPid to lie, - // so we aggressively delete it before testing. On Windows, we use a named - // event so we don't have this issue. - ServiceProcessState::DeleteServiceProcessDataRegion(); -#endif // defined(OS_POSIX) - ASSERT_FALSE(ServiceProcessState::GetServiceProcessData(&version, &pid)); - ServiceProcessState state; - ASSERT_TRUE(state.Initialize()); - ASSERT_TRUE(ServiceProcessState::GetServiceProcessData(&version, &pid)); - ASSERT_EQ(base::GetCurrentProcId(), pid); -} - -TEST_F(ServiceProcessStateTest, MAYBE_ForceShutdown) { - base::Process process = SpawnChild("ServiceProcessStateTestShutdown"); - ASSERT_TRUE(process.IsValid()); - for (int i = 0; !CheckServiceProcessReady() && i < 10; ++i) { - base::PlatformThread::Sleep(TestTimeouts::tiny_timeout()); - } - ASSERT_TRUE(CheckServiceProcessReady()); - std::string version; - base::ProcessId pid; - ASSERT_TRUE(ServiceProcessState::GetServiceProcessData(&version, &pid)); - ASSERT_TRUE(ForceServiceProcessShutdown(version, pid)); - int exit_code = 0; - ASSERT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(), - &exit_code)); - ASSERT_EQ(exit_code, 0); -} - -MULTIPROCESS_TEST_MAIN(ServiceProcessStateTestSingleton) { - ServiceProcessState state; - EXPECT_FALSE(state.Initialize()); - return 0; -} - -MULTIPROCESS_TEST_MAIN(ServiceProcessStateTestReadyTrue) { - EXPECT_TRUE(CheckServiceProcessReady()); - return 0; -} - -MULTIPROCESS_TEST_MAIN(ServiceProcessStateTestReadyFalse) { - EXPECT_FALSE(CheckServiceProcessReady()); - return 0; -} - -MULTIPROCESS_TEST_MAIN(ServiceProcessStateTestShutdown) { - base::PlatformThread::SetName("ServiceProcessStateTestShutdownMainThread"); - base::test::SingleThreadTaskEnvironment task_environment; - base::RunLoop run_loop; - base::Thread io_thread_("ServiceProcessStateTestShutdownIOThread"); - base::Thread::Options options(base::MessagePumpType::IO, 0); - EXPECT_TRUE(io_thread_.StartWithOptions(std::move(options))); - ServiceProcessState state; - EXPECT_TRUE(state.Initialize()); - EXPECT_TRUE(state.SignalReady(io_thread_.task_runner().get(), - base::BindOnce(&ShutdownTask, &run_loop))); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, run_loop.QuitWhenIdleClosure(), - TestTimeouts::action_max_timeout()); - EXPECT_FALSE(g_good_shutdown); - run_loop.Run(); - EXPECT_TRUE(g_good_shutdown); - return 0; -} - -#endif // !OS_MAC
diff --git a/chrome/common/service_process_util_win.cc b/chrome/common/service_process_util_win.cc deleted file mode 100644 index c7bf259..0000000 --- a/chrome/common/service_process_util_win.cc +++ /dev/null
@@ -1,266 +0,0 @@ -// Copyright (c) 2011 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/common/service_process_util.h" - -#include <windows.h> - -#include <algorithm> -#include <memory> -#include <string> - -#include "base/callback.h" -#include "base/command_line.h" -#include "base/files/file_path.h" -#include "base/logging.h" -#include "base/memory/platform_shared_memory_region.h" -#include "base/memory/writable_shared_memory_region.h" -#include "base/path_service.h" -#include "base/strings/string_util.h" -#include "base/strings/utf_string_conversions.h" -#include "base/unguessable_token.h" -#include "base/win/object_watcher.h" -#include "base/win/scoped_handle.h" -#include "base/win/win_util.h" -#include "chrome/common/chrome_paths.h" -#include "chrome/common/chrome_switches.h" - -namespace { - -const char kTerminateEventSuffix[] = "_service_terminate_evt"; - -std::wstring GetServiceProcessReadyEventName() { - return base::UTF8ToWide( - GetServiceProcessScopedVersionedName("_service_ready")); -} - -std::wstring GetServiceProcessTerminateEventName() { - return base::UTF8ToWide( - GetServiceProcessScopedVersionedName(kTerminateEventSuffix)); -} - -std::string GetServiceProcessAutoRunKey() { - return GetServiceProcessScopedName("_service_run"); -} - -// Returns the name of the autotun reg value that we used to use for older -// versions of Chrome. -std::string GetObsoleteServiceProcessAutoRunKey() { - base::FilePath user_data_dir; - base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); - std::string scoped_name = base::WideToUTF8(user_data_dir.value()); - std::replace(scoped_name.begin(), scoped_name.end(), '\\', '!'); - std::replace(scoped_name.begin(), scoped_name.end(), '/', '!'); - scoped_name.append("_service_run"); - return scoped_name; -} - -class ServiceProcessTerminateMonitor - : public base::win::ObjectWatcher::Delegate { - public: - explicit ServiceProcessTerminateMonitor(base::OnceClosure terminate_task) - : terminate_task_(std::move(terminate_task)) {} - void Start() { - std::wstring event_name = GetServiceProcessTerminateEventName(); - DCHECK(event_name.length() <= MAX_PATH); - terminate_event_.Set(CreateEvent(nullptr, TRUE, FALSE, event_name.c_str())); - watcher_.StartWatchingOnce(terminate_event_.Get(), this); - } - - // base::ObjectWatcher::Delegate implementation. - void OnObjectSignaled(HANDLE object) override { - if (!terminate_task_.is_null()) - std::move(terminate_task_).Run(); - } - - private: - base::win::ScopedHandle terminate_event_; - base::win::ObjectWatcher watcher_; - base::OnceClosure terminate_task_; -}; - -} // namespace - -// Gets the name of the service process IPC channel. -mojo::NamedPlatformChannel::ServerName GetServiceProcessServerName() { - return mojo::NamedPlatformChannel::ServerNameFromUTF8( - GetServiceProcessScopedVersionedName("_service_ipc")); -} - -bool ForceServiceProcessShutdown(const std::string& version, - base::ProcessId process_id) { - base::win::ScopedHandle terminate_event; - std::string versioned_name = version; - versioned_name.append(kTerminateEventSuffix); - std::wstring event_name = - base::UTF8ToWide(GetServiceProcessScopedName(versioned_name)); - terminate_event.Set(OpenEvent(EVENT_MODIFY_STATE, FALSE, event_name.c_str())); - if (!terminate_event.IsValid()) - return false; - SetEvent(terminate_event.Get()); - return true; -} - -// static -base::WritableSharedMemoryRegion -ServiceProcessState::CreateServiceProcessDataRegion(size_t size) { - // Check maximum accounting for overflow. - if (size > static_cast<size_t>(std::numeric_limits<int>::max())) - return {}; - - std::u16string name = base::ASCIIToUTF16(GetServiceProcessSharedMemName()); - - SECURITY_ATTRIBUTES sa = {sizeof(sa), nullptr, FALSE}; - HANDLE raw_handle = - CreateFileMapping(INVALID_HANDLE_VALUE, &sa, PAGE_READWRITE, 0, - static_cast<DWORD>(size), base::as_wcstr(name)); - if (!raw_handle) { - auto error = GetLastError(); - DLOG(ERROR) << "Cannot create named mapping " << name << ": " << error; - return {}; - } - base::win::ScopedHandle handle(raw_handle); - - base::WritableSharedMemoryRegion writable_region = - base::WritableSharedMemoryRegion::Deserialize( - base::subtle::PlatformSharedMemoryRegion::Take( - std::move(handle), - base::subtle::PlatformSharedMemoryRegion::Mode::kWritable, size, - base::UnguessableToken::Create())); - if (!writable_region.IsValid()) { - DLOG(ERROR) << "Cannot deserialize file mapping"; - return {}; - } - return writable_region; -} - -// static -base::ReadOnlySharedMemoryMapping -ServiceProcessState::OpenServiceProcessDataMapping(size_t size) { - DWORD access = FILE_MAP_READ | SECTION_QUERY; - std::u16string name = base::ASCIIToUTF16(GetServiceProcessSharedMemName()); - HANDLE raw_handle = OpenFileMapping(access, false, base::as_wcstr(name)); - if (!raw_handle) { - auto err = GetLastError(); - DLOG(ERROR) << "OpenFileMapping failed for " << name << " / " - << GetServiceProcessSharedMemName() << " / " << err; - return {}; - } - - // The region is writable for this user, so the handle is converted to a - // WritableSharedMemoryMapping which is then downgraded to read-only for the - // mapping. - base::WritableSharedMemoryRegion writable_region = - base::WritableSharedMemoryRegion::Deserialize( - base::subtle::PlatformSharedMemoryRegion::Take( - base::win::ScopedHandle(raw_handle), - base::subtle::PlatformSharedMemoryRegion::Mode::kWritable, size, - base::UnguessableToken::Create())); - if (!writable_region.IsValid()) { - DLOG(ERROR) << "Unable to deserialize raw file mapping handle to " - << "WritableSharedMemoryRegion"; - return {}; - } - base::ReadOnlySharedMemoryRegion readonly_region = - base::WritableSharedMemoryRegion::ConvertToReadOnly( - std::move(writable_region)); - if (!readonly_region.IsValid()) { - DLOG(ERROR) << "Unable to convert to read-only region"; - return {}; - } - base::ReadOnlySharedMemoryMapping mapping = readonly_region.Map(); - if (!mapping.IsValid()) { - DLOG(ERROR) << "Unable to map region"; - return {}; - } - // The region will be closed on return, leaving on the mapping. - return mapping; -} - -// static -bool ServiceProcessState::DeleteServiceProcessDataRegion() { - // intentionally empty -- there is nothing for us to do on Windows. - return true; -} - -bool CheckServiceProcessReady() { - std::wstring event_name = GetServiceProcessReadyEventName(); - base::win::ScopedHandle event( - OpenEvent(SYNCHRONIZE | READ_CONTROL, false, event_name.c_str())); - if (!event.IsValid()) - return false; - // Check if the event is signaled. - return WaitForSingleObject(event.Get(), 0) == WAIT_OBJECT_0; -} - -struct ServiceProcessState::StateData { - // An event that is signaled when a service process is ready. - base::win::ScopedHandle ready_event; - std::unique_ptr<ServiceProcessTerminateMonitor> terminate_monitor; -}; - -void ServiceProcessState::CreateState() { - DCHECK(!state_); - state_ = new StateData; -} - -bool ServiceProcessState::TakeSingletonLock() { - DCHECK(state_); - std::wstring event_name = GetServiceProcessReadyEventName(); - DCHECK(event_name.length() <= MAX_PATH); - base::win::ScopedHandle service_process_ready_event; - service_process_ready_event.Set( - CreateEvent(nullptr, TRUE, FALSE, event_name.c_str())); - DWORD error = GetLastError(); - if ((error == ERROR_ALREADY_EXISTS) || (error == ERROR_ACCESS_DENIED)) - return false; - DCHECK(service_process_ready_event.IsValid()); - state_->ready_event.Set(service_process_ready_event.Take()); - return true; -} - -bool ServiceProcessState::SignalReady( - scoped_refptr<base::SingleThreadTaskRunner> task_runner, - base::OnceClosure terminate_task) { - DCHECK(state_); - DCHECK(state_->ready_event.IsValid()); - if (!SetEvent(state_->ready_event.Get())) { - return false; - } - if (!terminate_task.is_null()) { - state_->terminate_monitor = - std::make_unique<ServiceProcessTerminateMonitor>( - std::move(terminate_task)); - state_->terminate_monitor->Start(); - } - return true; -} - -bool ServiceProcessState::AddToAutoRun() { - DCHECK(autorun_command_line_.get()); - // Remove the old autorun value first because we changed the naming scheme - // for the autorun value name. - base::win::RemoveCommandFromAutoRun( - HKEY_CURRENT_USER, - base::UTF8ToWide(GetObsoleteServiceProcessAutoRunKey())); - return base::win::AddCommandToAutoRun( - HKEY_CURRENT_USER, - base::UTF8ToWide(GetServiceProcessAutoRunKey()), - autorun_command_line_->GetCommandLineString()); -} - -bool ServiceProcessState::RemoveFromAutoRun() { - // Remove the old autorun value first because we changed the naming scheme - // for the autorun value name. - base::win::RemoveCommandFromAutoRun( - HKEY_CURRENT_USER, - base::UTF8ToWide(GetObsoleteServiceProcessAutoRunKey())); - return base::win::RemoveCommandFromAutoRun( - HKEY_CURRENT_USER, base::UTF8ToWide(GetServiceProcessAutoRunKey())); -} - -void ServiceProcessState::TearDownState() { - delete state_; - state_ = nullptr; -}
diff --git a/chrome/install_static/install_util.cc b/chrome/install_static/install_util.cc index bad95bb07..8d56a2b3 100644 --- a/chrome/install_static/install_util.cc +++ b/chrome/install_static/install_util.cc
@@ -31,7 +31,6 @@ UNINITIALIZED, OTHER_PROCESS, BROWSER_PROCESS, - CLOUD_PRINT_SERVICE_PROCESS, #if BUILDFLAG(ENABLE_NACL) NACL_BROKER_PROCESS, NACL_LOADER_PROCESS, @@ -81,7 +80,6 @@ constexpr wchar_t kRegValueUsageStats[] = L"usagestats"; constexpr wchar_t kMetricsReportingEnabled[] = L"MetricsReportingEnabled"; -constexpr wchar_t kCloudPrintServiceProcess[] = L"service"; #if BUILDFLAG(ENABLE_NACL) constexpr wchar_t kNaClBrokerProcess[] = L"nacl-broker"; constexpr wchar_t kNaClLoaderProcess[] = L"nacl-loader"; @@ -262,8 +260,6 @@ ProcessType GetProcessType(const std::wstring& process_type) { if (process_type.empty()) return ProcessType::BROWSER_PROCESS; - if (process_type == kCloudPrintServiceProcess) - return ProcessType::CLOUD_PRINT_SERVICE_PROCESS; #if BUILDFLAG(ENABLE_NACL) if (process_type == kNaClBrokerProcess) return ProcessType::NACL_BROKER_PROCESS; @@ -282,7 +278,6 @@ // lies on a network share the sandbox will prevent us from accessing it. switch (process_type) { case ProcessType::BROWSER_PROCESS: - case ProcessType::CLOUD_PRINT_SERVICE_PROCESS: #if BUILDFLAG(ENABLE_NACL) case ProcessType::NACL_BROKER_PROCESS: case ProcessType::NACL_LOADER_PROCESS:
diff --git a/chrome/service/BUILD.gn b/chrome/service/BUILD.gn deleted file mode 100644 index ee589ade..0000000 --- a/chrome/service/BUILD.gn +++ /dev/null
@@ -1,103 +0,0 @@ -# Copyright 2014 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("//build/config/chromeos/ui_mode.gni") -import("//build/config/features.gni") -import("//printing/buildflags/buildflags.gni") - -assert(enable_print_preview) - -static_library("service") { - sources = [ - "cloud_print/cloud_print_auth.cc", - "cloud_print/cloud_print_auth.h", - "cloud_print/cloud_print_connector.cc", - "cloud_print/cloud_print_connector.h", - "cloud_print/cloud_print_message_handler.cc", - "cloud_print/cloud_print_message_handler.h", - "cloud_print/cloud_print_proxy.cc", - "cloud_print/cloud_print_proxy.h", - "cloud_print/cloud_print_proxy_backend.cc", - "cloud_print/cloud_print_proxy_backend.h", - "cloud_print/cloud_print_service_helpers.cc", - "cloud_print/cloud_print_service_helpers.h", - "cloud_print/cloud_print_token_store.cc", - "cloud_print/cloud_print_token_store.h", - "cloud_print/cloud_print_url_fetcher.cc", - "cloud_print/cloud_print_url_fetcher.h", - "cloud_print/cloud_print_wipeout.cc", - "cloud_print/cloud_print_wipeout.h", - "cloud_print/connector_settings.cc", - "cloud_print/connector_settings.h", - "cloud_print/job_status_updater.cc", - "cloud_print/job_status_updater.h", - "cloud_print/print_system.cc", - "cloud_print/print_system.h", - "cloud_print/printer_job_handler.cc", - "cloud_print/printer_job_handler.h", - "cloud_print/printer_job_queue_handler.cc", - "cloud_print/printer_job_queue_handler.h", - "net/in_process_network_connection_tracker.cc", - "net/in_process_network_connection_tracker.h", - "net/service_url_request_context_getter.cc", - "net/service_url_request_context_getter.h", - "service_ipc_server.cc", - "service_ipc_server.h", - "service_main.cc", - "service_process.cc", - "service_process.h", - "service_process_prefs.cc", - "service_process_prefs.h", - ] - - if (is_win) { - sources += [ - "cloud_print/cdd_conversion_win.cc", - "cloud_print/cdd_conversion_win.h", - "cloud_print/print_system_win.cc", - ] - } - - configs += [ "//build/config/compiler:wexit_time_destructors" ] - - deps = [ - "//base", - "//build:chromeos_buildflags", - "//chrome:strings", - "//chrome/common", - "//chrome/services/printing/public/mojom", - "//components/cloud_devices/common", - "//components/language/core/browser", - "//components/language/core/common", - "//components/network_session_configurator/browser", - "//components/printing/common", - "//google_apis", - "//jingle:notifier", - "//mojo/core/embedder", - "//mojo/public/cpp/platform", - "//mojo/public/cpp/system", - "//net", - "//printing", - "//printing/backend", - "//services/network/public/cpp", - "//skia", - "//third_party/webrtc_overrides:webrtc_component", - ] - - public_deps = [ "//chrome/common:service_process_mojom" ] - - if (use_cups) { - sources += [ "cloud_print/print_system_cups.cc" ] - } else if (is_win) { - sources += [ - "service_utility_process_host.cc", - "service_utility_process_host.h", - "service_utility_process_host_receiver_bindings.cc", - ] - deps += [ - "//chrome/common:cloud_print_utility_mojom", - "//sandbox/win:sandbox", - ] - } -}
diff --git a/chrome/service/DEPS b/chrome/service/DEPS deleted file mode 100644 index c673301..0000000 --- a/chrome/service/DEPS +++ /dev/null
@@ -1,13 +0,0 @@ -include_rules = [ - "+chrome/grit", - "+chrome/services/printing/public", - "+components/language/core/browser", - "+components/language/core/common", - "+components/network_session_configurator/common", - "+components/prefs", - "+components/version_info", - "+content/public/app", - "+mojo/core/embedder", - "+services/network/public/cpp", - "+sandbox/win/src", -]
diff --git a/chrome/service/DIR_METADATA b/chrome/service/DIR_METADATA deleted file mode 100644 index 67273c4..0000000 --- a/chrome/service/DIR_METADATA +++ /dev/null
@@ -1,3 +0,0 @@ -monorail: { - component: "Services>CloudPrint" -}
diff --git a/chrome/service/OWNERS b/chrome/service/OWNERS deleted file mode 100644 index aa6ec96c..0000000 --- a/chrome/service/OWNERS +++ /dev/null
@@ -1,4 +0,0 @@ -file://cloud_print/OWNERS - -per-file service_utility_process_host_receiver_bindings.*=set noparent -per-file service_utility_process_host_receiver_bindings.*=file://ipc/SECURITY_OWNERS
diff --git a/chrome/service/cloud_print/DEPS b/chrome/service/cloud_print/DEPS deleted file mode 100644 index 01a9fac1..0000000 --- a/chrome/service/cloud_print/DEPS +++ /dev/null
@@ -1,9 +0,0 @@ -include_rules = [ - "+components/cloud_devices/common", - "+components/crash/core/common/crash_keys.h", - "+components/printing/common", - "+google_apis", - # sync notifier depends on the common jingle notifier classes. - "+jingle/notifier", - "+services/network", -]
diff --git a/chrome/service/cloud_print/cdd_conversion_win.cc b/chrome/service/cloud_print/cdd_conversion_win.cc deleted file mode 100644 index 2027990..0000000 --- a/chrome/service/cloud_print/cdd_conversion_win.cc +++ /dev/null
@@ -1,138 +0,0 @@ -// Copyright 2014 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/service/cloud_print/cdd_conversion_win.h" - -#include <stddef.h> - -#include "base/memory/free_deleter.h" -#include "base/notreached.h" -#include "base/strings/string_number_conversions.h" -#include "components/cloud_devices/common/printer_description.h" -#include "printing/backend/win_helper.h" - -using cloud_devices::printer::ColorType; -using cloud_devices::printer::DuplexType; - -namespace cloud_print { - -bool IsValidCjt(const std::string& print_ticket_data) { - cloud_devices::CloudDeviceDescription description; - return description.InitFromString(print_ticket_data); -} - -std::unique_ptr<DEVMODE, base::FreeDeleter> CjtToDevMode( - const std::wstring& printer_name, - const std::string& print_ticket) { - std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode; - - cloud_devices::CloudDeviceDescription description; - if (!description.InitFromString(print_ticket)) - return dev_mode; - - printing::ScopedPrinterHandle printer; - if (!printer.OpenPrinterWithName(printer_name.c_str())) - return dev_mode; - - { - cloud_devices::printer::ColorTicketItem color; - if (color.LoadFrom(description)) { - bool is_color = color.value().type == ColorType::STANDARD_COLOR; - dev_mode = printing::CreateDevModeWithColor(printer.Get(), printer_name, - is_color); - } else { - dev_mode = printing::CreateDevMode(printer.Get(), NULL); - } - } - - if (!dev_mode) - return dev_mode; - - cloud_devices::printer::ColorTicketItem color; - cloud_devices::printer::DuplexTicketItem duplex; - cloud_devices::printer::OrientationTicketItem orientation; - cloud_devices::printer::MarginsTicketItem margins; - cloud_devices::printer::DpiTicketItem dpi; - cloud_devices::printer::FitToPageTicketItem fit_to_page; - cloud_devices::printer::MediaTicketItem media; - cloud_devices::printer::CopiesTicketItem copies; - cloud_devices::printer::PageRangeTicketItem page_range; - cloud_devices::printer::CollateTicketItem collate; - cloud_devices::printer::ReverseTicketItem reverse; - - if (orientation.LoadFrom(description)) { - dev_mode->dmFields |= DM_ORIENTATION; - if (orientation.value() == - cloud_devices::printer::OrientationType::LANDSCAPE) { - dev_mode->dmOrientation = DMORIENT_LANDSCAPE; - } else { - dev_mode->dmOrientation = DMORIENT_PORTRAIT; - } - } - - if (color.LoadFrom(description)) { - dev_mode->dmFields |= DM_COLOR; - if (color.value().type == ColorType::STANDARD_MONOCHROME) { - dev_mode->dmColor = DMCOLOR_MONOCHROME; - } else if (color.value().type == ColorType::STANDARD_COLOR) { - dev_mode->dmColor = DMCOLOR_COLOR; - } else { - NOTREACHED(); - } - } - - if (duplex.LoadFrom(description)) { - dev_mode->dmFields |= DM_DUPLEX; - if (duplex.value() == DuplexType::NO_DUPLEX) { - dev_mode->dmDuplex = DMDUP_SIMPLEX; - } else if (duplex.value() == DuplexType::LONG_EDGE) { - dev_mode->dmDuplex = DMDUP_VERTICAL; - } else if (duplex.value() == DuplexType::SHORT_EDGE) { - dev_mode->dmDuplex = DMDUP_HORIZONTAL; - } else { - NOTREACHED(); - } - } - - if (copies.LoadFrom(description)) { - dev_mode->dmFields |= DM_COPIES; - dev_mode->dmCopies = copies.value(); - } - - if (dpi.LoadFrom(description)) { - if (dpi.value().horizontal > 0) { - dev_mode->dmFields |= DM_PRINTQUALITY; - dev_mode->dmPrintQuality = dpi.value().horizontal; - } - if (dpi.value().vertical > 0) { - dev_mode->dmFields |= DM_YRESOLUTION; - dev_mode->dmYResolution = dpi.value().vertical; - } - } - - if (collate.LoadFrom(description)) { - dev_mode->dmFields |= DM_COLLATE; - dev_mode->dmCollate = (collate.value() ? DMCOLLATE_TRUE : DMCOLLATE_FALSE); - } - - if (media.LoadFrom(description)) { - static const size_t kFromUm = 100; // Windows uses 0.1mm. - int width = media.value().width_um / kFromUm; - int height = media.value().height_um / kFromUm; - unsigned id = 0; - if (base::StringToUint(media.value().vendor_id, &id) && id) { - dev_mode->dmFields |= DM_PAPERSIZE; - dev_mode->dmPaperSize = static_cast<short>(id); - } else if (width > 0 && height > 0) { - dev_mode->dmFields |= DM_PAPERWIDTH; - dev_mode->dmPaperWidth = width; - dev_mode->dmFields |= DM_PAPERLENGTH; - dev_mode->dmPaperLength = height; - } - } - - return printing::CreateDevMode(printer.Get(), dev_mode.get()); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cdd_conversion_win.h b/chrome/service/cloud_print/cdd_conversion_win.h deleted file mode 100644 index 921cdd0..0000000 --- a/chrome/service/cloud_print/cdd_conversion_win.h +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright 2014 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_SERVICE_CLOUD_PRINT_CDD_CONVERSION_WIN_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CDD_CONVERSION_WIN_H_ - -#include <windows.h> - -#include <memory> -#include <string> - -#include "base/memory/free_deleter.h" - -namespace cloud_print { - -bool IsValidCjt(const std::string& print_ticket); - -std::unique_ptr<DEVMODE, base::FreeDeleter> CjtToDevMode( - const std::wstring& printer_name, - const std::string& print_ticket); - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CDD_CONVERSION_WIN_H_
diff --git a/chrome/service/cloud_print/cloud_print_auth.cc b/chrome/service/cloud_print/cloud_print_auth.cc deleted file mode 100644 index fb7b2bda..0000000 --- a/chrome/service/cloud_print/cloud_print_auth.cc +++ /dev/null
@@ -1,176 +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 "chrome/service/cloud_print/cloud_print_auth.h" - -#include <memory> -#include <vector> - -#include "base/bind.h" -#include "base/location.h" -#include "base/strings/string_util.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/common/cloud_print/cloud_print_helpers.h" -#include "chrome/service/cloud_print/cloud_print_token_store.h" -#include "chrome/service/net/service_url_request_context_getter.h" -#include "google_apis/gaia/gaia_urls.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" - -namespace cloud_print { - -CloudPrintAuth::CloudPrintAuth( - Client* client, - const GURL& cloud_print_server_url, - const gaia::OAuthClientInfo& oauth_client_info, - const std::string& proxy_id, - const net::PartialNetworkTrafficAnnotationTag& partial_traffic_annotation) - : client_(client), - oauth_client_info_(oauth_client_info), - cloud_print_server_url_(cloud_print_server_url), - proxy_id_(proxy_id), - partial_traffic_annotation_(partial_traffic_annotation) { - DCHECK(client); -} - -void CloudPrintAuth::AuthenticateWithToken( - const std::string& cloud_print_token) { - VLOG(1) << "CP_AUTH: Authenticating with token"; - - client_login_token_ = cloud_print_token; - - // We need to get the credentials of the robot here. - GURL get_authcode_url = GetUrlForGetAuthCode(cloud_print_server_url_, - oauth_client_info_.client_id, - proxy_id_); - request_ = CloudPrintURLFetcher::Create(partial_traffic_annotation_); - request_->StartGetRequest(get_authcode_url, this, - kCloudPrintAuthMaxRetryCount); -} - -void CloudPrintAuth::AuthenticateWithRobotToken( - const std::string& robot_oauth_refresh_token, - const std::string& robot_email) { - VLOG(1) << "CP_AUTH: Authenticating with robot token"; - - robot_email_ = robot_email; - refresh_token_ = robot_oauth_refresh_token; - RefreshAccessToken(); -} - -void CloudPrintAuth::AuthenticateWithRobotAuthCode( - const std::string& robot_oauth_auth_code, - const std::string& robot_email) { - VLOG(1) << "CP_AUTH: Authenticating with robot auth code"; - - robot_email_ = robot_email; - // Now that we have an auth code we need to get the refresh and access tokens. - oauth_client_ = - std::make_unique<gaia::GaiaOAuthClient>(client_->GetURLLoaderFactory()); - oauth_client_->GetTokensFromAuthCode(oauth_client_info_, - robot_oauth_auth_code, - kCloudPrintAuthMaxRetryCount, - this); -} - -void CloudPrintAuth::RefreshAccessToken() { - oauth_client_ = - std::make_unique<gaia::GaiaOAuthClient>(client_->GetURLLoaderFactory()); - std::vector<std::string> empty_scope_list; // (Use scope from refresh token.) - oauth_client_->RefreshToken(oauth_client_info_, - refresh_token_, - empty_scope_list, - kCloudPrintAuthMaxRetryCount, - this); -} - -void CloudPrintAuth::OnGetTokensResponse(const std::string& refresh_token, - const std::string& access_token, - int expires_in_seconds) { - refresh_token_ = refresh_token; - // After saving the refresh token, this is just like having just refreshed - // the access token. Just call OnRefreshTokenResponse. - OnRefreshTokenResponse(access_token, expires_in_seconds); -} - -void CloudPrintAuth::OnRefreshTokenResponse(const std::string& access_token, - int expires_in_seconds) { - client_->OnAuthenticationComplete(access_token, refresh_token_, - robot_email_, user_email_); - - // Schedule a task to refresh the access token again when it is about to - // expire. - DCHECK(expires_in_seconds > kTokenRefreshGracePeriodSecs); - base::TimeDelta refresh_delay = - base::Seconds(expires_in_seconds - kTokenRefreshGracePeriodSecs); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(&CloudPrintAuth::RefreshAccessToken, this), - refresh_delay); -} - -void CloudPrintAuth::OnOAuthError() { - // Notify client about authentication error. - client_->OnInvalidCredentials(); -} - -void CloudPrintAuth::OnNetworkError(int response_code) { - // Since we specify infinite retries on network errors, this should never - // be called. - NOTREACHED() << - "OnNetworkError invoked when not expected, response code is " << - response_code; -} - -CloudPrintURLFetcher::ResponseAction CloudPrintAuth::HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - DCHECK(json_data.is_dict()); - - if (!succeeded) { - VLOG(1) << "CP_AUTH: Creating robot account failed"; - client_->OnInvalidCredentials(); - return CloudPrintURLFetcher::STOP_PROCESSING; - } - - const std::string* auth_code = json_data.FindStringKey(kOAuthCodeValue); - if (!auth_code) { - VLOG(1) << "CP_AUTH: Creating robot account returned invalid json response"; - client_->OnInvalidCredentials(); - return CloudPrintURLFetcher::STOP_PROCESSING; - } - - const std::string* robot_email = json_data.FindStringKey(kXMPPJidValue); - if (robot_email) - robot_email_ = *robot_email; - // Now that we have an auth code we need to get the refresh and access tokens. - oauth_client_ = - std::make_unique<gaia::GaiaOAuthClient>(client_->GetURLLoaderFactory()); - oauth_client_->GetTokensFromAuthCode(oauth_client_info_, *auth_code, - kCloudPrintAPIMaxRetryCount, this); - - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction CloudPrintAuth::OnRequestAuthError() { - VLOG(1) << "CP_AUTH: Creating robot account authentication error"; - - // Notify client about authentication error. - client_->OnInvalidCredentials(); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -std::string CloudPrintAuth::GetAuthHeaderValue() { - DCHECK(!client_login_token_.empty()); - std::string header; - header = "GoogleLogin auth="; - header += client_login_token_; - return header; -} - -CloudPrintAuth::~CloudPrintAuth() {} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_auth.h b/chrome/service/cloud_print/cloud_print_auth.h deleted file mode 100644 index ba0478e..0000000 --- a/chrome/service/cloud_print/cloud_print_auth.h +++ /dev/null
@@ -1,122 +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 CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_AUTH_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_AUTH_H_ - -#include <memory> -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/values.h" -#include "chrome/service/cloud_print/cloud_print_url_fetcher.h" -#include "google_apis/gaia/gaia_oauth_client.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "url/gurl.h" - -namespace network { -class SharedURLLoaderFactory; -} - -namespace cloud_print { - -// CloudPrintAuth is a class to handle login, token refresh, and other -// authentication tasks for Cloud Print. -// CloudPrintAuth will create new robot account for this proxy if needed. -// CloudPrintAuth will obtain new OAuth token. -// CloudPrintAuth will schedule periodic OAuth token refresh -// It is running in the same thread as CloudPrintProxyBackend::Core. -class CloudPrintAuth : public base::RefCountedThreadSafe<CloudPrintAuth>, - public CloudPrintURLFetcher::Delegate, - public gaia::GaiaOAuthClient::Delegate { - public: - class Client { - public: - virtual void OnAuthenticationComplete( - const std::string& access_token, - const std::string& robot_oauth_refresh_token, - const std::string& robot_email, - const std::string& user_email) = 0; - virtual void OnInvalidCredentials() = 0; - virtual scoped_refptr<network::SharedURLLoaderFactory> - GetURLLoaderFactory() = 0; - - protected: - virtual ~Client() {} - }; - - CloudPrintAuth(Client* client, - const GURL& cloud_print_server_url, - const gaia::OAuthClientInfo& oauth_client_info, - const std::string& proxy_id, - const net::PartialNetworkTrafficAnnotationTag& - partial_traffic_annotation); - - CloudPrintAuth(const CloudPrintAuth&) = delete; - CloudPrintAuth& operator=(const CloudPrintAuth&) = delete; - - // Note: - // - // The Authenticate* methods are the various entry points from - // CloudPrintProxyBackend::Core. It calls us on a dedicated thread to - // actually perform synchronous (and potentially blocking) operations. - void AuthenticateWithToken(const std::string& cloud_print_token); - void AuthenticateWithRobotToken(const std::string& robot_oauth_refresh_token, - const std::string& robot_email); - void AuthenticateWithRobotAuthCode(const std::string& robot_oauth_auth_code, - const std::string& robot_email); - - void RefreshAccessToken(); - - // gaia::GaiaOAuthClient::Delegate implementation. - void OnGetTokensResponse(const std::string& refresh_token, - const std::string& access_token, - int expires_in_seconds) override; - void OnRefreshTokenResponse(const std::string& access_token, - int expires_in_seconds) override; - void OnOAuthError() override; - void OnNetworkError(int response_code) override; - - // CloudPrintURLFetcher::Delegate implementation. - CloudPrintURLFetcher::ResponseAction HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) override; - CloudPrintURLFetcher::ResponseAction OnRequestAuthError() override; - std::string GetAuthHeaderValue() override; - - private: - friend class base::RefCountedThreadSafe<CloudPrintAuth>; - ~CloudPrintAuth() override; - - raw_ptr<Client> client_; - gaia::OAuthClientInfo oauth_client_info_; - std::unique_ptr<gaia::GaiaOAuthClient> oauth_client_; - - // The CloudPrintURLFetcher instance for the current request. - scoped_refptr<CloudPrintURLFetcher> request_; - - GURL cloud_print_server_url_; - // Proxy id, need to send to the cloud print server to find and update - // necessary printers during the migration process. - const std::string& proxy_id_; - // The OAuth2 refresh token for the robot. - std::string refresh_token_; - // The email address of the user. This is only used during initial - // authentication with an LSID. This is only used for storing in prefs for - // display purposes. - std::string user_email_; - // The email address of the robot account. - std::string robot_email_; - // client login token used to authenticate request to cloud print server to - // get the robot account. - std::string client_login_token_; - // Partial network traffic annotation for network requests. - const net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation_; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_AUTH_H_
diff --git a/chrome/service/cloud_print/cloud_print_connector.cc b/chrome/service/cloud_print/cloud_print_connector.cc deleted file mode 100644 index e6e2e02..0000000 --- a/chrome/service/cloud_print/cloud_print_connector.cc +++ /dev/null
@@ -1,654 +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 "chrome/service/cloud_print/cloud_print_connector.h" - -#include <stddef.h> - -#include <algorithm> -#include <limits> -#include <vector> - -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/containers/contains.h" -#include "base/hash/md5.h" -#include "base/location.h" -#include "base/rand_util.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/single_thread_task_runner.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/values.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/common/cloud_print/cloud_print_helpers.h" -#include "chrome/grit/generated_resources.h" -#include "chrome/service/cloud_print/cloud_print_service_helpers.h" -#include "net/base/mime_util.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "ui/base/l10n/l10n_util.h" - -namespace cloud_print { - -CloudPrintConnector::CloudPrintConnector( - Client* client, - const ConnectorSettings& settings, - const net::PartialNetworkTrafficAnnotationTag& partial_traffic_annotation) - : client_(client), - next_response_handler_(NULL), - partial_traffic_annotation_(partial_traffic_annotation) { - settings_.CopyFrom(settings); -} - -bool CloudPrintConnector::InitPrintSystem() { - if (print_system_.get()) - return true; - print_system_ = PrintSystem::CreateInstance( - settings_.print_system_settings()); - if (!print_system_.get()) { - NOTREACHED(); - return false; // No memory. - } - PrintSystem::PrintSystemResult result = print_system_->Init(); - if (!result.succeeded()) { - print_system_.reset(); - // We could not initialize the print system. We need to notify the server. - ReportUserMessage(kPrintSystemFailedMessageId, result.message()); - return false; - } - return true; -} - -bool CloudPrintConnector::Start() { - VLOG(1) << "CP_CONNECTOR: Starting connector" - << ", proxy id: " << settings_.proxy_id(); - - pending_tasks_.clear(); - - if (!InitPrintSystem()) - return false; - - // Start watching for updates from the print system. - print_server_watcher_ = print_system_->CreatePrintServerWatcher(); - print_server_watcher_->StartWatching(this); - - // Get list of registered printers. - AddPendingAvailableTask(); - return true; -} - -void CloudPrintConnector::Stop() { - VLOG(1) << "CP_CONNECTOR: Stopping connector" - << ", proxy id: " << settings_.proxy_id(); - DCHECK(IsRunning()); - // Do uninitialization here. - stats_ptr_factory_.InvalidateWeakPtrs(); - pending_tasks_.clear(); - print_server_watcher_.reset(); - request_.reset(); -} - -bool CloudPrintConnector::IsRunning() { - return print_server_watcher_.get() != NULL; -} - -std::list<std::string> CloudPrintConnector::GetPrinterIds() const { - std::list<std::string> printer_ids; - for (const auto& it : job_handler_map_) - printer_ids.push_back(it.first); - return printer_ids; -} - -void CloudPrintConnector::RegisterPrinters( - const printing::PrinterList& printers) { - if (!IsRunning()) - return; - - for (const auto& it : printers) { - if (settings_.ShouldConnect(it.printer_name)) - AddPendingRegisterTask(it); - } -} - -// Check for jobs for specific printer -void CloudPrintConnector::CheckForJobs(const std::string& reason, - const std::string& printer_id) { - if (!IsRunning()) - return; - - if (printer_id.empty()) { - for (const auto& it : job_handler_map_) - it.second->CheckForJobs(reason); - return; - } - - auto printer_it = job_handler_map_.find(printer_id); - if (printer_it == job_handler_map_.end()) { - std::string status_message = - l10n_util::GetStringUTF8(IDS_CLOUD_PRINT_ZOMBIE_PRINTER); - LOG(ERROR) << "CP_CONNECTOR: " << status_message - << " Printer_id: " << printer_id; - ReportUserMessage(kZombiePrinterMessageId, status_message); - return; - } - printer_it->second->CheckForJobs(reason); -} - -void CloudPrintConnector::UpdatePrinterSettings(const std::string& printer_id) { - // Since connector is managing many printers we need to go through all of them - // to select the correct settings. - GURL printer_list_url = GetUrlForPrinterList( - settings_.server_url(), settings_.proxy_id()); - StartGetRequest( - printer_list_url, - kCloudPrintRegisterMaxRetryCount, - &CloudPrintConnector::HandlePrinterListResponseSettingsUpdate); -} - -void CloudPrintConnector::OnPrinterAdded() { - AddPendingAvailableTask(); -} - -void CloudPrintConnector::OnPrinterDeleted(const std::string& printer_id) { - AddPendingDeleteTask(printer_id); -} - -void CloudPrintConnector::OnAuthError() { - client_->OnAuthFailed(); -} - -// CloudPrintURLFetcher::Delegate implementation. -CloudPrintURLFetcher::ResponseAction CloudPrintConnector::HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) { - // If this notification came as a result of user message call, stop it. - // Otherwise proceed continue processing. - if (user_message_request_ && user_message_request_->IsSameRequest(source)) - return CloudPrintURLFetcher::STOP_PROCESSING; - return CloudPrintURLFetcher::CONTINUE_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction CloudPrintConnector::HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - if (!IsRunning()) // Orphan response. Connector has been stopped already. - return CloudPrintURLFetcher::STOP_PROCESSING; - - DCHECK(next_response_handler_); - return (this->*next_response_handler_)(source, url, json_data, succeeded); -} - -CloudPrintURLFetcher::ResponseAction CloudPrintConnector::OnRequestAuthError() { - OnAuthError(); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -std::string CloudPrintConnector::GetAuthHeaderValue() { - return GetCloudPrintAuthHeaderFromStore(); -} - -CloudPrintConnector::~CloudPrintConnector() {} - -CloudPrintURLFetcher::ResponseAction -CloudPrintConnector::HandlePrinterListResponse(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - DCHECK(succeeded); - if (!succeeded) - return CloudPrintURLFetcher::RETRY_REQUEST; - - UpdateSettingsFromPrintersList(json_data); - - // Now we need to get the list of printers from the print system - // and split printers into 3 categories: - // - existing and registered printers - // - new printers - // - deleted printers - - // Get list of the printers from the print system. - printing::PrinterList local_printers; - PrintSystem::PrintSystemResult result = - print_system_->EnumeratePrinters(&local_printers); - bool full_list = result.succeeded(); - if (!full_list) { - std::string message = result.message(); - if (message.empty()) - message = l10n_util::GetStringFUTF8(IDS_CLOUD_PRINT_ENUM_FAILED, - l10n_util::GetStringUTF16(IDS_GOOGLE_CLOUD_PRINT)); - // There was a failure enumerating printers. Send a message to the server. - ReportUserMessage(kEnumPrintersFailedMessageId, message); - } - - // Go through the list of the cloud printers and init print job handlers. - // There may be no "printers" value in the JSON - const base::Value* printer_list = - json_data.FindKeyOfType(kPrinterListValue, base::Value::Type::LIST); - if (printer_list) { - for (const auto& printer : printer_list->GetList()) { - if (!printer.is_dict()) - continue; - - std::string printer_name; - std::string printer_id; - const std::string* str = printer.FindStringKey(kNameValue); - if (str) - printer_name = *str; - str = printer.FindStringKey(kIdValue); - if (str) - printer_id = *str; - - if (!settings_.ShouldConnect(printer_name)) { - VLOG(1) << "CP_CONNECTOR: Deleting " << printer_name - << " id: " << printer_id << " as blacklisted"; - AddPendingDeleteTask(printer_id); - } else if (RemovePrinterFromList(printer_name, &local_printers)) { - InitJobHandlerForPrinter(printer); - } else { - // Cloud printer is not found on the local system. - if (full_list || settings_.delete_on_enum_fail()) { - // Delete if we get the full list of printers or - // |delete_on_enum_fail_| is set. - VLOG(1) << "CP_CONNECTOR: Deleting " << printer_name - << " id: " << printer_id << " full_list: " << full_list - << " delete_on_enum_fail: " - << settings_.delete_on_enum_fail(); - AddPendingDeleteTask(printer_id); - } else { - LOG(ERROR) << "CP_CONNECTOR: Printer: " << printer_name - << " id: " << printer_id - << " not found in print system and full printer list was" - << " not received. Printer will not be able to process" - << " jobs."; - } - } - } - } - - request_ = nullptr; - - RegisterPrinters(local_printers); - ContinuePendingTaskProcessing(); // Continue processing background tasks. - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintConnector::HandlePrinterListResponseSettingsUpdate( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - DCHECK(succeeded); - if (!succeeded) - return CloudPrintURLFetcher::RETRY_REQUEST; - - UpdateSettingsFromPrintersList(json_data); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintConnector::HandlePrinterDeleteResponse(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - VLOG(1) << "CP_CONNECTOR: Handler printer delete response" - << ", succeeded: " << succeeded - << ", url: " << url; - ContinuePendingTaskProcessing(); // Continue processing background tasks. - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintConnector::HandleRegisterPrinterResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - VLOG(1) << "CP_CONNECTOR: Handler printer register response" - << ", succeeded: " << succeeded - << ", url: " << url; - if (succeeded) { - const base::Value* printer_list = - json_data.FindKeyOfType(kPrinterListValue, base::Value::Type::LIST); - // There should be a "printers" value in the JSON - if (printer_list && !printer_list->GetList().empty()) { - const base::Value& printer_data = printer_list->GetList()[0]; - if (printer_data.is_dict()) - InitJobHandlerForPrinter(printer_data); - } - } - ContinuePendingTaskProcessing(); // Continue processing background tasks. - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -void CloudPrintConnector::StartGetRequest(const GURL& url, - int max_retries, - ResponseHandler handler) { - next_response_handler_ = handler; - request_ = CloudPrintURLFetcher::Create(partial_traffic_annotation_); - request_->StartGetRequest(url, this, max_retries); -} - -void CloudPrintConnector::StartPostRequest( - const GURL& url, - int max_retries, - const std::string& mime_type, - const std::string& post_data, - ResponseHandler handler) { - next_response_handler_ = handler; - request_ = CloudPrintURLFetcher::Create(partial_traffic_annotation_); - request_->StartPostRequest(url, this, max_retries, mime_type, post_data); -} - -void CloudPrintConnector::ReportUserMessage(const std::string& message_id, - const std::string& failure_msg) { - // This is a fire and forget type of function. - // Result of this request will be ignored. - std::string mime_boundary = net::GenerateMimeMultipartBoundary(); - GURL url = GetUrlForUserMessage(settings_.server_url(), message_id); - std::string post_data; - net::AddMultipartValueForUpload(kMessageTextValue, failure_msg, mime_boundary, - std::string(), &post_data); - net::AddMultipartFinalDelimiterForUpload(mime_boundary, &post_data); - std::string mime_type("multipart/form-data; boundary="); - mime_type += mime_boundary; - user_message_request_ = - CloudPrintURLFetcher::Create(partial_traffic_annotation_); - user_message_request_->StartPostRequest(url, this, 1, mime_type, post_data); -} - -bool CloudPrintConnector::RemovePrinterFromList( - const std::string& printer_name, - printing::PrinterList* printer_list) { - for (auto it = printer_list->begin(); it != printer_list->end(); ++it) { - if (IsSamePrinter(it->printer_name, printer_name)) { - printer_list->erase(it); - return true; - } - } - return false; -} - -void CloudPrintConnector::InitJobHandlerForPrinter( - const base::Value& printer_data) { - DCHECK(printer_data.is_dict()); - - PrinterJobHandler::PrinterInfoFromCloud printer_info_cloud; - const std::string* str = printer_data.FindStringKey(kIdValue); - if (str) - printer_info_cloud.printer_id = *str; - DCHECK(!printer_info_cloud.printer_id.empty()); - VLOG(1) << "CP_CONNECTOR: Init job handler" - << ", printer id: " << printer_info_cloud.printer_id; - if (base::Contains(job_handler_map_, printer_info_cloud.printer_id)) - return; // Nothing to do if we already have a job handler for this printer. - - printing::PrinterBasicInfo printer_info; - str = printer_data.FindStringKey(kNameValue); - if (str) - printer_info.printer_name = *str; - DCHECK(!printer_info.printer_name.empty()); - str = printer_data.FindStringKey(kPrinterDescValue); - if (str) - printer_info.printer_description = *str; - // Printer status is a string value which actually contains an integer. - str = printer_data.FindStringKey(kPrinterStatusValue); - if (str) - base::StringToInt(*str, &printer_info.printer_status); - str = printer_data.FindStringKey(kPrinterCapsHashValue); - if (str) - printer_info_cloud.caps_hash = *str; - - const base::Value* tags_list = - printer_data.FindKeyOfType(kTagsValue, base::Value::Type::LIST); - if (tags_list) { - for (const auto& tag : tags_list->GetList()) { - if (tag.is_string() && - base::StartsWith(tag.GetString(), kCloudPrintServiceTagsHashTagName, - base::CompareCase::INSENSITIVE_ASCII)) { - std::vector<std::string> tag_parts = base::SplitString( - tag.GetString(), "=", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); - if (tag_parts.size() == 2) - printer_info_cloud.tags_hash = tag_parts[1]; - } - } - } - - int xmpp_timeout = - printer_data.FindIntKey(kLocalSettingsPendingXmppValue).value_or(0); - printer_info_cloud.current_xmpp_timeout = settings_.xmpp_ping_timeout_sec(); - printer_info_cloud.pending_xmpp_timeout = xmpp_timeout; - - scoped_refptr<PrinterJobHandler> job_handler; - job_handler = new PrinterJobHandler(printer_info, - printer_info_cloud, - settings_.server_url(), - print_system_.get(), - this); - job_handler_map_[printer_info_cloud.printer_id] = job_handler; - job_handler->Initialize(); -} - -void CloudPrintConnector::UpdateSettingsFromPrintersList( - const base::Value& json_data) { - int min_xmpp_timeout = std::numeric_limits<int>::max(); - // There may be no "printers" value in the JSON - const base::Value* printer_list = - json_data.FindKeyOfType(kPrinterListValue, base::Value::Type::LIST); - if (printer_list) { - for (const auto& printer : printer_list->GetList()) { - if (printer.is_dict()) { - int xmpp_timeout = 0; - absl::optional<int> timeout = - printer.FindIntKey(kLocalSettingsPendingXmppValue); - if (timeout) { - xmpp_timeout = *timeout; - min_xmpp_timeout = std::min(xmpp_timeout, min_xmpp_timeout); - } - } - } - } - - if (min_xmpp_timeout != std::numeric_limits<int>::max()) { - DCHECK(min_xmpp_timeout >= kMinXmppPingTimeoutSecs); - settings_.SetXmppPingTimeoutSec(min_xmpp_timeout); - client_->OnXmppPingUpdated(min_xmpp_timeout); - } -} - -void CloudPrintConnector::AddPendingAvailableTask() { - PendingTask task; - task.type = PENDING_PRINTERS_AVAILABLE; - AddPendingTask(task); -} - -void CloudPrintConnector::AddPendingDeleteTask(const std::string& id) { - PendingTask task; - task.type = PENDING_PRINTER_DELETE; - task.printer_id = id; - AddPendingTask(task); -} - -void CloudPrintConnector::AddPendingRegisterTask( - const printing::PrinterBasicInfo& info) { - PendingTask task; - task.type = PENDING_PRINTER_REGISTER; - task.printer_info = info; - AddPendingTask(task); -} - -void CloudPrintConnector::AddPendingTask(const PendingTask& task) { - pending_tasks_.push_back(task); - // If this is the only pending task, we need to start the process. - if (pending_tasks_.size() == 1) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&CloudPrintConnector::ProcessPendingTask, this)); - } -} - -void CloudPrintConnector::ProcessPendingTask() { - if (!IsRunning()) - return; // Orphan call. - - if (pending_tasks_.empty()) - return; // No peding tasks. - - PendingTask task = pending_tasks_.front(); - - switch (task.type) { - case PENDING_PRINTERS_AVAILABLE : - OnPrintersAvailable(); - break; - case PENDING_PRINTER_REGISTER : - OnPrinterRegister(task.printer_info); - break; - case PENDING_PRINTER_DELETE : - OnPrinterDelete(task.printer_id); - break; - default: - NOTREACHED(); - } -} - -void CloudPrintConnector::ContinuePendingTaskProcessing() { - if (pending_tasks_.empty()) - return; // No pending tasks. - - // Delete current task and repost if we have more task available. - pending_tasks_.pop_front(); - if (pending_tasks_.empty()) - return; - - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&CloudPrintConnector::ProcessPendingTask, this)); -} - -void CloudPrintConnector::OnPrintersAvailable() { - GURL printer_list_url = GetUrlForPrinterList( - settings_.server_url(), settings_.proxy_id()); - StartGetRequest(printer_list_url, - kCloudPrintRegisterMaxRetryCount, - &CloudPrintConnector::HandlePrinterListResponse); -} - -void CloudPrintConnector::OnPrinterRegister( - const printing::PrinterBasicInfo& info) { - for (const auto& it : job_handler_map_) { - if (IsSamePrinter(it.second->GetPrinterName(), info.printer_name)) { - // Printer already registered, continue to the next task. - ContinuePendingTaskProcessing(); - return; - } - } - - // Asynchronously fetch the printer caps and defaults. The story will - // continue in OnReceivePrinterCaps. - print_system_->GetPrinterCapsAndDefaults( - info.printer_name.c_str(), - base::BindOnce(&CloudPrintConnector::OnReceivePrinterCaps, - base::Unretained(this))); -} - -void CloudPrintConnector::OnPrinterDelete(const std::string& printer_id) { - // Remove corresponding printer job handler. - auto it = job_handler_map_.find(printer_id); - if (it != job_handler_map_.end()) { - it->second->Shutdown(); - job_handler_map_.erase(it); - } - - // TODO(gene): We probably should not try indefinitely here. Just once or - // twice should be enough. - // Bug: http://code.google.com/p/chromium/issues/detail?id=101850 - GURL url = GetUrlForPrinterDelete( - settings_.server_url(), printer_id, "printer_deleted"); - StartGetRequest(url, - kCloudPrintAPIMaxRetryCount, - &CloudPrintConnector::HandlePrinterDeleteResponse); -} - -void CloudPrintConnector::OnReceivePrinterCaps( - bool succeeded, - const std::string& printer_name, - const printing::PrinterCapsAndDefaults& caps_and_defaults) { - if (!IsRunning()) - return; // Orphan call. - - DCHECK(!pending_tasks_.empty()); - DCHECK_EQ(PENDING_PRINTER_REGISTER, pending_tasks_.front().type); - - if (!succeeded) { - LOG(ERROR) << "CP_CONNECTOR: Failed to get printer info" - << ", printer name: " << printer_name; - // This printer failed to register, notify the server of this failure. - std::u16string printer_name_utf16 = base::UTF8ToUTF16(printer_name); - std::string status_message = l10n_util::GetStringFUTF8( - IDS_CLOUD_PRINT_REGISTER_PRINTER_FAILED, - printer_name_utf16, - l10n_util::GetStringUTF16(IDS_GOOGLE_CLOUD_PRINT)); - ReportUserMessage(kGetPrinterCapsFailedMessageId, status_message); - - ContinuePendingTaskProcessing(); // Skip this printer registration. - return; - } - - const printing::PrinterBasicInfo& info = pending_tasks_.front().printer_info; - DCHECK(IsSamePrinter(info.printer_name, printer_name)); - - std::string mime_boundary = net::GenerateMimeMultipartBoundary(); - std::string post_data; - - net::AddMultipartValueForUpload(kProxyIdValue, - settings_.proxy_id(), mime_boundary, std::string(), &post_data); - net::AddMultipartValueForUpload(kPrinterNameValue, - info.printer_name, mime_boundary, std::string(), &post_data); - net::AddMultipartValueForUpload(kPrinterDescValue, - info.printer_description, mime_boundary, std::string(), &post_data); - net::AddMultipartValueForUpload(kPrinterStatusValue, - base::NumberToString(info.printer_status), - mime_boundary, std::string(), &post_data); - // Add local_settings with a current XMPP ping interval. - net::AddMultipartValueForUpload(kPrinterLocalSettingsValue, - base::StringPrintf(kCreateLocalSettingsXmppPingFormat, - settings_.xmpp_ping_timeout_sec()), - mime_boundary, std::string(), &post_data); - post_data += GetPostDataForPrinterInfo(info, mime_boundary); - if (caps_and_defaults.caps_mime_type == kContentTypeJSON) { - net::AddMultipartValueForUpload(kUseCDD, "true", mime_boundary, - std::string(), &post_data); - } - net::AddMultipartValueForUpload(kPrinterCapsValue, - caps_and_defaults.printer_capabilities, mime_boundary, - caps_and_defaults.caps_mime_type, &post_data); - net::AddMultipartValueForUpload(kPrinterDefaultsValue, - caps_and_defaults.printer_defaults, mime_boundary, - caps_and_defaults.defaults_mime_type, &post_data); - // Send a hash of the printer capabilities to the server. We will use this - // later to check if the capabilities have changed - net::AddMultipartValueForUpload(kPrinterCapsHashValue, - base::MD5String(caps_and_defaults.printer_capabilities), - mime_boundary, std::string(), &post_data); - net::AddMultipartFinalDelimiterForUpload(mime_boundary, &post_data); - std::string mime_type("multipart/form-data; boundary="); - mime_type += mime_boundary; - - GURL post_url = GetUrlForPrinterRegistration(settings_.server_url()); - StartPostRequest(post_url, kCloudPrintAPIMaxRetryCount, mime_type, post_data, - &CloudPrintConnector::HandleRegisterPrinterResponse); -} - -bool CloudPrintConnector::IsSamePrinter(const std::string& name1, - const std::string& name2) const { - return base::EqualsCaseInsensitiveASCII(name1, name2); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_connector.h b/chrome/service/cloud_print/cloud_print_connector.h deleted file mode 100644 index e58a8ac7..0000000 --- a/chrome/service/cloud_print/cloud_print_connector.h +++ /dev/null
@@ -1,213 +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 CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_CONNECTOR_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_CONNECTOR_H_ - -#include <list> -#include <map> -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/threading/thread.h" -#include "base/values.h" -#include "chrome/service/cloud_print/connector_settings.h" -#include "chrome/service/cloud_print/print_system.h" -#include "chrome/service/cloud_print/printer_job_handler.h" -#include "net/traffic_annotation/network_traffic_annotation.h" - -namespace cloud_print { - -// CloudPrintConnector handles top printer management tasks. -// - Matching local and cloud printers -// - Registration of local printers -// - Deleting cloud printers -// All tasks are posted to the common queue (PendingTasks) and executed -// one-by-one in FIFO order. -// CloudPrintConnector will notify client over Client interface. -class CloudPrintConnector - : public base::RefCountedThreadSafe<CloudPrintConnector>, - private PrintSystem::PrintServerWatcher::Delegate, - private PrinterJobHandler::Delegate, - private CloudPrintURLFetcher::Delegate { - public: - class Client { - public: - virtual void OnAuthFailed() = 0; - virtual void OnXmppPingUpdated(int ping_timeout) = 0; - protected: - virtual ~Client() {} - }; - - CloudPrintConnector(Client* client, - const ConnectorSettings& settings, - const net::PartialNetworkTrafficAnnotationTag& - partial_traffic_annotation); - - CloudPrintConnector(const CloudPrintConnector&) = delete; - CloudPrintConnector& operator=(const CloudPrintConnector&) = delete; - - bool Start(); - void Stop(); - bool IsRunning(); - - // Return list of printer ids registered with CloudPrint. - std::list<std::string> GetPrinterIds() const; - - // Check for jobs for specific printer. If printer id is empty - // jobs will be checked for all available printers. - void CheckForJobs(const std::string& reason, const std::string& printer_id); - - // Update settings for specific printer. - void UpdatePrinterSettings(const std::string& printer_id); - - private: - friend class base::RefCountedThreadSafe<CloudPrintConnector>; - - // Prototype for a response handler. - typedef CloudPrintURLFetcher::ResponseAction ( - CloudPrintConnector::*ResponseHandler)(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - - enum PendingTaskType { - PENDING_PRINTERS_NONE, - PENDING_PRINTERS_AVAILABLE, - PENDING_PRINTER_REGISTER, - PENDING_PRINTER_DELETE - }; - - // TODO(vitalybuka): Consider delete pending_tasks_ and just use MessageLoop. - struct PendingTask { - PendingTaskType type; - // Optional members, depending on type. - std::string printer_id; // For pending delete. - printing::PrinterBasicInfo printer_info; // For pending registration. - - PendingTask() : type(PENDING_PRINTERS_NONE) {} - ~PendingTask() {} - }; - - ~CloudPrintConnector() override; - - // PrintServerWatcherDelegate implementation: - void OnPrinterAdded() override; - - // PrinterJobHandler::Delegate implementation: - void OnPrinterDeleted(const std::string& printer_name) override; - void OnAuthError() override; - - // CloudPrintURLFetcher::Delegate implementation: - CloudPrintURLFetcher::ResponseAction HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) override; - CloudPrintURLFetcher::ResponseAction HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) override; - CloudPrintURLFetcher::ResponseAction OnRequestAuthError() override; - std::string GetAuthHeaderValue() override; - - // Begin response handlers - CloudPrintURLFetcher::ResponseAction HandlePrinterListResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - - CloudPrintURLFetcher::ResponseAction HandlePrinterListResponseSettingsUpdate( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - - CloudPrintURLFetcher::ResponseAction HandlePrinterDeleteResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - - CloudPrintURLFetcher::ResponseAction HandleRegisterPrinterResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - // End response handlers - - // Helper functions for network requests. - void StartGetRequest(const GURL& url, - int max_retries, - ResponseHandler handler); - void StartPostRequest(const GURL& url, - int max_retries, - const std::string& mime_type, - const std::string& post_data, - ResponseHandler handler); - - // Reports a diagnostic message to the server. - void ReportUserMessage(const std::string& message_id, - const std::string& failure_message); - - bool RemovePrinterFromList(const std::string& printer_name, - printing::PrinterList* printer_list); - - void InitJobHandlerForPrinter(const base::Value& printer_data); - - void UpdateSettingsFromPrintersList(const base::Value& json_data); - - void AddPendingAvailableTask(); - void AddPendingDeleteTask(const std::string& id); - void AddPendingRegisterTask(const printing::PrinterBasicInfo& info); - void AddPendingTask(const PendingTask& task); - void ProcessPendingTask(); - void ContinuePendingTaskProcessing(); - void OnPrintersAvailable(); - void OnPrinterRegister(const printing::PrinterBasicInfo& info); - void OnPrinterDelete(const std::string& name); - - void OnReceivePrinterCaps( - bool succeeded, - const std::string& printer_name, - const printing::PrinterCapsAndDefaults& caps_and_defaults); - - // Register printer from the list. - void RegisterPrinters(const printing::PrinterList& printers); - - bool IsSamePrinter(const std::string& name1, const std::string& name2) const; - bool InitPrintSystem(); - - void ReportStats(); - - // CloudPrintConnector client. - raw_ptr<Client> client_; - // Connector settings. - ConnectorSettings settings_; - // Pointer to current print system. - scoped_refptr<PrintSystem> print_system_; - // Watcher for print system updates. - scoped_refptr<PrintSystem::PrintServerWatcher> - print_server_watcher_; - // A map of printer id to job handler. - using JobHandlerMap = std::map<std::string, scoped_refptr<PrinterJobHandler>>; - JobHandlerMap job_handler_map_; - // Next response handler. - ResponseHandler next_response_handler_; - // The list of pending tasks to be done in the background. - std::list<PendingTask> pending_tasks_; - // The CloudPrintURLFetcher instance for the current request. - scoped_refptr<CloudPrintURLFetcher> request_; - // The CloudPrintURLFetcher instance for the user message request. - scoped_refptr<CloudPrintURLFetcher> user_message_request_; - // Partial network traffic annotation for network requests. - const net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation_; - - base::WeakPtrFactory<CloudPrintConnector> stats_ptr_factory_{this}; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_CONNECTOR_H_
diff --git a/chrome/service/cloud_print/cloud_print_message_handler.cc b/chrome/service/cloud_print/cloud_print_message_handler.cc deleted file mode 100644 index 443a7c4b..0000000 --- a/chrome/service/cloud_print/cloud_print_message_handler.cc +++ /dev/null
@@ -1,59 +0,0 @@ -// Copyright 2015 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/service/cloud_print/cloud_print_message_handler.h" - -#include <memory> -#include <utility> -#include <vector> - -#include "chrome/common/cloud_print/cloud_print_proxy_info.h" -#include "mojo/public/cpp/bindings/self_owned_receiver.h" - -namespace cloud_print { - -CloudPrintMessageHandler::CloudPrintMessageHandler( - CloudPrintProxy::Provider* proxy_provider) - : proxy_provider_(proxy_provider) { - DCHECK(proxy_provider); -} - -CloudPrintMessageHandler::~CloudPrintMessageHandler() = default; - -// static -void CloudPrintMessageHandler::Create( - CloudPrintProxy::Provider* proxy_provider, - mojo::PendingReceiver<cloud_print::mojom::CloudPrint> receiver) { - mojo::MakeSelfOwnedReceiver( - std::make_unique<CloudPrintMessageHandler>(proxy_provider), - std::move(receiver)); -} - -void CloudPrintMessageHandler::EnableCloudPrintProxyWithRobot( - const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_settings) { - proxy_provider_->GetCloudPrintProxy()->EnableForUserWithRobot( - robot_auth_code, robot_email, user_email, std::move(user_settings)); -} - -void CloudPrintMessageHandler::GetCloudPrintProxyInfo( - GetCloudPrintProxyInfoCallback callback) { - CloudPrintProxyInfo info; - proxy_provider_->GetCloudPrintProxy()->GetProxyInfo(&info); - std::move(callback).Run(info.enabled, info.email, info.proxy_id); -} - -void CloudPrintMessageHandler::GetPrinters(GetPrintersCallback callback) { - std::vector<std::string> printers; - proxy_provider_->GetCloudPrintProxy()->GetPrinters(&printers); - std::move(callback).Run(printers); -} - -void CloudPrintMessageHandler::DisableCloudPrintProxy() { - proxy_provider_->GetCloudPrintProxy()->UnregisterPrintersAndDisableForUser(); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_message_handler.h b/chrome/service/cloud_print/cloud_print_message_handler.h deleted file mode 100644 index 3611422a..0000000 --- a/chrome/service/cloud_print/cloud_print_message_handler.h +++ /dev/null
@@ -1,46 +0,0 @@ -// Copyright 2015 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_SERVICE_CLOUD_PRINT_CLOUD_PRINT_MESSAGE_HANDLER_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_MESSAGE_HANDLER_H_ - -#include <string> - -#include "base/memory/raw_ptr.h" -#include "chrome/common/cloud_print.mojom.h" -#include "chrome/service/cloud_print/cloud_print_proxy.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" - -namespace cloud_print { - -// Handles IPC messages for Cloud Print. Lives on the main thread. -class CloudPrintMessageHandler : public cloud_print::mojom::CloudPrint { - public: - explicit CloudPrintMessageHandler(CloudPrintProxy::Provider* proxy_provider); - - CloudPrintMessageHandler(const CloudPrintMessageHandler&) = delete; - CloudPrintMessageHandler& operator=(const CloudPrintMessageHandler&) = delete; - - ~CloudPrintMessageHandler() override; - - static void Create( - CloudPrintProxy::Provider* proxy_provider, - mojo::PendingReceiver<cloud_print::mojom::CloudPrint> receiver); - - private: - // cloud_print::mojom::CloudPrintProxy. - void EnableCloudPrintProxyWithRobot(const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_settings) override; - void GetCloudPrintProxyInfo(GetCloudPrintProxyInfoCallback callback) override; - void GetPrinters(GetPrintersCallback callback) override; - void DisableCloudPrintProxy() override; - - raw_ptr<CloudPrintProxy::Provider> proxy_provider_; // Owned by our owner. -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_MESSAGE_HANDLER_H_
diff --git a/chrome/service/cloud_print/cloud_print_proxy.cc b/chrome/service/cloud_print/cloud_print_proxy.cc deleted file mode 100644 index 2f0babfc..0000000 --- a/chrome/service/cloud_print/cloud_print_proxy.cc +++ /dev/null
@@ -1,267 +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 "chrome/service/cloud_print/cloud_print_proxy.h" - -#include <stddef.h> - -#include <memory> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/path_service.h" -#include "base/process/kill.h" -#include "base/process/launch.h" -#include "base/values.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/common/cloud_print/cloud_print_proxy_info.h" -#include "chrome/common/pref_names.h" -#include "chrome/service/cloud_print/print_system.h" -#include "chrome/service/service_process.h" -#include "chrome/service/service_process_prefs.h" -#include "google_apis/gaia/gaia_oauth_client.h" -#include "google_apis/google_api_keys.h" -#include "url/gurl.h" - -namespace cloud_print { - -CloudPrintProxy::CloudPrintProxy() = default; - -CloudPrintProxy::~CloudPrintProxy() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - ShutdownBackend(); -} - -void CloudPrintProxy::Initialize( - ServiceProcessPrefs* service_prefs, - Client* client, - network::NetworkConnectionTracker* network_connection_tracker) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(network_connection_tracker); - service_prefs_ = service_prefs; - client_ = client; - network_connection_tracker_ = network_connection_tracker; -} - -void CloudPrintProxy::EnableForUser() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!CreateBackend()) - return; - DCHECK(backend_.get()); - // Read persisted robot credentials because we may decide to reuse it if the - // passed in LSID belongs the same user. - std::string robot_refresh_token = service_prefs_->GetString( - prefs::kCloudPrintRobotRefreshToken, std::string()); - std::string robot_email = - service_prefs_->GetString(prefs::kCloudPrintRobotEmail, std::string()); - user_email_ = service_prefs_->GetString(prefs::kCloudPrintEmail, user_email_); - - // See if we have persisted robot credentials. - if (!robot_refresh_token.empty()) { - DCHECK(!robot_email.empty()); - backend_->InitializeWithRobotToken(robot_refresh_token, robot_email); - } else { - // Finally see if we have persisted user credentials (legacy case). - std::string cloud_print_token = - service_prefs_->GetString(prefs::kCloudPrintAuthToken, std::string()); - DCHECK(!cloud_print_token.empty()); - backend_->InitializeWithToken(cloud_print_token); - } - if (client_) { - client_->OnCloudPrintProxyEnabled(true); - } -} - -void CloudPrintProxy::EnableForUserWithRobot(const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_settings) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - ShutdownBackend(); - std::string proxy_id( - service_prefs_->GetString(prefs::kCloudPrintProxyId, std::string())); - service_prefs_->RemovePref(prefs::kCloudPrintRoot); - if (!proxy_id.empty()) { - // Keep only proxy id; - service_prefs_->SetString(prefs::kCloudPrintProxyId, proxy_id); - } - service_prefs_->SetValue( - prefs::kCloudPrintUserSettings, - base::Value::ToUniquePtrValue(user_settings.Clone())); - service_prefs_->WritePrefs(); - - if (!CreateBackend()) - return; - DCHECK(backend_.get()); - user_email_ = user_email; - backend_->InitializeWithRobotAuthCode(robot_auth_code, robot_email); - if (client_) { - client_->OnCloudPrintProxyEnabled(true); - } -} - -bool CloudPrintProxy::CreateBackend() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (backend_.get()) - return false; - - ConnectorSettings settings; - settings.InitFrom(service_prefs_); - - // By default we don't poll for jobs when we lose XMPP connection. But this - // behavior can be overridden by a preference. - bool enable_job_poll = - service_prefs_->GetBoolean(prefs::kCloudPrintEnableJobPoll, false); - - gaia::OAuthClientInfo oauth_client_info; - oauth_client_info.client_id = - google_apis::GetOAuth2ClientID(google_apis::CLIENT_CLOUD_PRINT); - oauth_client_info.client_secret = - google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_CLOUD_PRINT); - oauth_client_info.redirect_uri = "oob"; - backend_ = std::make_unique<CloudPrintProxyBackend>( - this, settings, oauth_client_info, enable_job_poll, - network_connection_tracker_); - return true; -} - -void CloudPrintProxy::UnregisterPrintersAndDisableForUser() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (backend_.get()) { - // Try getting auth and printers info from the backend. - // We'll get notified in this case. - backend_->UnregisterPrinters(); - } else { - // If no backend available, disable connector immediately. - DisableForUser(); - } -} - -void CloudPrintProxy::DisableForUser() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - user_email_.clear(); - enabled_ = false; - if (client_) { - client_->OnCloudPrintProxyDisabled(true); - } - ShutdownBackend(); -} - -void CloudPrintProxy::GetProxyInfo(CloudPrintProxyInfo* info) { - info->enabled = enabled_; - info->email.clear(); - if (enabled_) - info->email = user_email(); - ConnectorSettings settings; - settings.InitFrom(service_prefs_); - info->proxy_id = settings.proxy_id(); -} - -void CloudPrintProxy::GetPrinters(std::vector<std::string>* printers) { - ConnectorSettings settings; - settings.InitFrom(service_prefs_); - scoped_refptr<PrintSystem> print_system = - PrintSystem::CreateInstance(settings.print_system_settings()); - if (!print_system.get()) - return; - PrintSystem::PrintSystemResult result = print_system->Init(); - if (!result.succeeded()) - return; - printing::PrinterList printer_list; - print_system->EnumeratePrinters(&printer_list); - for (size_t i = 0; i < printer_list.size(); ++i) - printers->push_back(printer_list[i].printer_name); -} - -void CloudPrintProxy::OnAuthenticated( - const std::string& robot_oauth_refresh_token, - const std::string& robot_email, - const std::string& user_email) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - service_prefs_->SetString(prefs::kCloudPrintRobotRefreshToken, - robot_oauth_refresh_token); - service_prefs_->SetString(prefs::kCloudPrintRobotEmail, - robot_email); - // If authenticating from a robot, the user email will be empty. - if (!user_email.empty()) { - user_email_ = user_email; - } - service_prefs_->SetString(prefs::kCloudPrintEmail, user_email_); - enabled_ = true; - DCHECK(!user_email_.empty()); - service_prefs_->WritePrefs(); - // When this switch used we don't want connector continue running, we just - // need authentication. - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kCloudPrintSetupProxy)) { - ShutdownBackend(); - if (client_) { - client_->OnCloudPrintProxyDisabled(false); - } - } -} - -void CloudPrintProxy::OnAuthenticationFailed() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // Don't disable permanently. Could be just connection issue. - ShutdownBackend(); - if (client_) { - client_->OnCloudPrintProxyDisabled(false); - } -} - -void CloudPrintProxy::OnPrintSystemUnavailable() { - // If the print system is unavailable, we want to shutdown the proxy and - // disable it non-persistently. - ShutdownBackend(); - if (client_) { - client_->OnCloudPrintProxyDisabled(false); - } -} - -void CloudPrintProxy::OnUnregisterPrinters( - const std::string& auth_token, - const std::list<std::string>& printer_ids) { - ShutdownBackend(); - ConnectorSettings settings; - settings.InitFrom(service_prefs_); - net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation = - net::DefinePartialNetworkTrafficAnnotation("cloud_print_proxy", - "cloud_print", R"( - semantics { - description: - "Sends a request to Cloud Print to unregister one or more " - "printers." - trigger: - "User request of unregistering printers or a change of an admin " - "policy regarding Cloud Print." - data: "OAuth2 token and list of printer ids to unregister." - })"); - wipeout_ = std::make_unique<CloudPrintWipeout>(this, settings.server_url(), - partial_traffic_annotation); - wipeout_->UnregisterPrinters(auth_token, printer_ids); -} - -void CloudPrintProxy::OnXmppPingUpdated(int ping_timeout) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - service_prefs_->SetInt(prefs::kCloudPrintXmppPingTimeout, ping_timeout); - service_prefs_->WritePrefs(); -} - -void CloudPrintProxy::OnUnregisterPrintersComplete() { - wipeout_.reset(); - // Finish disabling cloud print for this user. - DisableForUser(); -} - -void CloudPrintProxy::ShutdownBackend() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (backend_.get()) - backend_->Shutdown(); - backend_.reset(); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_proxy.h b/chrome/service/cloud_print/cloud_print_proxy.h deleted file mode 100644 index 06c1bad2..0000000 --- a/chrome/service/cloud_print/cloud_print_proxy.h +++ /dev/null
@@ -1,120 +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 CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_H_ - -#include <list> -#include <memory> -#include <string> -#include <vector> - -#include "base/memory/raw_ptr.h" -#include "base/sequence_checker.h" -#include "base/values.h" -#include "chrome/service/cloud_print/cloud_print_proxy_backend.h" -#include "chrome/service/cloud_print/cloud_print_wipeout.h" - -class ServiceProcessPrefs; - -namespace network { -class NetworkConnectionTracker; -} - -namespace cloud_print { - -struct CloudPrintProxyInfo; - -// CloudPrintProxy is the layer between the service process UI thread -// and the cloud print proxy backend. -class CloudPrintProxy : public CloudPrintProxyFrontend, - public CloudPrintWipeout::Client { - public: - class Client { - public: - virtual ~Client() {} - virtual void OnCloudPrintProxyEnabled(bool persist_state) {} - virtual void OnCloudPrintProxyDisabled(bool persist_state) {} - }; - CloudPrintProxy(); - - CloudPrintProxy(const CloudPrintProxy&) = delete; - CloudPrintProxy& operator=(const CloudPrintProxy&) = delete; - - ~CloudPrintProxy() override; - - // Provides a CloudPrintProxy instance, which may be lazily instantiated. - class Provider { - public: - virtual CloudPrintProxy* GetCloudPrintProxy() = 0; - }; - - // Initializes the object. This should be called every time an object of this - // class is constructed. - void Initialize( - ServiceProcessPrefs* service_prefs, - Client* client, - network::NetworkConnectionTracker* network_connection_tracker); - - // Enables/disables cloud printing for the user - void EnableForUser(); - void EnableForUserWithRobot(const std::string& robot_auth_code, - const std::string& robot_email, - const std::string& user_email, - base::Value user_settings); - void UnregisterPrintersAndDisableForUser(); - void DisableForUser(); - // Returns the proxy info. - void GetProxyInfo(CloudPrintProxyInfo* info); - // Return accessible printers. - void GetPrinters(std::vector<std::string>* printers); - - const std::string& user_email() const { - return user_email_; - } - - // CloudPrintProxyFrontend implementation. Called on UI thread. - void OnAuthenticated(const std::string& robot_oauth_refresh_token, - const std::string& robot_email, - const std::string& user_email) override; - void OnAuthenticationFailed() override; - void OnPrintSystemUnavailable() override; - void OnUnregisterPrinters(const std::string& auth_token, - const std::list<std::string>& printer_ids) override; - void OnXmppPingUpdated(int ping_timeout) override; - - // CloudPrintWipeout::Client implementation. - void OnUnregisterPrintersComplete() override; - - protected: - void ShutdownBackend(); - bool CreateBackend(); - - // Our asynchronous backend to communicate with sync components living on - // other threads. - std::unique_ptr<CloudPrintProxyBackend> backend_; - // This class does not own this. It is guaranteed to remain valid for the - // lifetime of this class. - raw_ptr<ServiceProcessPrefs> service_prefs_ = nullptr; - // This class does not own this. If non-NULL, It is guaranteed to remain - // valid for the lifetime of this class. - raw_ptr<Client> client_ = nullptr; - // Used to listen for network connection changes. - raw_ptr<network::NetworkConnectionTracker> network_connection_tracker_ = - nullptr; - // The email address of the account used to authenticate to the Cloud Print - // service. - std::string user_email_; - // This is set to true when the Cloud Print proxy is enabled and after - // successful authentication with the Cloud Print service. - bool enabled_ = false; - // This is a cleanup class for unregistering printers on proxy disable. - std::unique_ptr<CloudPrintWipeout> wipeout_; - - SEQUENCE_CHECKER(sequence_checker_); -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_H_
diff --git a/chrome/service/cloud_print/cloud_print_proxy_backend.cc b/chrome/service/cloud_print/cloud_print_proxy_backend.cc deleted file mode 100644 index a477d9b..0000000 --- a/chrome/service/cloud_print/cloud_print_proxy_backend.cc +++ /dev/null
@@ -1,717 +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 "chrome/service/cloud_print/cloud_print_proxy_backend.h" - -#include <stddef.h> - -#include <map> -#include <memory> -#include <vector> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/compiler_specific.h" -#include "base/location.h" -#include "base/memory/raw_ptr.h" -#include "base/metrics/histogram_macros.h" -#include "base/rand_util.h" -#include "base/strings/string_util.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/values.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/service/cloud_print/cloud_print_auth.h" -#include "chrome/service/cloud_print/cloud_print_connector.h" -#include "chrome/service/cloud_print/cloud_print_service_helpers.h" -#include "chrome/service/cloud_print/cloud_print_token_store.h" -#include "chrome/service/cloud_print/connector_settings.h" -#include "chrome/service/net/service_url_request_context_getter.h" -#include "chrome/service/service_process.h" -#include "components/cloud_devices/common/cloud_devices_switches.h" -#include "google_apis/gaia/gaia_oauth_client.h" -#include "google_apis/gaia/gaia_urls.h" -#include "jingle/notifier/base/notifier_options.h" -#include "jingle/notifier/listener/push_client.h" -#include "jingle/notifier/listener/push_client_observer.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" -#include "services/network/transitional_url_loader_factory_owner.h" -#include "url/gurl.h" - -namespace cloud_print { - -namespace { - -constexpr net::NetworkTrafficAnnotationTag - kCloudPrintCredentialUpdateTrafficAnnotation = - net::DefineNetworkTrafficAnnotation("cloud_print_credential_update", - R"( - semantics { - sender: "Cloud Print Proxy Backend" - description: - "Refreshes the access token for fetching print jobs for Cloud Print." - trigger: - "Aging of the current access token, current value is 5 minutes." - data: - "OAuth2 refresh token." - destination: GOOGLE_OWNED_SERVICE - } - policy { - cookies_allowed: NO - setting: "This feature cannot be disabled by settings." - chrome_policy { - CloudPrintProxyEnabled { - CloudPrintProxyEnabled: False - } - } - } -)"); - -} // namespace - -// The real guts of CloudPrintProxyBackend, to keep the public client API clean. -class CloudPrintProxyBackend::Core - : public base::RefCountedThreadSafe<CloudPrintProxyBackend::Core>, - public CloudPrintAuth::Client, - public CloudPrintConnector::Client, - public notifier::PushClientObserver { - public: - // It is OK for print_server_url to be empty. In this case system should - // use system default (local) print server. - Core(CloudPrintProxyBackend* backend, - const ConnectorSettings& settings, - const gaia::OAuthClientInfo& oauth_client_info, - bool enable_job_poll, - network::NetworkConnectionTracker* network_connection_tracker); - - Core(const Core&) = delete; - Core& operator=(const Core&) = delete; - - // Note: - // - // The Do* methods are the various entry points from CloudPrintProxyBackend - // It calls us on a dedicated thread to actually perform synchronous - // (and potentially blocking) operations. - void DoInitializeWithToken(const std::string& cloud_print_token); - void DoInitializeWithRobotToken(const std::string& robot_oauth_refresh_token, - const std::string& robot_email); - void DoInitializeWithRobotAuthCode(const std::string& robot_oauth_auth_code, - const std::string& robot_email); - - // Called on the CloudPrintProxyBackend |core_thread_| to perform shutdown. - void DoShutdown(); - void DoRegisterSelectedPrinters( - const printing::PrinterList& printer_list); - void DoUnregisterPrinters(); - - // CloudPrintAuth::Client implementation. - void OnAuthenticationComplete(const std::string& access_token, - const std::string& robot_oauth_refresh_token, - const std::string& robot_email, - const std::string& user_email) override; - void OnInvalidCredentials() override; - scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override; - - // CloudPrintConnector::Client implementation. - void OnAuthFailed() override; - void OnXmppPingUpdated(int ping_timeout) override; - - // notifier::PushClientObserver implementation. - void OnNotificationsEnabled() override; - void OnNotificationsDisabled( - notifier::NotificationsDisabledReason reason) override; - void OnIncomingNotification( - const notifier::Notification& notification) override; - void OnPingResponse() override; - - private: - friend class base::RefCountedThreadSafe<Core>; - - ~Core() override {} - - CloudPrintProxyFrontend* frontend() { return backend_->frontend_; } - - bool PostFrontendTask(const base::Location& from_here, - base::OnceClosure task); - - bool CurrentlyOnFrontendThread() const; - bool CurrentlyOnCoreThread() const; - - void CreateAuthAndConnector(); - void DestroyAuthAndConnector(); - - // NotifyXXX is how the Core communicates with the frontend across - // threads. - void NotifyPrinterListAvailable( - const printing::PrinterList& printer_list); - void NotifyAuthenticated( - const std::string& robot_oauth_refresh_token, - const std::string& robot_email, - const std::string& user_email); - void NotifyAuthenticationFailed(); - void NotifyPrintSystemUnavailable(); - void NotifyUnregisterPrinters(const std::string& auth_token, - const std::list<std::string>& printer_ids); - void NotifyXmppPingUpdated(int ping_timeout); - - // Init XMPP channel - void InitNotifications(const std::string& robot_email, - const std::string& access_token); - - void HandlePrinterNotification(const std::string& notification); - void PollForJobs(); - // Schedules a task to poll for jobs. Does nothing if a task is already - // scheduled. - void ScheduleJobPoll(); - void PingXmppServer(); - void ScheduleXmppPing(); - void CheckXmppPingStatus(); - - CloudPrintTokenStore* GetTokenStore(); - - // Runs on Core thread. - static void RequestProxyResolvingSocketFactoryOnCoreThread( - base::WeakPtr<CloudPrintProxyBackend::Core> owner, - mojo::PendingReceiver<network::mojom::ProxyResolvingSocketFactory> - receiver); - - // Runs on IO thread. - static void RequestProxyResolvingSocketFactory( - scoped_refptr<base::SingleThreadTaskRunner> core_runner, - base::WeakPtr<CloudPrintProxyBackend::Core> owner, - mojo::PendingReceiver<network::mojom::ProxyResolvingSocketFactory> - receiver); - - // Our parent CloudPrintProxyBackend - const raw_ptr<CloudPrintProxyBackend> backend_; - - // Monitors for network connection changes. - const raw_ptr<network::NetworkConnectionTracker> network_connection_tracker_; - - // Provides access to networking APIs for auth_. - std::unique_ptr<network::TransitionalURLLoaderFactoryOwner> - url_loader_factory_owner_; - - // Cloud Print authenticator. - scoped_refptr<CloudPrintAuth> auth_; - - // Cloud Print connector. - scoped_refptr<CloudPrintConnector> connector_; - - // OAuth client info. - gaia::OAuthClientInfo oauth_client_info_; - // Notification (xmpp) handler. - std::unique_ptr<notifier::PushClient> push_client_; - // Indicates whether XMPP notifications are currently enabled. - bool notifications_enabled_; - // The time when notifications were enabled. Valid only when - // notifications_enabled_ is true. - base::TimeTicks notifications_enabled_since_; - // Indicates whether a task to poll for jobs has been scheduled. - bool job_poll_scheduled_; - // Indicates whether we should poll for jobs when we lose XMPP connection. - bool enable_job_poll_; - // Indicates whether a task to ping xmpp server has been scheduled. - bool xmpp_ping_scheduled_; - // Number of XMPP pings pending reply from the server. - int pending_xmpp_pings_; - // Connector settings. - ConnectorSettings settings_; - std::string robot_email_; - std::unique_ptr<CloudPrintTokenStore> token_store_; - - base::WeakPtrFactory<Core> weak_ptr_factory_{this}; -}; - -CloudPrintProxyBackend::CloudPrintProxyBackend( - CloudPrintProxyFrontend* frontend, - const ConnectorSettings& settings, - const gaia::OAuthClientInfo& oauth_client_info, - bool enable_job_poll, - network::NetworkConnectionTracker* network_connection_tracker) - : core_thread_("Chrome_CloudPrintProxyCoreThread"), - frontend_task_runner_(base::ThreadTaskRunnerHandle::Get()), - frontend_(frontend) { - DCHECK(frontend_); - core_ = new Core(this, settings, oauth_client_info, enable_job_poll, - network_connection_tracker); -} - -CloudPrintProxyBackend::~CloudPrintProxyBackend() { DCHECK(!core_.get()); } - -bool CloudPrintProxyBackend::InitializeWithToken( - const std::string& cloud_print_token) { - if (!core_thread_.Start()) - return false; - PostCoreTask( - FROM_HERE, - base::BindOnce(&CloudPrintProxyBackend::Core::DoInitializeWithToken, - core_, cloud_print_token)); - return true; -} - -bool CloudPrintProxyBackend::InitializeWithRobotToken( - const std::string& robot_oauth_refresh_token, - const std::string& robot_email) { - if (!core_thread_.Start()) - return false; - PostCoreTask( - FROM_HERE, - base::BindOnce(&CloudPrintProxyBackend::Core::DoInitializeWithRobotToken, - core_, robot_oauth_refresh_token, robot_email)); - return true; -} - -bool CloudPrintProxyBackend::InitializeWithRobotAuthCode( - const std::string& robot_oauth_auth_code, - const std::string& robot_email) { - if (!core_thread_.Start()) - return false; - PostCoreTask(FROM_HERE, - base::BindOnce( - &CloudPrintProxyBackend::Core::DoInitializeWithRobotAuthCode, - core_, robot_oauth_auth_code, robot_email)); - return true; -} - -void CloudPrintProxyBackend::Shutdown() { - PostCoreTask( - FROM_HERE, - base::BindOnce(&CloudPrintProxyBackend::Core::DoShutdown, core_)); - core_thread_.Stop(); - core_ = nullptr; // Releases reference to |core_|. -} - -void CloudPrintProxyBackend::UnregisterPrinters() { - PostCoreTask(FROM_HERE, - base::BindOnce( - &CloudPrintProxyBackend::Core::DoUnregisterPrinters, core_)); -} - -bool CloudPrintProxyBackend::PostCoreTask(const base::Location& from_here, - base::OnceClosure task) { - return core_thread_.task_runner()->PostTask(from_here, std::move(task)); -} - -CloudPrintProxyBackend::Core::Core( - CloudPrintProxyBackend* backend, - const ConnectorSettings& settings, - const gaia::OAuthClientInfo& oauth_client_info, - bool enable_job_poll, - network::NetworkConnectionTracker* network_connection_tracker) - : backend_(backend), - network_connection_tracker_(network_connection_tracker), - oauth_client_info_(oauth_client_info), - notifications_enabled_(false), - job_poll_scheduled_(false), - enable_job_poll_(enable_job_poll), - xmpp_ping_scheduled_(false), - pending_xmpp_pings_(0) { - settings_.CopyFrom(settings); -} - -bool CloudPrintProxyBackend::Core::PostFrontendTask( - const base::Location& from_here, - base::OnceClosure task) { - return backend_->frontend_task_runner_->PostTask(from_here, std::move(task)); -} - -bool CloudPrintProxyBackend::Core::CurrentlyOnFrontendThread() const { - return backend_->frontend_task_runner_->BelongsToCurrentThread(); -} - -bool CloudPrintProxyBackend::Core::CurrentlyOnCoreThread() const { - return backend_->core_thread_.task_runner()->BelongsToCurrentThread(); -} - -void CloudPrintProxyBackend::Core::CreateAuthAndConnector() { - net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation = - net::DefinePartialNetworkTrafficAnnotation("cloud_print_backend", - "cloud_print", R"( - semantics { - description: - "Creates and authenticates connection with Cloud Print." - trigger: "Cloud Print service intialization." - data: "OAuth2 token." - })"); - if (!auth_.get()) { - auth_ = - new CloudPrintAuth(this, settings_.server_url(), oauth_client_info_, - settings_.proxy_id(), partial_traffic_annotation); - } - - if (!connector_.get()) { - connector_ = - new CloudPrintConnector(this, settings_, partial_traffic_annotation); - } -} - -void CloudPrintProxyBackend::Core::DestroyAuthAndConnector() { - auth_.reset(); - connector_.reset(); -} - -void CloudPrintProxyBackend::Core::DoInitializeWithToken( - const std::string& cloud_print_token) { - DCHECK(CurrentlyOnCoreThread()); - CreateAuthAndConnector(); - auth_->AuthenticateWithToken(cloud_print_token); -} - -void CloudPrintProxyBackend::Core::DoInitializeWithRobotToken( - const std::string& robot_oauth_refresh_token, - const std::string& robot_email) { - DCHECK(CurrentlyOnCoreThread()); - CreateAuthAndConnector(); - auth_->AuthenticateWithRobotToken(robot_oauth_refresh_token, robot_email); -} - -void CloudPrintProxyBackend::Core::DoInitializeWithRobotAuthCode( - const std::string& robot_oauth_auth_code, - const std::string& robot_email) { - DCHECK(CurrentlyOnCoreThread()); - CreateAuthAndConnector(); - auth_->AuthenticateWithRobotAuthCode(robot_oauth_auth_code, robot_email); -} - -void CloudPrintProxyBackend::Core::OnAuthenticationComplete( - const std::string& access_token, - const std::string& robot_oauth_refresh_token, - const std::string& robot_email, - const std::string& user_email) { - CloudPrintTokenStore* token_store = GetTokenStore(); - bool first_time = token_store->token().empty(); - token_store->SetToken(access_token); - robot_email_ = robot_email; - // Let the frontend know that we have authenticated. - PostFrontendTask(FROM_HERE, base::BindOnce(&Core::NotifyAuthenticated, this, - robot_oauth_refresh_token, - robot_email, user_email)); - if (first_time) { - InitNotifications(robot_email, access_token); - } else { - // If we are refreshing a token, update the XMPP token too. - DCHECK(push_client_.get()); - - push_client_->UpdateCredentials( - robot_email, access_token, - kCloudPrintCredentialUpdateTrafficAnnotation); - } - // Start cloud print connector if needed. - if (!connector_->IsRunning()) { - if (!connector_->Start()) { - // Let the frontend know that we do not have a print system. - PostFrontendTask( - FROM_HERE, base::BindOnce(&Core::NotifyPrintSystemUnavailable, this)); - } - } -} - -void CloudPrintProxyBackend::Core::OnInvalidCredentials() { - DCHECK(CurrentlyOnCoreThread()); - VLOG(1) << "CP_CONNECTOR: Auth Error"; - PostFrontendTask(FROM_HERE, - base::BindOnce(&Core::NotifyAuthenticationFailed, this)); -} - -scoped_refptr<network::SharedURLLoaderFactory> -CloudPrintProxyBackend::Core::GetURLLoaderFactory() { - DCHECK(CurrentlyOnCoreThread()); - if (!url_loader_factory_owner_) { - url_loader_factory_owner_ = - std::make_unique<network::TransitionalURLLoaderFactoryOwner>( - g_service_process->GetServiceURLRequestContextGetter()); - } - - return url_loader_factory_owner_->GetURLLoaderFactory(); -} - -void CloudPrintProxyBackend::Core::OnAuthFailed() { - VLOG(1) << "CP_CONNECTOR: Authentication failed in connector."; - // Let's stop connecter and refresh token. We'll restart connecter once - // new token available. - if (connector_->IsRunning()) - connector_->Stop(); - - // Refresh Auth token. - auth_->RefreshAccessToken(); -} - -void CloudPrintProxyBackend::Core::OnXmppPingUpdated(int ping_timeout) { - settings_.SetXmppPingTimeoutSec(ping_timeout); - PostFrontendTask(FROM_HERE, base::BindOnce(&Core::NotifyXmppPingUpdated, this, - ping_timeout)); -} - -void CloudPrintProxyBackend::Core::InitNotifications( - const std::string& robot_email, - const std::string& access_token) { - DCHECK(CurrentlyOnCoreThread()); - - pending_xmpp_pings_ = 0; - notifier::NotifierOptions notifier_options; - notifier_options.network_config.task_runner = - g_service_process->io_task_runner(); - notifier_options.network_config.get_proxy_resolving_socket_factory_callback = - base::BindRepeating(&Core::RequestProxyResolvingSocketFactory, - backend_->core_thread_.task_runner(), - // This needs to use weak pointers since the callback - // is repeatable and a ref would result in a cycle. - weak_ptr_factory_.GetWeakPtr()); - notifier_options.auth_mechanism = "X-OAUTH2"; - notifier_options.try_ssltcp_first = true; - notifier_options.xmpp_host_port = net::HostPortPair::FromString( - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - switches::kCloudPrintXmppEndpoint)); - notifier_options.network_connection_tracker = network_connection_tracker_; - push_client_ = notifier::PushClient::CreateDefault(notifier_options); - push_client_->AddObserver(this); - notifier::Subscription subscription; - subscription.channel = kCloudPrintPushNotificationsSource; - subscription.from = kCloudPrintPushNotificationsSource; - push_client_->UpdateSubscriptions( - notifier::SubscriptionList(1, subscription)); - push_client_->UpdateCredentials(robot_email, access_token, - kCloudPrintCredentialUpdateTrafficAnnotation); -} - -void CloudPrintProxyBackend::Core::DoShutdown() { - DCHECK(CurrentlyOnCoreThread()); - VLOG(1) << "CP_CONNECTOR: Shutdown connector, id: " << settings_.proxy_id(); - - if (connector_->IsRunning()) - connector_->Stop(); - - // Important to delete the PushClient on this thread. - if (push_client_.get()) { - push_client_->RemoveObserver(this); - } - push_client_.reset(); - notifications_enabled_ = false; - notifications_enabled_since_ = base::TimeTicks(); - token_store_.reset(); - weak_ptr_factory_.InvalidateWeakPtrs(); - url_loader_factory_owner_.reset(); - - DestroyAuthAndConnector(); -} - -void CloudPrintProxyBackend::Core::DoUnregisterPrinters() { - DCHECK(CurrentlyOnCoreThread()); - - std::string access_token = GetTokenStore()->token(); - std::list<std::string> printer_ids = connector_->GetPrinterIds(); - PostFrontendTask(FROM_HERE, base::BindOnce(&Core::NotifyUnregisterPrinters, - this, access_token, printer_ids)); -} - -void CloudPrintProxyBackend::Core::HandlePrinterNotification( - const std::string& notification) { - DCHECK(CurrentlyOnCoreThread()); - - size_t pos = notification.rfind(kNotificationUpdateSettings); - if (pos == std::string::npos) { - VLOG(1) << "CP_CONNECTOR: Handle printer notification, id: " - << notification; - connector_->CheckForJobs(kJobFetchReasonNotified, notification); - } else { - DCHECK(pos == notification.length() - strlen(kNotificationUpdateSettings)); - std::string printer_id = notification.substr(0, pos); - VLOG(1) << "CP_CONNECTOR: Update printer settings, id: " << printer_id; - connector_->UpdatePrinterSettings(printer_id); - } -} - -void CloudPrintProxyBackend::Core::PollForJobs() { - VLOG(1) << "CP_CONNECTOR: Polling for jobs."; - DCHECK(CurrentlyOnCoreThread()); - // Check all printers for jobs. - connector_->CheckForJobs(kJobFetchReasonPoll, std::string()); - - job_poll_scheduled_ = false; - // If we don't have notifications and job polling is enabled, poll again - // after a while. - if (!notifications_enabled_ && enable_job_poll_) - ScheduleJobPoll(); -} - -void CloudPrintProxyBackend::Core::ScheduleJobPoll() { - if (!job_poll_scheduled_) { - base::TimeDelta interval = base::Seconds( - base::RandInt(kMinJobPollIntervalSecs, kMaxJobPollIntervalSecs)); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&CloudPrintProxyBackend::Core::PollForJobs, this), - interval); - job_poll_scheduled_ = true; - } -} - -void CloudPrintProxyBackend::Core::PingXmppServer() { - xmpp_ping_scheduled_ = false; - - if (!push_client_.get()) - return; - - push_client_->SendPing(); - - pending_xmpp_pings_++; - if (pending_xmpp_pings_ >= kMaxFailedXmppPings) { - // Check ping status when we close to the limit. - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&CloudPrintProxyBackend::Core::CheckXmppPingStatus, - this), - base::Seconds(kXmppPingCheckIntervalSecs)); - } - - // Schedule next ping if needed. - if (notifications_enabled_) - ScheduleXmppPing(); -} - -void CloudPrintProxyBackend::Core::ScheduleXmppPing() { - // settings_.xmpp_ping_enabled() is obsolete, we are now control - // XMPP pings from Cloud Print server. - if (!xmpp_ping_scheduled_) { - base::TimeDelta interval = - base::Seconds(base::RandInt(settings_.xmpp_ping_timeout_sec() * 0.9, - settings_.xmpp_ping_timeout_sec() * 1.1)); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&CloudPrintProxyBackend::Core::PingXmppServer, this), - interval); - xmpp_ping_scheduled_ = true; - } -} - -void CloudPrintProxyBackend::Core::CheckXmppPingStatus() { - if (pending_xmpp_pings_ >= kMaxFailedXmppPings) { - UMA_HISTOGRAM_COUNTS_100("CloudPrint.XmppPingTry", 99); // Max on fail. - // Reconnect to XMPP. - pending_xmpp_pings_ = 0; - push_client_.reset(); - InitNotifications(robot_email_, GetTokenStore()->token()); - } -} - -CloudPrintTokenStore* CloudPrintProxyBackend::Core::GetTokenStore() { - DCHECK(CurrentlyOnCoreThread()); - if (!token_store_.get()) - token_store_ = std::make_unique<CloudPrintTokenStore>(); - return token_store_.get(); -} - -// static -void CloudPrintProxyBackend::Core:: - RequestProxyResolvingSocketFactoryOnCoreThread( - base::WeakPtr<CloudPrintProxyBackend::Core> owner, - mojo::PendingReceiver<network::mojom::ProxyResolvingSocketFactory> - receiver) { - if (!owner) - return; - DCHECK(owner->CurrentlyOnCoreThread()); - owner->GetURLLoaderFactory(); // initialize |url_loader_factory_owner_| - owner->url_loader_factory_owner_->GetNetworkContext() - ->CreateProxyResolvingSocketFactory(std::move(receiver)); -} - -// static -void CloudPrintProxyBackend::Core::RequestProxyResolvingSocketFactory( - scoped_refptr<base::SingleThreadTaskRunner> core_runner, - base::WeakPtr<CloudPrintProxyBackend::Core> owner, - mojo::PendingReceiver<network::mojom::ProxyResolvingSocketFactory> - receiver) { - DCHECK(g_service_process->io_task_runner()->BelongsToCurrentThread()); - // This runs on IO thread; should not dereference |owner|. - core_runner->PostTask( - FROM_HERE, - base::BindOnce(&Core::RequestProxyResolvingSocketFactoryOnCoreThread, - std::move(owner), std::move(receiver))); -} - -void CloudPrintProxyBackend::Core::NotifyAuthenticated( - const std::string& robot_oauth_refresh_token, - const std::string& robot_email, - const std::string& user_email) { - DCHECK(CurrentlyOnFrontendThread()); - frontend()->OnAuthenticated(robot_oauth_refresh_token, robot_email, - user_email); -} - -void CloudPrintProxyBackend::Core::NotifyAuthenticationFailed() { - DCHECK(CurrentlyOnFrontendThread()); - frontend()->OnAuthenticationFailed(); -} - -void CloudPrintProxyBackend::Core::NotifyPrintSystemUnavailable() { - DCHECK(CurrentlyOnFrontendThread()); - frontend()->OnPrintSystemUnavailable(); -} - -void CloudPrintProxyBackend::Core::NotifyUnregisterPrinters( - const std::string& auth_token, - const std::list<std::string>& printer_ids) { - DCHECK(CurrentlyOnFrontendThread()); - frontend()->OnUnregisterPrinters(auth_token, printer_ids); -} - -void CloudPrintProxyBackend::Core::NotifyXmppPingUpdated(int ping_timeout) { - DCHECK(CurrentlyOnFrontendThread()); - frontend()->OnXmppPingUpdated(ping_timeout); -} - -void CloudPrintProxyBackend::Core::OnNotificationsEnabled() { - DCHECK(CurrentlyOnCoreThread()); - notifications_enabled_ = true; - notifications_enabled_since_ = base::TimeTicks::Now(); - VLOG(1) << "Notifications for connector " << settings_.proxy_id() - << " were enabled at " - << notifications_enabled_since_.ToInternalValue(); - // Notifications just got re-enabled. In this case we want to schedule - // a poll once for jobs we might have missed when we were dark. - // Note that ScheduleJobPoll will not schedule again if a job poll task is - // already scheduled. - ScheduleJobPoll(); - - // Schedule periodic ping for XMPP notification channel. - ScheduleXmppPing(); -} - -void CloudPrintProxyBackend::Core::OnNotificationsDisabled( - notifier::NotificationsDisabledReason reason) { - DCHECK(CurrentlyOnCoreThread()); - notifications_enabled_ = false; - LOG(ERROR) << "Notifications for connector " << settings_.proxy_id() - << " disabled."; - notifications_enabled_since_ = base::TimeTicks(); - // We just lost notifications. This this case we want to schedule a - // job poll if enable_job_poll_ is true. - if (enable_job_poll_) - ScheduleJobPoll(); -} - - -void CloudPrintProxyBackend::Core::OnIncomingNotification( - const notifier::Notification& notification) { - DCHECK(CurrentlyOnCoreThread()); - - // Since we got some notification from the server, - // reset pending ping counter to 0. - pending_xmpp_pings_ = 0; - - VLOG(1) << "CP_CONNECTOR: Incoming notification."; - if (base::EqualsCaseInsensitiveASCII(kCloudPrintPushNotificationsSource, - notification.channel)) - HandlePrinterNotification(notification.data); -} - -void CloudPrintProxyBackend::Core::OnPingResponse() { - UMA_HISTOGRAM_COUNTS_100("CloudPrint.XmppPingTry", pending_xmpp_pings_); - pending_xmpp_pings_ = 0; - VLOG(1) << "CP_CONNECTOR: Ping response received."; -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_proxy_backend.h b/chrome/service/cloud_print/cloud_print_proxy_backend.h deleted file mode 100644 index 768c333..0000000 --- a/chrome/service/cloud_print/cloud_print_proxy_backend.h +++ /dev/null
@@ -1,115 +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 CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_ - -#include <list> -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/memory/ref_counted.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread.h" -#include "chrome/service/cloud_print/connector_settings.h" -#include "printing/backend/print_backend.h" - -namespace gaia { -struct OAuthClientInfo; -} - -namespace network { -class NetworkConnectionTracker; -} - -namespace cloud_print { - -// CloudPrintProxyFrontend is the interface used by CloudPrintProxyBackend to -// communicate with the entity that created it and, presumably, is interested in -// cloud print proxy related activity. -// NOTE: All methods will be invoked by a CloudPrintProxyBackend on the same -// thread used to create that CloudPrintProxyBackend. -class CloudPrintProxyFrontend { - public: - CloudPrintProxyFrontend() {} - - CloudPrintProxyFrontend(const CloudPrintProxyFrontend&) = delete; - CloudPrintProxyFrontend& operator=(const CloudPrintProxyFrontend&) = delete; - - // We successfully authenticated with the cloud print server. This callback - // allows the frontend to persist the tokens. - virtual void OnAuthenticated(const std::string& robot_oauth_refresh_token, - const std::string& robot_email, - const std::string& user_email) = 0; - // We have invalid/expired credentials. - virtual void OnAuthenticationFailed() = 0; - // The print system could not be initialized. - virtual void OnPrintSystemUnavailable() = 0; - // Receive auth token and list of printers. - virtual void OnUnregisterPrinters( - const std::string& auth_token, - const std::list<std::string>& printer_ids) = 0; - // Update and store service settings. - virtual void OnXmppPingUpdated(int ping_timeout) = 0; - - protected: - // Don't delete through CloudPrintProxyFrontend interface. - virtual ~CloudPrintProxyFrontend() {} -}; - -class CloudPrintProxyBackend { - public: - CloudPrintProxyBackend( - CloudPrintProxyFrontend* frontend, - const ConnectorSettings& settings, - const gaia::OAuthClientInfo& oauth_client_info, - bool enable_job_poll, - network::NetworkConnectionTracker* network_connection_tracker); - - CloudPrintProxyBackend(const CloudPrintProxyBackend&) = delete; - CloudPrintProxyBackend& operator=(const CloudPrintProxyBackend&) = delete; - - ~CloudPrintProxyBackend(); - - // Legacy mechanism when we have saved user credentials but no saved robot - // credentials. - bool InitializeWithToken(const std::string& cloud_print_token); - // Called when we have saved robot credentials. - bool InitializeWithRobotToken(const std::string& robot_oauth_refresh_token, - const std::string& robot_email); - // Called when an external entity passed in the auth code for the robot. - bool InitializeWithRobotAuthCode(const std::string& robot_oauth_auth_code, - const std::string& robot_email); - void Shutdown(); - void RegisterPrinters(const printing::PrinterList& printer_list); - void UnregisterPrinters(); - - private: - bool PostCoreTask(const base::Location& from_here, base::OnceClosure task); - - // The real guts of CloudPrintProxyBackend, to keep the public client API - // clean. - class Core; - - // A thread dedicated for use to perform initialization and authentication. - base::Thread core_thread_; - - // The core, which communicates with AuthWatcher for GAIA authentication and - // which contains printer registration code. - scoped_refptr<Core> core_; - - // A reference to the TaskRunner used to construct |this|, so we know how to - // safely talk back to the CloudPrintProxyFrontend. - const scoped_refptr<base::SingleThreadTaskRunner> frontend_task_runner_; - - // The frontend which is responsible for displaying UI and updating Prefs. - // Outlives this backend. - const raw_ptr<CloudPrintProxyFrontend> frontend_; - - friend class base::RefCountedThreadSafe<CloudPrintProxyBackend::Core>; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_
diff --git a/chrome/service/cloud_print/cloud_print_service_helpers.cc b/chrome/service/cloud_print/cloud_print_service_helpers.cc deleted file mode 100644 index a3b74ffe..0000000 --- a/chrome/service/cloud_print/cloud_print_service_helpers.cc +++ /dev/null
@@ -1,100 +0,0 @@ -// Copyright 2013 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/service/cloud_print/cloud_print_service_helpers.h" - -#include "base/containers/contains.h" -#include "base/strings/stringprintf.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/common/cloud_print/cloud_print_helpers.h" -#include "chrome/service/cloud_print/cloud_print_token_store.h" -#include "chrome/service/service_process.h" - -namespace { - -std::string StringFromJobStatus(cloud_print::PrintJobStatus status) { - std::string ret; - switch (status) { - case cloud_print::PRINT_JOB_STATUS_IN_PROGRESS: - ret = "IN_PROGRESS"; - break; - case cloud_print::PRINT_JOB_STATUS_ERROR: - ret = "ERROR"; - break; - case cloud_print::PRINT_JOB_STATUS_COMPLETED: - ret = "DONE"; - break; - default: - ret = "UNKNOWN"; - NOTREACHED(); - break; - } - return ret; -} - -} // namespace - -namespace cloud_print { - -GURL GetUrlForJobStatusUpdate(const GURL& cloud_print_server_url, - const std::string& job_id, - PrintJobStatus status, - int connector_code) { - return GetUrlForJobStatusUpdate(cloud_print_server_url, - job_id, - StringFromJobStatus(status), - connector_code); -} - -GURL GetUrlForJobStatusUpdate(const GURL& cloud_print_server_url, - const std::string& job_id, - const PrintJobDetails& details) { - std::string status_string = StringFromJobStatus(details.status); - std::string path(AppendPathToUrl(cloud_print_server_url, "control")); - GURL::Replacements replacements; - replacements.SetPathStr(path); - std::string query = - base::StringPrintf("jobid=%s&status=%s&code=%d&message=%s" - "&numpages=%d&pagesprinted=%d", - job_id.c_str(), - status_string.c_str(), - details.platform_status_flags, - details.status_message.c_str(), - details.total_pages, - details.pages_printed); - replacements.SetQueryStr(query); - return cloud_print_server_url.ReplaceComponents(replacements); -} - -std::string GetHashOfPrinterInfo( - const printing::PrinterBasicInfo& printer_info) { - return GetHashOfPrinterTags(printer_info.options); -} - -std::string GetPostDataForPrinterInfo( - const printing::PrinterBasicInfo& printer_info, - const std::string& mime_boundary) { - return GetPostDataForPrinterTags( - printer_info.options, - mime_boundary, - kCloudPrintServiceProxyTagPrefix, - kCloudPrintServiceTagsHashTagName); -} - -bool IsDryRunJob(const std::vector<std::string>& tags) { - return base::Contains(tags, kCloudPrintServiceTagDryRunFlag); -} - -std::string GetCloudPrintAuthHeaderFromStore() { - CloudPrintTokenStore* token_store = CloudPrintTokenStore::current(); - if (!token_store || token_store->token().empty()) { - // Using LOG here for critical errors. GCP connector may run in the headless - // mode and error indication might be useful for user in that case. - LOG(ERROR) << "CP_PROXY: Missing OAuth token for request"; - return std::string(); - } - return GetCloudPrintAuthHeaderValue(token_store->token()); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_service_helpers.h b/chrome/service/cloud_print/cloud_print_service_helpers.h deleted file mode 100644 index 2246019..0000000 --- a/chrome/service/cloud_print/cloud_print_service_helpers.h +++ /dev/null
@@ -1,43 +0,0 @@ -// Copyright 2013 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_SERVICE_CLOUD_PRINT_CLOUD_PRINT_SERVICE_HELPERS_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_SERVICE_HELPERS_H_ - -#include <string> -#include <vector> - -#include "chrome/service/cloud_print/print_system.h" -#include "url/gurl.h" - -namespace cloud_print { - -// Helper methods for the cloud print proxy code. -GURL GetUrlForJobStatusUpdate(const GURL& cloud_print_server_url, - const std::string& job_id, - PrintJobStatus status, - int connector_code); - -GURL GetUrlForJobStatusUpdate(const GURL& cloud_print_server_url, - const std::string& job_id, - const PrintJobDetails& details); - -// Returns an MD5 hash for printer tags in the given |printer_info|. -std::string GetHashOfPrinterInfo( - const printing::PrinterBasicInfo& printer_info); - -// Returns any post data for printer tags in the given |printer_info|. -std::string GetPostDataForPrinterInfo( - const printing::PrinterBasicInfo& printer_info, - const std::string& mime_boundary); - -// Returns true if tags indicate a dry run (test) job. -bool IsDryRunJob(const std::vector<std::string>& tags); - -// Created cloud print auth header from the auth token stored in the store. -std::string GetCloudPrintAuthHeaderFromStore(); - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_SERVICE_HELPERS_H_
diff --git a/chrome/service/cloud_print/cloud_print_service_helpers_unittest.cc b/chrome/service/cloud_print/cloud_print_service_helpers_unittest.cc deleted file mode 100644 index 4211b213..0000000 --- a/chrome/service/cloud_print/cloud_print_service_helpers_unittest.cc +++ /dev/null
@@ -1,103 +0,0 @@ -// Copyright 2013 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/service/cloud_print/cloud_print_service_helpers.h" - -#include "base/hash/md5.h" -#include "base/strings/stringprintf.h" -#include "base/system/sys_info.h" -#include "chrome/common/channel_info.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace cloud_print { - -namespace { - -void CheckJobStatusURLs(const GURL& server_base_url) { - std::string expected_url_base = server_base_url.spec(); - if (expected_url_base.back() != '/') - expected_url_base += "/"; - - EXPECT_EQ(base::StringPrintf( - "%scontrol?jobid=87654321&status=ERROR&connector_code=1", - expected_url_base.c_str()), - GetUrlForJobStatusUpdate(server_base_url, "87654321", - PRINT_JOB_STATUS_ERROR, 1).spec()); - - PrintJobDetails details; - details.status = PRINT_JOB_STATUS_IN_PROGRESS; - details.platform_status_flags = 2; - details.status_message = "Out of Paper"; - details.total_pages = 345; - details.pages_printed = 47; - EXPECT_EQ(base::StringPrintf( - "%scontrol?jobid=87654321&status=IN_PROGRESS&code=2" - "&message=Out%%20of%%20Paper&numpages=345&pagesprinted=47", - expected_url_base.c_str()), - GetUrlForJobStatusUpdate( - server_base_url, "87654321", details).spec()); -} - -} // namespace - -TEST(CloudPrintServiceHelpersTest, GetURLs) { - CheckJobStatusURLs(GURL("https://www.google.com/cloudprint")); - CheckJobStatusURLs(GURL("https://www.google.com/cloudprint/")); - CheckJobStatusURLs(GURL("http://www.myprinterserver.com")); - CheckJobStatusURLs(GURL("http://www.myprinterserver.com/")); -} - -TEST(CloudPrintServiceHelpersTest, GetHashOfPrinterInfo) { - printing::PrinterBasicInfo printer_info; - printer_info.options["tag1"] = std::string("value1"); - printer_info.options["tag2"] = std::string("value2"); - - std::string expected_list_string = base::StringPrintf( - "chrome_version%ssystem_name%ssystem_version%stag1value1tag2value2", - chrome::GetVersionString(chrome::WithExtendedStable(false)).c_str(), - base::SysInfo::OperatingSystemName().c_str(), - base::SysInfo::OperatingSystemVersion().c_str()); - EXPECT_EQ(base::MD5String(expected_list_string), - GetHashOfPrinterInfo(printer_info)); -} - -TEST(CloudPrintServiceHelpersTest, GetPostDataForPrinterInfo) { - printing::PrinterBasicInfo printer_info; - printer_info.options["tag1"] = std::string("value1"); - printer_info.options["tag2"] = std::string("value2"); - - std::string expected = base::StringPrintf( - "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" - "\r\n\r\n__cp__chrome_version=%s\r\n" - "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" - "\r\n\r\n__cp__system_name=%s\r\n" - "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" - "\r\n\r\n__cp__system_version=%s\r\n" - "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" - "\r\n\r\n__cp__tag1=value1\r\n" - "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" - "\r\n\r\n__cp__tag2=value2\r\n" - "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" - "\r\n\r\n__cp__tagshash=%s\r\n", - chrome::GetVersionString(chrome::WithExtendedStable(false)).c_str(), - base::SysInfo::OperatingSystemName().c_str(), - base::SysInfo::OperatingSystemVersion().c_str(), - GetHashOfPrinterInfo(printer_info).c_str()); - - EXPECT_EQ(expected, GetPostDataForPrinterInfo( - printer_info, std::string("test_mime_boundary"))); -} - -TEST(CloudPrintServiceHelpersTest, IsDryRunJob) { - std::vector<std::string> tags_not_dry_run; - tags_not_dry_run.push_back("tag_1"); - EXPECT_FALSE(IsDryRunJob(tags_not_dry_run)); - - std::vector<std::string> tags_dry_run; - tags_dry_run.push_back("__cp__dry_run"); - EXPECT_TRUE(IsDryRunJob(tags_dry_run)); -} - -} // namespace cloud_print -
diff --git a/chrome/service/cloud_print/cloud_print_token_store.cc b/chrome/service/cloud_print/cloud_print_token_store.cc deleted file mode 100644 index bebf595..0000000 --- a/chrome/service/cloud_print/cloud_print_token_store.cc +++ /dev/null
@@ -1,37 +0,0 @@ -// Copyright (c) 2011 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/service/cloud_print/cloud_print_token_store.h" - -#include "base/lazy_instance.h" -#include "base/threading/thread_local.h" - -namespace cloud_print { - -// Keep the global CloudPrintTokenStore in a TLS slot so it is impossible to -// incorrectly from the wrong thread. -static base::LazyInstance< - base::ThreadLocalPointer<CloudPrintTokenStore>>::DestructorAtExit lazy_tls = - LAZY_INSTANCE_INITIALIZER; - -// static -CloudPrintTokenStore* CloudPrintTokenStore::current() { - return lazy_tls.Pointer()->Get(); -} - -CloudPrintTokenStore::CloudPrintTokenStore() { - lazy_tls.Pointer()->Set(this); -} - -CloudPrintTokenStore::~CloudPrintTokenStore() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - lazy_tls.Pointer()->Set(NULL); -} - -void CloudPrintTokenStore::SetToken(const std::string& token) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - token_ = token; -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_token_store.h b/chrome/service/cloud_print/cloud_print_token_store.h deleted file mode 100644 index 7e005dc..0000000 --- a/chrome/service/cloud_print/cloud_print_token_store.h +++ /dev/null
@@ -1,45 +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 CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_TOKEN_STORE_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_TOKEN_STORE_H_ - -#include <string> -#include "base/check_op.h" -#include "base/threading/thread_checker.h" - -// This class serves as the single repository for cloud print auth tokens. This -// is only used within the CloudPrintProxyCoreThread. - -namespace cloud_print { - -class CloudPrintTokenStore { - public: - // Returns the CloudPrintTokenStore instance for this thread. Will be NULL - // if no instance was created in this thread before. - static CloudPrintTokenStore* current(); - - CloudPrintTokenStore(); - - CloudPrintTokenStore(const CloudPrintTokenStore&) = delete; - CloudPrintTokenStore& operator=(const CloudPrintTokenStore&) = delete; - - ~CloudPrintTokenStore(); - - void SetToken(const std::string& token); - std::string token() const { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return token_; - } - - private: - std::string token_; - - // Thread-affine per use of TLS in impl. - THREAD_CHECKER(thread_checker_); -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_TOKEN_STORE_H_
diff --git a/chrome/service/cloud_print/cloud_print_token_store_unittest.cc b/chrome/service/cloud_print/cloud_print_token_store_unittest.cc deleted file mode 100644 index b61e434..0000000 --- a/chrome/service/cloud_print/cloud_print_token_store_unittest.cc +++ /dev/null
@@ -1,21 +0,0 @@ -// Copyright (c) 2011 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/service/cloud_print/cloud_print_token_store.h" - -#include "testing/gtest/include/gtest/gtest.h" - -namespace cloud_print { - -TEST(CloudPrintTokenStoreTest, Basic) { - EXPECT_EQ(NULL, CloudPrintTokenStore::current()); - CloudPrintTokenStore* store = new CloudPrintTokenStore; - EXPECT_EQ(store, CloudPrintTokenStore::current()); - CloudPrintTokenStore::current()->SetToken("myclientlogintoken"); - EXPECT_EQ(CloudPrintTokenStore::current()->token(), "myclientlogintoken"); - delete store; - EXPECT_EQ(NULL, CloudPrintTokenStore::current()); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_url_fetcher.cc b/chrome/service/cloud_print/cloud_print_url_fetcher.cc deleted file mode 100644 index 1720e82c..0000000 --- a/chrome/service/cloud_print/cloud_print_url_fetcher.cc +++ /dev/null
@@ -1,249 +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 "chrome/service/cloud_print/cloud_print_url_fetcher.h" - -#include <stddef.h> - -#include "base/strings/stringprintf.h" -#include "base/values.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/common/cloud_print/cloud_print_helpers.h" -#include "chrome/service/cloud_print/cloud_print_service_helpers.h" -#include "chrome/service/cloud_print/cloud_print_token_store.h" -#include "chrome/service/net/service_url_request_context_getter.h" -#include "chrome/service/service_process.h" -#include "net/base/load_flags.h" -#include "net/http/http_status_code.h" -#include "net/url_request/url_fetcher.h" -#include "url/gurl.h" - -namespace cloud_print { - -namespace { - -CloudPrintURLFetcherFactory* g_test_factory = nullptr; - -} // namespace - -// virtual -CloudPrintURLFetcherFactory::~CloudPrintURLFetcherFactory() {} - -// static -CloudPrintURLFetcher* CloudPrintURLFetcher::Create( - const net::PartialNetworkTrafficAnnotationTag& partial_traffic_annotation) { - return g_test_factory ? g_test_factory->CreateCloudPrintURLFetcher() - : new CloudPrintURLFetcher(partial_traffic_annotation); -} - -// static -void CloudPrintURLFetcher::set_test_factory( - CloudPrintURLFetcherFactory* factory) { - g_test_factory = factory; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcher::Delegate::HandleRawResponse(const net::URLFetcher* source, - const GURL& url, - net::Error error, - int response_code, - const std::string& data) { - return CONTINUE_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcher::Delegate::HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) { - return CONTINUE_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcher::Delegate::HandleJSONData(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - return CONTINUE_PROCESSING; -} - -CloudPrintURLFetcher::CloudPrintURLFetcher( - const net::PartialNetworkTrafficAnnotationTag& partial_traffic_annotation) - : delegate_(nullptr), - num_retries_(0), - partial_traffic_annotation_(partial_traffic_annotation) {} - -bool CloudPrintURLFetcher::IsSameRequest(const net::URLFetcher* source) { - return (request_.get() == source); -} - -void CloudPrintURLFetcher::StartGetRequest(const GURL& url, - Delegate* delegate, - int max_retries) { - StartRequestHelper(url, net::URLFetcher::GET, delegate, max_retries, - std::string(), std::string(), std::string()); -} - -void CloudPrintURLFetcher::StartGetRequestWithAcceptHeader( - const GURL& url, - Delegate* delegate, - int max_retries, - const std::string& accept_header) { - StartRequestHelper(url, net::URLFetcher::GET, delegate, max_retries, - std::string(), std::string(), accept_header); -} - -void CloudPrintURLFetcher::StartPostRequest( - const GURL& url, - Delegate* delegate, - int max_retries, - const std::string& post_data_mime_type, - const std::string& post_data) { - StartRequestHelper(url, net::URLFetcher::POST, delegate, max_retries, - post_data_mime_type, post_data, std::string()); -} - -void CloudPrintURLFetcher::OnURLFetchComplete( - const net::URLFetcher* source) { - VLOG(1) << "CP_PROXY: OnURLFetchComplete, url: " << source->GetURL() - << ", response code: " << source->GetResponseCode(); - // Make sure we stay alive through the body of this function. - scoped_refptr<CloudPrintURLFetcher> keep_alive(this); - std::string data; - source->GetResponseAsString(&data); - ResponseAction action = - delegate_->HandleRawResponse(source, source->GetURL(), source->GetError(), - source->GetResponseCode(), data); - - // If we get auth error, notify delegate and check if it wants to proceed. - if (action == CONTINUE_PROCESSING && - source->GetResponseCode() == net::HTTP_FORBIDDEN) { - action = delegate_->OnRequestAuthError(); - } - - if (action == CONTINUE_PROCESSING) { - // We need to retry on all network errors. - if (source->GetError() != net::OK || source->GetResponseCode() != 200) - action = RETRY_REQUEST; - else - action = delegate_->HandleRawData(source, source->GetURL(), data); - - if (action == CONTINUE_PROCESSING) { - // If the delegate is not interested in handling the raw response data, - // we assume that a JSON response is expected. If we do not get a JSON - // response, we will retry (to handle the case where we got redirected - // to a non-cloudprint-server URL eg. for authentication). - bool succeeded = false; - base::Value response_dict = ParseResponseJSON(data, &succeeded); - - if (response_dict.is_dict()) { - action = delegate_->HandleJSONData(source, source->GetURL(), - response_dict, succeeded); - } else { - action = RETRY_REQUEST; - } - } - } - // Retry the request if needed. - if (action == RETRY_REQUEST) { - // Explicitly call ReceivedContentWasMalformed() to ensure the current - // request gets counted as a failure for calculation of the back-off - // period. If it was already a failure by status code, this call will - // be ignored. - request_->ReceivedContentWasMalformed(); - - // If we receive error code from the server "Media Type Not Supported", - // there is no reason to retry, request will never succeed. - // In that case we should call OnRequestGiveUp() right away. - if (source->GetResponseCode() == net::HTTP_UNSUPPORTED_MEDIA_TYPE) - num_retries_ = source->GetMaxRetriesOn5xx(); - - ++num_retries_; - if (source->GetMaxRetriesOn5xx() != -1 && - num_retries_ > source->GetMaxRetriesOn5xx()) { - // Retry limit reached. Give up. - delegate_->OnRequestGiveUp(); - action = STOP_PROCESSING; - } else { - // Either no retry limit specified or retry limit has not yet been - // reached. Try again. Set up the request headers again because the token - // may have changed. - SetupRequestHeaders(); - request_->SetRequestContext(GetRequestContextGetter()); - request_->Start(); - } - } -} - -void CloudPrintURLFetcher::StartRequestHelper( - const GURL& url, - net::URLFetcher::RequestType request_type, - Delegate* delegate, - int max_retries, - const std::string& post_data_mime_type, - const std::string& post_data, - const std::string& additional_accept_header) { - DCHECK(delegate); - // Persist the additional headers in case we need to retry the request. - additional_accept_header_ = additional_accept_header; - net::NetworkTrafficAnnotationTag traffic_annotation = - net::CompleteNetworkTrafficAnnotation("cloud_print", - partial_traffic_annotation_, - R"( - semantics { - sender: "Cloud Print" - destination: GOOGLE_OWNED_SERVICE - } - policy { - cookies_allowed: NO - setting: - "This feature cannot be disabled by settings." - chrome_policy { - CloudPrintProxyEnabled { - policy_options {mode: MANDATORY} - CloudPrintProxyEnabled: false - } - } - })"); - request_ = - net::URLFetcher::Create(0, url, request_type, this, traffic_annotation); - request_->SetRequestContext(GetRequestContextGetter()); - // Since we implement our own retry logic, disable the retry in URLFetcher. - request_->SetAutomaticallyRetryOn5xx(false); - request_->SetMaxRetriesOn5xx(max_retries); - delegate_ = delegate; - SetupRequestHeaders(); - request_->SetAllowCredentials(false); - if (request_type == net::URLFetcher::POST) { - request_->SetUploadData(post_data_mime_type, post_data); - } - request_->Start(); -} - -void CloudPrintURLFetcher::SetupRequestHeaders() { - request_->ClearExtraRequestHeaders(); - std::string auth_header_value = delegate_->GetAuthHeaderValue(); - if (!auth_header_value.empty()) { - request_->AddExtraRequestHeader("Authorization", auth_header_value); - } - request_->AddExtraRequestHeader(kChromeCloudPrintProxyHeaderName, - kChromeCloudPrintProxyHeaderValue); - if (!additional_accept_header_.empty()) { - request_->AddExtraRequestHeader("Accept", additional_accept_header_); - } -} - -CloudPrintURLFetcher::~CloudPrintURLFetcher() {} - -net::URLRequestContextGetter* CloudPrintURLFetcher::GetRequestContextGetter() { - ServiceURLRequestContextGetter* getter = - g_service_process->GetServiceURLRequestContextGetter(); - // Now set up the user agent for cloudprint. - std::string user_agent = getter->user_agent(); - base::StringAppendF(&user_agent, " %s", kCloudPrintUserAgent); - getter->set_user_agent(user_agent); - return getter; -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_url_fetcher.h b/chrome/service/cloud_print/cloud_print_url_fetcher.h deleted file mode 100644 index f9cd3cdc..0000000 --- a/chrome/service/cloud_print/cloud_print_url_fetcher.h +++ /dev/null
@@ -1,154 +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 CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_URL_FETCHER_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_URL_FETCHER_H_ - -#include <memory> -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/memory/ref_counted.h" -#include "net/url_request/url_fetcher.h" -#include "net/url_request/url_fetcher_delegate.h" - -class GURL; - -namespace base { -class Value; -} - -namespace net { -class URLRequestContextGetter; -} // namespace net - -namespace cloud_print { - -// Factory for creating CloudPrintURLFetchers. -class CloudPrintURLFetcher; -class CloudPrintURLFetcherFactory { - public: - virtual CloudPrintURLFetcher* CreateCloudPrintURLFetcher() = 0; - virtual ~CloudPrintURLFetcherFactory(); -}; - -// A wrapper around URLFetcher for CloudPrint. URLFetcher applies retry logic -// only on HTTP response codes >= 500. In the cloud print case, we want to -// retry on all network errors. In addition, we want to treat non-JSON responses -// (for all CloudPrint APIs that expect JSON responses) as errors and they -// must also be retried. -class CloudPrintURLFetcher - : public base::RefCountedThreadSafe<CloudPrintURLFetcher>, - public net::URLFetcherDelegate { - public: - enum ResponseAction { - CONTINUE_PROCESSING, - STOP_PROCESSING, - RETRY_REQUEST, - }; - - class Delegate { - public: - // Override this to handle the raw response as it is available. No response - // error checking is done before this method is called. If the delegate - // returns CONTINUE_PROCESSING, we will then check for network - // errors. Most implementations will not override this. - virtual ResponseAction HandleRawResponse(const net::URLFetcher* source, - const GURL& url, - net::Error error, - int response_code, - const std::string& data); - - // This will be invoked only if HandleRawResponse returns - // CONTINUE_PROCESSING AND if there are no network errors and the HTTP - // response code is 200. The delegate implementation returns - // CONTINUE_PROCESSING if it does not want to handle the raw data itself. - // Handling the raw data is needed when the expected response is NOT JSON - // (like in the case of a print ticket response or a print job download - // response). - virtual ResponseAction HandleRawData(const net::URLFetcher* source, - const GURL& url, - const std::string& data); - - // This will be invoked only if HandleRawResponse and HandleRawData return - // CONTINUE_PROCESSING AND if the response contains a valid JSON dictionary. - // |succeeded| is the value of the "success" field in the response JSON. - virtual ResponseAction HandleJSONData(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - - // Invoked when the retry limit for this request has been reached (if there - // was a retry limit - a limit of -1 implies no limit). - virtual void OnRequestGiveUp() { } - - // Invoked when the request returns a 403 error (applicable only when - // HandleRawResponse returns CONTINUE_PROCESSING). - // Returning RETRY_REQUEST will retry current request. (auth information - // may have been updated and new info is available through the - // Authenticator interface). - // Returning CONTINUE_PROCESSING will treat auth error as a network error. - virtual ResponseAction OnRequestAuthError() = 0; - - // Authentication information may change between retries. - // CloudPrintURLFetcher will request auth info before sending any request. - virtual std::string GetAuthHeaderValue() = 0; - - protected: - virtual ~Delegate() {} - }; - - static CloudPrintURLFetcher* Create( - const net::PartialNetworkTrafficAnnotationTag& - partial_traffic_annotation); - static void set_test_factory(CloudPrintURLFetcherFactory* factory); - - bool IsSameRequest(const net::URLFetcher* source); - - void StartGetRequest(const GURL& url, Delegate* delegate, int max_retries); - void StartGetRequestWithAcceptHeader(const GURL& url, - Delegate* delegate, - int max_retries, - const std::string& accept_header); - void StartPostRequest(const GURL& url, - Delegate* delegate, - int max_retries, - const std::string& post_data_mime_type, - const std::string& post_data); - - // net::URLFetcherDelegate implementation. - void OnURLFetchComplete(const net::URLFetcher* source) override; - - protected: - CloudPrintURLFetcher(const net::PartialNetworkTrafficAnnotationTag& - partial_traffic_annotation); - friend class base::RefCountedThreadSafe<CloudPrintURLFetcher>; - ~CloudPrintURLFetcher() override; - - // Virtual for testing. - virtual net::URLRequestContextGetter* GetRequestContextGetter(); - - private: - void StartRequestHelper(const GURL& url, - net::URLFetcher::RequestType request_type, - Delegate* delegate, - int max_retries, - const std::string& post_data_mime_type, - const std::string& post_data, - const std::string& additional_accept_header); - void SetupRequestHeaders(); - - std::unique_ptr<net::URLFetcher> request_; - raw_ptr<Delegate> delegate_; - int num_retries_; - std::string additional_accept_header_; - std::string post_data_mime_type_; - std::string post_data_; - - const net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation_; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_URL_FETCHER_H_
diff --git a/chrome/service/cloud_print/cloud_print_url_fetcher_unittest.cc b/chrome/service/cloud_print/cloud_print_url_fetcher_unittest.cc deleted file mode 100644 index 9aab7f81..0000000 --- a/chrome/service/cloud_print/cloud_print_url_fetcher_unittest.cc +++ /dev/null
@@ -1,399 +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 "chrome/service/cloud_print/cloud_print_url_fetcher.h" - -#include <memory> - -#include "base/command_line.h" -#include "base/location.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/ref_counted.h" -#include "base/run_loop.h" -#include "base/synchronization/waitable_event.h" -#include "base/task/single_thread_task_runner.h" -#include "base/test/task_environment.h" -#include "base/threading/thread.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/values.h" -#include "chrome/service/service_process.h" -#include "net/base/net_errors.h" -#include "net/test/embedded_test_server/embedded_test_server.h" -#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "net/url_request/url_request_context_getter.h" -#include "net/url_request/url_request_test_util.h" -#include "net/url_request/url_request_throttler_manager.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -using base::Time; - -namespace cloud_print { - -const base::FilePath::CharType kDocRoot[] = - FILE_PATH_LITERAL("chrome/test/data"); - -int g_request_context_getter_instances = 0; -class TrackingTestURLRequestContextGetter - : public net::TestURLRequestContextGetter { - public: - explicit TrackingTestURLRequestContextGetter( - base::SingleThreadTaskRunner* io_task_runner, - net::URLRequestThrottlerManager* throttler_manager) - : TestURLRequestContextGetter(io_task_runner), - throttler_manager_(throttler_manager) { - g_request_context_getter_instances++; - } - - net::TestURLRequestContext* GetURLRequestContext() override { - if (!context_.get()) { - context_ = std::make_unique<net::TestURLRequestContext>(true); - context_->set_throttler_manager(throttler_manager_); - context_->Init(); - } - return context_.get(); - } - - protected: - ~TrackingTestURLRequestContextGetter() override { - g_request_context_getter_instances--; - } - - private: - // Not owned here. - raw_ptr<net::URLRequestThrottlerManager> throttler_manager_; - std::unique_ptr<net::TestURLRequestContext> context_; -}; - -class TestCloudPrintURLFetcher : public CloudPrintURLFetcher { - public: - explicit TestCloudPrintURLFetcher( - base::SingleThreadTaskRunner* io_task_runner) - : CloudPrintURLFetcher(PARTIAL_TRAFFIC_ANNOTATION_FOR_TESTS), - io_task_runner_(io_task_runner) {} - - net::URLRequestContextGetter* GetRequestContextGetter() override { - return new TrackingTestURLRequestContextGetter(io_task_runner_.get(), - throttler_manager()); - } - - net::URLRequestThrottlerManager* throttler_manager() { - return &throttler_manager_; - } - - private: - ~TestCloudPrintURLFetcher() override {} - - scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; - - // We set this as the throttler manager for the - // TestURLRequestContext we create. - net::URLRequestThrottlerManager throttler_manager_; -}; - -class CloudPrintURLFetcherTest : public testing::Test, - public CloudPrintURLFetcher::Delegate { - public: - CloudPrintURLFetcherTest() - : max_retries_(0), - fetcher_(nullptr), - quit_run_loop_(run_loop_.QuitClosure()) {} - - CloudPrintURLFetcherTest(const CloudPrintURLFetcherTest&) = delete; - CloudPrintURLFetcherTest& operator=(const CloudPrintURLFetcherTest&) = delete; - - // Creates a URLFetcher, using the program's main thread to do IO. - virtual void CreateFetcher(const GURL& url, int max_retries); - - // CloudPrintURLFetcher::Delegate - CloudPrintURLFetcher::ResponseAction HandleRawResponse( - const net::URLFetcher* source, - const GURL& url, - net::Error error, - int response_code, - const std::string& data) override; - - CloudPrintURLFetcher::ResponseAction OnRequestAuthError() override { - ADD_FAILURE(); - return CloudPrintURLFetcher::STOP_PROCESSING; - } - - std::string GetAuthHeaderValue() override { return auth_header_; } - - void SetAuthHeaderValue(const std::string& value) { auth_header_ = value; } - - scoped_refptr<base::SingleThreadTaskRunner> io_task_runner() { - return io_task_runner_; - } - - protected: - void SetUp() override { - testing::Test::SetUp(); - - io_task_runner_ = base::ThreadTaskRunnerHandle::Get(); - } - - void TearDown() override { - fetcher_.reset(); - // Deleting the fetcher causes a task to be posted to the IO thread to - // release references to the URLRequestContextGetter. We need to run all - // pending tasks to execute that (this is the IO thread). - base::RunLoop().RunUntilIdle(); - EXPECT_EQ(0, g_request_context_getter_instances); - } - - // URLFetcher is designed to run on the main UI thread, but in our tests - // we assume that the current thread is the IO thread where the URLFetcher - // dispatches its requests to. When we wish to simulate being used from - // a UI thread, we dispatch a worker thread to do so. - base::test::SingleThreadTaskEnvironment task_environment_{ - base::test::SingleThreadTaskEnvironment::MainThreadType::IO}; - scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; - std::string auth_header_; - int max_retries_; - Time start_time_; - scoped_refptr<TestCloudPrintURLFetcher> fetcher_; - base::RunLoop run_loop_; - base::OnceClosure quit_run_loop_; -}; - -class CloudPrintURLFetcherBasicTest : public CloudPrintURLFetcherTest { - public: - CloudPrintURLFetcherBasicTest() - : handle_raw_response_(false), handle_raw_data_(false) {} - - // CloudPrintURLFetcher::Delegate - CloudPrintURLFetcher::ResponseAction HandleRawResponse( - const net::URLFetcher* source, - const GURL& url, - net::Error error, - int response_code, - const std::string& data) override; - - CloudPrintURLFetcher::ResponseAction HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) override; - - CloudPrintURLFetcher::ResponseAction HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) override; - - void SetHandleRawResponse(bool handle_raw_response) { - handle_raw_response_ = handle_raw_response; - } - void SetHandleRawData(bool handle_raw_data) { - handle_raw_data_ = handle_raw_data; - } - void SetExpectedData(const std::string& data) { expected_data_ = data; } - - private: - bool handle_raw_response_; - bool handle_raw_data_; - std::string expected_data_; -}; - -// Version of CloudPrintURLFetcherTest that tests overload protection. -class CloudPrintURLFetcherOverloadTest : public CloudPrintURLFetcherTest { - public: - CloudPrintURLFetcherOverloadTest() : response_count_(0) { - } - - // CloudPrintURLFetcher::Delegate - CloudPrintURLFetcher::ResponseAction HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) override; - - private: - int response_count_; -}; - -// Version of CloudPrintURLFetcherTest that tests backoff protection. -class CloudPrintURLFetcherRetryBackoffTest : public CloudPrintURLFetcherTest { - public: - CloudPrintURLFetcherRetryBackoffTest() : response_count_(0) { - } - - // CloudPrintURLFetcher::Delegate - CloudPrintURLFetcher::ResponseAction HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) override; - - void OnRequestGiveUp() override; - - private: - int response_count_; -}; - - -void CloudPrintURLFetcherTest::CreateFetcher(const GURL& url, int max_retries) { - fetcher_ = new TestCloudPrintURLFetcher(io_task_runner().get()); - - // Registers an entry for test url. It only allows 3 requests to be sent - // in 200 milliseconds. - scoped_refptr<net::URLRequestThrottlerEntry> - entry(new net::URLRequestThrottlerEntry( - fetcher_->throttler_manager(), std::string(), 200, 3, 1, 2.0, 0.0, 256)); - fetcher_->throttler_manager()->OverrideEntryForTests(url, entry.get()); - - max_retries_ = max_retries; - start_time_ = Time::Now(); - fetcher_->StartGetRequest(url, this, max_retries_); -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcherTest::HandleRawResponse(const net::URLFetcher* source, - const GURL& url, - net::Error error, - int response_code, - const std::string& data) { - EXPECT_EQ(net::OK, error); - EXPECT_EQ(200, response_code); // HTTP OK - EXPECT_FALSE(data.empty()); - return CloudPrintURLFetcher::CONTINUE_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcherBasicTest::HandleRawResponse(const net::URLFetcher* source, - const GURL& url, - net::Error error, - int response_code, - const std::string& data) { - EXPECT_EQ(net::OK, error); - EXPECT_EQ(200, response_code); // HTTP OK - EXPECT_FALSE(data.empty()); - - if (handle_raw_response_) { - // If the current message loop is not the IO loop, it will be shut down when - // the main loop returns and this thread subsequently goes out of scope. - std::move(quit_run_loop_).Run(); - return CloudPrintURLFetcher::STOP_PROCESSING; - } - return CloudPrintURLFetcher::CONTINUE_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcherBasicTest::HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) { - // We should never get here if we returned true in HandleRawResponse - EXPECT_FALSE(handle_raw_response_); - if (handle_raw_data_) { - if (!expected_data_.empty()) { - EXPECT_EQ(expected_data_, data); - } - std::move(quit_run_loop_).Run(); - return CloudPrintURLFetcher::STOP_PROCESSING; - } - return CloudPrintURLFetcher::CONTINUE_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcherBasicTest::HandleJSONData(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - // We should never get here if we returned true in one of the above methods. - EXPECT_FALSE(handle_raw_response_); - EXPECT_FALSE(handle_raw_data_); - std::move(quit_run_loop_).Run(); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcherOverloadTest::HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) { - const base::TimeDelta one_second = base::Milliseconds(1000); - response_count_++; - if (response_count_ < 20) { - fetcher_->StartGetRequest(url, this, max_retries_); - } else { - // We have already sent 20 requests continuously. And we expect that - // it takes more than 1 second due to the overload protection settings. - EXPECT_TRUE(Time::Now() - start_time_ >= one_second); - std::move(quit_run_loop_).Run(); - } - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -CloudPrintURLFetcherRetryBackoffTest::HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) { - response_count_++; - // First attempt + 11 retries = 12 total responses. - EXPECT_LE(response_count_, 12); - return CloudPrintURLFetcher::RETRY_REQUEST; -} - -void CloudPrintURLFetcherRetryBackoffTest::OnRequestGiveUp() { - // It takes more than 200 ms to finish all 11 requests. - EXPECT_TRUE(Time::Now() - start_time_ >= base::Milliseconds(200)); - std::move(quit_run_loop_).Run(); -} - -TEST_F(CloudPrintURLFetcherBasicTest, HandleRawResponse) { - net::EmbeddedTestServer test_server; - test_server.AddDefaultHandlers(base::FilePath(kDocRoot)); - ASSERT_TRUE(test_server.Start()); - SetHandleRawResponse(true); - - CreateFetcher(test_server.GetURL("/echo"), 0); - run_loop_.Run(); -} - -TEST_F(CloudPrintURLFetcherBasicTest, HandleRawData) { - net::EmbeddedTestServer test_server; - test_server.AddDefaultHandlers(base::FilePath(kDocRoot)); - ASSERT_TRUE(test_server.Start()); - - SetHandleRawData(true); - CreateFetcher(test_server.GetURL("/echo"), 0); - run_loop_.Run(); -} - -TEST_F(CloudPrintURLFetcherBasicTest, AuthorizationHeader) { - const char kAuthHeaderValue[] = "OAuth abcdefg"; - net::EmbeddedTestServer test_server; - SetAuthHeaderValue(kAuthHeaderValue); - test_server.AddDefaultHandlers(base::FilePath(kDocRoot)); - ASSERT_TRUE(test_server.Start()); - - SetHandleRawData(true); - SetExpectedData(kAuthHeaderValue); - CreateFetcher(test_server.GetURL("/echoheader?Authorization"), 0); - run_loop_.Run(); -} - -TEST_F(CloudPrintURLFetcherOverloadTest, Protect) { - net::EmbeddedTestServer test_server; - test_server.AddDefaultHandlers(base::FilePath(kDocRoot)); - ASSERT_TRUE(test_server.Start()); - - GURL url(test_server.GetURL("/defaultresponse")); - CreateFetcher(url, 11); - - run_loop_.Run(); -} - -TEST_F(CloudPrintURLFetcherRetryBackoffTest, GiveUp) { - net::EmbeddedTestServer test_server; - test_server.AddDefaultHandlers(base::FilePath(kDocRoot)); - ASSERT_TRUE(test_server.Start()); - - GURL url(test_server.GetURL("/defaultresponse")); - CreateFetcher(url, 11); - - run_loop_.Run(); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_wipeout.cc b/chrome/service/cloud_print/cloud_print_wipeout.cc deleted file mode 100644 index 714519b..0000000 --- a/chrome/service/cloud_print/cloud_print_wipeout.cc +++ /dev/null
@@ -1,72 +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 "chrome/service/cloud_print/cloud_print_wipeout.h" - -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/common/cloud_print/cloud_print_helpers.h" - -const int kMaxWipeoutAttempts = 3; - -namespace cloud_print { - -CloudPrintWipeout::CloudPrintWipeout( - Client* client, - const GURL& cloud_print_server_url, - const net::PartialNetworkTrafficAnnotationTag& partial_traffic_annotation) - : client_(client), - cloud_print_server_url_(cloud_print_server_url), - partial_traffic_annotation_(partial_traffic_annotation) {} -CloudPrintWipeout::~CloudPrintWipeout() { -} - -void CloudPrintWipeout::UnregisterPrinters( - const std::string& auth_token, - const std::list<std::string>& printer_ids) { - auth_token_ = auth_token; - printer_ids_ = printer_ids; - UnregisterNextPrinter(); -} - -void CloudPrintWipeout::UnregisterNextPrinter() { - if (printer_ids_.empty()) { - client_->OnUnregisterPrintersComplete(); - return; - } - - std::string printer_id = printer_ids_.front(); - printer_ids_.pop_front(); - - GURL url = GetUrlForPrinterDelete(cloud_print_server_url_, - printer_id, - "connector_disabled"); - request_ = CloudPrintURLFetcher::Create(partial_traffic_annotation_); - request_->StartGetRequest(url, this, kMaxWipeoutAttempts); -} - -CloudPrintURLFetcher::ResponseAction CloudPrintWipeout::HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - // We don't care if delete was successful or not here. - UnregisterNextPrinter(); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -void CloudPrintWipeout::OnRequestGiveUp() { - UnregisterNextPrinter(); -} - -CloudPrintURLFetcher::ResponseAction CloudPrintWipeout::OnRequestAuthError() { - // We can't recover from auth error. Report completion to stop service. - client_->OnUnregisterPrintersComplete(); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -std::string CloudPrintWipeout::GetAuthHeaderValue() { - return GetCloudPrintAuthHeaderValue(auth_token_); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cloud_print_wipeout.h b/chrome/service/cloud_print/cloud_print_wipeout.h deleted file mode 100644 index 3335ab93..0000000 --- a/chrome/service/cloud_print/cloud_print_wipeout.h +++ /dev/null
@@ -1,70 +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 CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_WIPEOUT_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_WIPEOUT_H_ - -#include <list> -#include <string> - -#include "base/memory/raw_ptr.h" -#include "chrome/service/cloud_print/cloud_print_url_fetcher.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "url/gurl.h" - -namespace cloud_print { - -// CloudPrintWipeout unregisters list of printers from the cloudprint service. -class CloudPrintWipeout : public CloudPrintURLFetcher::Delegate { - public: - class Client { - public: - virtual void OnUnregisterPrintersComplete() = 0; - protected: - virtual ~Client() {} - }; - - CloudPrintWipeout(Client* client, - const GURL& cloud_print_server_url, - const net::PartialNetworkTrafficAnnotationTag& - partial_traffic_annotation); - - CloudPrintWipeout(const CloudPrintWipeout&) = delete; - CloudPrintWipeout& operator=(const CloudPrintWipeout&) = delete; - - ~CloudPrintWipeout() override; - - void UnregisterPrinters(const std::string& auth_token, - const std::list<std::string>& printer_ids); - - // CloudPrintURLFetcher::Delegate implementation. - CloudPrintURLFetcher::ResponseAction HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) override; - void OnRequestGiveUp() override; - CloudPrintURLFetcher::ResponseAction OnRequestAuthError() override; - std::string GetAuthHeaderValue() override; - - private: - void UnregisterNextPrinter(); - - // CloudPrintWipeout client. - raw_ptr<Client> client_; - // Cloud Print server url. - GURL cloud_print_server_url_; - // The CloudPrintURLFetcher instance for the current request. - scoped_refptr<CloudPrintURLFetcher> request_; - // Auth token. - std::string auth_token_; - // List of printer to unregister - std::list<std::string> printer_ids_; - // Partial network traffic annotation for network requests. - const net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation_; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_WIPEOUT_H_
diff --git a/chrome/service/cloud_print/connector_settings.cc b/chrome/service/cloud_print/connector_settings.cc deleted file mode 100644 index ae33eabc..0000000 --- a/chrome/service/cloud_print/connector_settings.cc +++ /dev/null
@@ -1,115 +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 "chrome/service/cloud_print/connector_settings.h" - -#include <stddef.h> - -#include "base/values.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/common/pref_names.h" -#include "chrome/service/cloud_print/print_system.h" -#include "chrome/service/service_process_prefs.h" -#include "components/cloud_devices/common/cloud_devices_urls.h" - -namespace { - -const char kDeleteOnEnumFail[] = "delete_on_enum_fail"; -const char kName[] = "name"; -const char kConnect[] = "connect"; - -} // namespace - -namespace cloud_print { - -ConnectorSettings::ConnectorSettings() - : delete_on_enum_fail_(false), - connect_new_printers_(true), - xmpp_ping_enabled_(false), - xmpp_ping_timeout_sec_(kDefaultXmppPingTimeoutSecs) { -} - -ConnectorSettings::~ConnectorSettings() { -} - -void ConnectorSettings::InitFrom(ServiceProcessPrefs* prefs) { - CopyFrom(ConnectorSettings()); - - proxy_id_ = prefs->GetString(prefs::kCloudPrintProxyId, std::string()); - if (proxy_id_.empty()) { - proxy_id_ = PrintSystem::GenerateProxyId(); - prefs->SetString(prefs::kCloudPrintProxyId, proxy_id_); - prefs->WritePrefs(); - } - - // Getting print system specific settings from the preferences. - const base::DictionaryValue* print_system_settings = - prefs->GetDictionary(prefs::kCloudPrintPrintSystemSettings); - if (print_system_settings) { - print_system_settings_.reset(print_system_settings->DeepCopy()); - // TODO(vitalybuka) : Consider to rename and move out option from - // print_system_settings. - delete_on_enum_fail_ = - print_system_settings_->FindBoolPath(kDeleteOnEnumFail) - .value_or(delete_on_enum_fail_); - } - - // Check if there is an override for the cloud print server URL. - server_url_ = cloud_devices::GetCloudPrintURL(); - DCHECK(server_url_.is_valid()); - - connect_new_printers_ = prefs->GetBoolean( - prefs::kCloudPrintConnectNewPrinters, true); - - xmpp_ping_enabled_ = prefs->GetBoolean( - prefs::kCloudPrintXmppPingEnabled, false); - int timeout = prefs->GetInt( - prefs::kCloudPrintXmppPingTimeout, kDefaultXmppPingTimeoutSecs); - SetXmppPingTimeoutSec(timeout); - - const base::Value* printers = prefs->GetList(prefs::kCloudPrintPrinters); - if (printers) { - for (const auto& printer : printers->GetList()) { - if (printer.is_dict()) { - const std::string* name = printer.FindStringKey(kName); - if (name && !name->empty()) { - bool connect = - printer.FindBoolKey(kConnect).value_or(connect_new_printers_); - if (connect != connect_new_printers_) - printers_.insert(*name); - } - } - } - } -} - -bool ConnectorSettings::ShouldConnect(const std::string& printer_name) const { - auto printer = printers_.find(printer_name); - if (printer != printers_.end()) - return !connect_new_printers_; - return connect_new_printers_; -} - -void ConnectorSettings::CopyFrom(const ConnectorSettings& source) { - server_url_ = source.server_url(); - proxy_id_ = source.proxy_id(); - delete_on_enum_fail_ = source.delete_on_enum_fail(); - connect_new_printers_ = source.connect_new_printers_; - xmpp_ping_enabled_ = source.xmpp_ping_enabled(); - xmpp_ping_timeout_sec_ = source.xmpp_ping_timeout_sec(); - printers_ = source.printers_; - if (source.print_system_settings()) - print_system_settings_.reset(source.print_system_settings()->DeepCopy()); -} - -void ConnectorSettings::SetXmppPingTimeoutSec(int timeout) { - xmpp_ping_timeout_sec_ = timeout; - if (xmpp_ping_timeout_sec_ < kMinXmppPingTimeoutSecs) { - LOG(WARNING) << - "CP_CONNECTOR: XMPP ping timeout is less than minimal value"; - xmpp_ping_timeout_sec_ = kMinXmppPingTimeoutSecs; - } -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/connector_settings.h b/chrome/service/cloud_print/connector_settings.h deleted file mode 100644 index 7beb38634..0000000 --- a/chrome/service/cloud_print/connector_settings.h +++ /dev/null
@@ -1,100 +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 CHROME_SERVICE_CLOUD_PRINT_CONNECTOR_SETTINGS_H_ -#define CHROME_SERVICE_CLOUD_PRINT_CONNECTOR_SETTINGS_H_ - -#include <memory> -#include <set> -#include <string> - -#include "base/gtest_prod_util.h" -#include "url/gurl.h" - -class ServiceProcessPrefs; - -namespace base { - class DictionaryValue; -} - -namespace cloud_print { - -class ConnectorSettings { - public: - ConnectorSettings(); - - ConnectorSettings(const ConnectorSettings&) = delete; - ConnectorSettings& operator=(const ConnectorSettings&) = delete; - - ~ConnectorSettings(); - - void InitFrom(ServiceProcessPrefs* prefs); - - void CopyFrom(const ConnectorSettings& source); - - const GURL& server_url() const { return server_url_; } - - const std::string& proxy_id() const { - return proxy_id_; - } - - bool delete_on_enum_fail() const { - return delete_on_enum_fail_; - } - - bool xmpp_ping_enabled() const { - return xmpp_ping_enabled_; - } - - int xmpp_ping_timeout_sec() const { - return xmpp_ping_timeout_sec_; - } - - const base::DictionaryValue* print_system_settings() const { - return print_system_settings_.get(); - } - - bool ShouldConnect(const std::string& printer_name) const; - - void SetXmppPingTimeoutSec(int timeout); - - private: - friend class ConnectorSettingsTest; - FRIEND_TEST_ALL_PREFIXES(ConnectorSettingsTest, SettersTest); - - void set_xmpp_ping_enabled(bool enabled) { - xmpp_ping_enabled_ = enabled; - } - - // Cloud Print server url. - GURL server_url_; - - // This is initialized after a successful call to one of the Enable* methods. - // It is not cleared in DisableUser. - std::string proxy_id_; - - // If |true| printers that are not found locally will be deleted on GCP - // even if the local enumeration failed. - bool delete_on_enum_fail_; - - // If true register all new printers in cloud print. - bool connect_new_printers_; - - // Indicate if XMPP pings are enabled. - bool xmpp_ping_enabled_; - - // Indicate timeout between XMPP pings. - int xmpp_ping_timeout_sec_; - - // Black list if connect_new_printers_ is true, or whitelist if false. - typedef std::set<std::string> Printers; - Printers printers_; - - // Print system settings. - std::unique_ptr<base::DictionaryValue> print_system_settings_; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_CONNECTOR_SETTINGS_H_
diff --git a/chrome/service/cloud_print/connector_settings_unittest.cc b/chrome/service/cloud_print/connector_settings_unittest.cc deleted file mode 100644 index b976f0f..0000000 --- a/chrome/service/cloud_print/connector_settings_unittest.cc +++ /dev/null
@@ -1,157 +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 "chrome/service/cloud_print/connector_settings.h" - -#include <stddef.h> - -#include <string> - -#include "base/cxx17_backports.h" -#include "base/files/file_util.h" -#include "base/files/scoped_temp_dir.h" -#include "base/task/single_thread_task_runner.h" -#include "base/test/task_environment.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/values.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/service/service_process_prefs.h" - -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace cloud_print { - -const char kServiceStateContent[] = - "{" - " 'cloud_print': {" - " 'auth_token': 'token'," - " 'email': 'user@gmail.com'," - " 'enabled': true," - " 'proxy_id': 'PROXY'," - " 'robot_email': '123@cloudprint.googleusercontent.com'," - " 'robot_refresh_token': '123'," - " 'xmpp_auth_token': 'xmp token'," - " 'xmpp_ping_enabled': true," - " 'xmpp_ping_timeout_sec': 256," - " 'user_settings': {" - " 'printers': [" - " { 'name': 'prn1', 'connect': false }," - " { 'name': 'prn2', 'connect': false }," - " { 'name': 'prn3', 'connect': true }" - " ]," - " 'connectNewPrinters': false" - " }," - " 'print_system_settings': {" - " 'delete_on_enum_fail' : true" - " }" - " }" - "}"; - - -class ConnectorSettingsTest : public testing::Test { - protected: - void SetUp() override { - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - task_runner_ = base::ThreadTaskRunnerHandle::Get(); - } - - ServiceProcessPrefs* CreateTestFile(const char* json) { - base::FilePath file_name = temp_dir_.GetPath().AppendASCII("file.txt"); - base::DeleteFile(file_name); - if (json) { - std::string content = json; - std::replace(content.begin(), content.end(), '\'', '"'); - base::WriteFile(file_name, content); - } - ServiceProcessPrefs* prefs = - new ServiceProcessPrefs(file_name, task_runner_.get()); - prefs->ReadPrefs(); - return prefs; - } - - base::ScopedTempDir temp_dir_; - base::test::SingleThreadTaskEnvironment task_environment_; - scoped_refptr<base::SingleThreadTaskRunner> task_runner_; -}; - -TEST_F(ConnectorSettingsTest, InitFromEmpty) { - const char* const kEmptyJSons[] = { - NULL, - "{}", - "{'foo': []}", - "{'foo',,}", - }; - for (size_t i = 0; i < base::size(kEmptyJSons); ++i) { - std::unique_ptr<ServiceProcessPrefs> prefs(CreateTestFile(kEmptyJSons[i])); - ConnectorSettings settings; - settings.InitFrom(prefs.get()); - - EXPECT_EQ("https://www.google.com/cloudprint", - settings.server_url().spec()); - EXPECT_FALSE(settings.proxy_id().empty()); - EXPECT_FALSE(settings.delete_on_enum_fail()); - EXPECT_EQ(NULL, settings.print_system_settings()); - EXPECT_TRUE(settings.ShouldConnect("prn1")); - EXPECT_FALSE(settings.xmpp_ping_enabled()); - } -} - -TEST_F(ConnectorSettingsTest, InitFromFile) { - std::unique_ptr<ServiceProcessPrefs> prefs( - CreateTestFile(kServiceStateContent)); - ConnectorSettings settings; - settings.InitFrom(prefs.get()); - EXPECT_EQ("https://www.google.com/cloudprint", settings.server_url().spec()); - EXPECT_EQ("PROXY", settings.proxy_id()); - EXPECT_FALSE(settings.proxy_id().empty()); - EXPECT_TRUE(settings.delete_on_enum_fail()); - EXPECT_TRUE(settings.print_system_settings()); - EXPECT_TRUE(settings.xmpp_ping_enabled()); - EXPECT_EQ(settings.xmpp_ping_timeout_sec(), 256); - EXPECT_FALSE(settings.ShouldConnect("prn0")); - EXPECT_FALSE(settings.ShouldConnect("prn1")); - EXPECT_TRUE(settings.ShouldConnect("prn3")); -} - -TEST_F(ConnectorSettingsTest, CopyFrom) { - std::unique_ptr<ServiceProcessPrefs> prefs( - CreateTestFile(kServiceStateContent)); - ConnectorSettings settings1; - settings1.InitFrom(prefs.get()); - - ConnectorSettings settings2; - settings2.CopyFrom(settings1); - - EXPECT_EQ(settings1.server_url(), settings2.server_url()); - EXPECT_EQ(settings1.proxy_id(), settings2.proxy_id()); - EXPECT_EQ(settings1.delete_on_enum_fail(), settings2.delete_on_enum_fail()); - EXPECT_EQ(settings1.print_system_settings()->DictSize(), - settings2.print_system_settings()->DictSize()); - EXPECT_EQ(settings1.xmpp_ping_enabled(), settings2.xmpp_ping_enabled()); - EXPECT_EQ(settings1.xmpp_ping_timeout_sec(), - settings2.xmpp_ping_timeout_sec()); - EXPECT_FALSE(settings2.ShouldConnect("prn0")); - EXPECT_FALSE(settings2.ShouldConnect("prn1")); - EXPECT_TRUE(settings2.ShouldConnect("prn3")); -} - -TEST_F(ConnectorSettingsTest, SettersTest) { - std::unique_ptr<ServiceProcessPrefs> prefs(CreateTestFile("{}")); - ConnectorSettings settings; - settings.InitFrom(prefs.get()); - EXPECT_FALSE(settings.xmpp_ping_enabled()); - - // Set and check valid settings. - settings.set_xmpp_ping_enabled(true); - settings.SetXmppPingTimeoutSec(256); - EXPECT_TRUE(settings.xmpp_ping_enabled()); - EXPECT_EQ(settings.xmpp_ping_timeout_sec(), 256); - - // Set invalid settings, and check correct defaults. - settings.SetXmppPingTimeoutSec(1); - EXPECT_EQ(settings.xmpp_ping_timeout_sec(), kMinXmppPingTimeoutSecs); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/job_status_updater.cc b/chrome/service/cloud_print/job_status_updater.cc deleted file mode 100644 index e17777c..0000000 --- a/chrome/service/cloud_print/job_status_updater.cc +++ /dev/null
@@ -1,119 +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 "chrome/service/cloud_print/job_status_updater.h" - -#include "base/bind.h" -#include "base/location.h" -#include "base/strings/string_util.h" -#include "base/strings/utf_string_conversions.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/values.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/service/cloud_print/cloud_print_service_helpers.h" - -namespace cloud_print { - -namespace { - -bool IsTerminalJobState(PrintJobStatus status) { - return status == PRINT_JOB_STATUS_ERROR || - status == PRINT_JOB_STATUS_COMPLETED; -} - -} // namespace - -JobStatusUpdater::JobStatusUpdater( - const std::string& printer_name, - const std::string& job_id, - PlatformJobId local_job_id, - const GURL& cloud_print_server_url, - PrintSystem* print_system, - Delegate* delegate, - const net::PartialNetworkTrafficAnnotationTag& partial_traffic_annotation) - : printer_name_(printer_name), - job_id_(job_id), - local_job_id_(local_job_id), - cloud_print_server_url_(cloud_print_server_url), - print_system_(print_system), - delegate_(delegate), - partial_traffic_annotation_(partial_traffic_annotation) { - DCHECK(delegate_); -} - -// Start checking the status of the local print job. -void JobStatusUpdater::UpdateStatus() { - // It does not matter if we had already sent out an update and are waiting for - // a response. This is a new update and we will simply cancel the old request - // and send a new one. - if (!stopped_) { - bool need_update = false; - // If the job has already been completed, we just need to update the server - // with that status. The *only* reason we would come back here in that case - // is if our last server update attempt failed. - if (IsTerminalJobState(last_job_details_.status)) { - need_update = true; - } else { - PrintJobDetails details; - if (print_system_->GetJobDetails(printer_name_, local_job_id_, - &details)) { - if (details != last_job_details_) { - last_job_details_ = details; - need_update = true; - } - } else { - // If GetJobDetails failed, the most likely case is that the job no - // longer exists in the OS queue. We are going to assume it is done in - // this case. - last_job_details_.Clear(); - last_job_details_.status = PRINT_JOB_STATUS_COMPLETED; - need_update = true; - } - } - if (need_update) { - request_ = CloudPrintURLFetcher::Create(partial_traffic_annotation_); - request_->StartGetRequest( - GetUrlForJobStatusUpdate(cloud_print_server_url_, job_id_, - last_job_details_), - this, kCloudPrintAPIMaxRetryCount); - } - } -} - -void JobStatusUpdater::Stop() { - request_ = nullptr; - stopped_ = true; - delegate_->OnJobCompleted(this); -} - -// CloudPrintURLFetcher::Delegate implementation. -CloudPrintURLFetcher::ResponseAction JobStatusUpdater::HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - if (IsTerminalJobState(last_job_details_.status)) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&JobStatusUpdater::Stop, this)); - } - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction JobStatusUpdater::OnRequestAuthError() { - // We got an Auth error and have no idea how long it will take to refresh - // auth information (may take forever). We'll drop current request and - // propagate this error to the upper level. After auth issues will be - // resolved, GCP connector will restart. - delegate_->OnAuthError(); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -std::string JobStatusUpdater::GetAuthHeaderValue() { - return GetCloudPrintAuthHeaderFromStore(); -} - -JobStatusUpdater::~JobStatusUpdater() {} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/job_status_updater.h b/chrome/service/cloud_print/job_status_updater.h deleted file mode 100644 index d6cc8cbab..0000000 --- a/chrome/service/cloud_print/job_status_updater.h +++ /dev/null
@@ -1,81 +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 CHROME_SERVICE_CLOUD_PRINT_JOB_STATUS_UPDATER_H_ -#define CHROME_SERVICE_CLOUD_PRINT_JOB_STATUS_UPDATER_H_ - -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/memory/ref_counted.h" -#include "chrome/service/cloud_print/cloud_print_url_fetcher.h" -#include "chrome/service/cloud_print/print_system.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "url/gurl.h" - -namespace cloud_print { - -// Periodically monitors the status of a local print job and updates the -// cloud print server accordingly. When the job has been completed this -// object releases the reference to itself which should cause it to -// self-destruct. -class JobStatusUpdater : public base::RefCountedThreadSafe<JobStatusUpdater>, - public CloudPrintURLFetcher::Delegate { - public: - class Delegate { - public: - virtual bool OnJobCompleted(JobStatusUpdater* updater) = 0; - virtual void OnAuthError() = 0; - - protected: - virtual ~Delegate() {} - }; - - JobStatusUpdater(const std::string& printer_name, - const std::string& job_id, - PlatformJobId local_job_id, - const GURL& cloud_print_server_url, - PrintSystem* print_system, - Delegate* delegate, - const net::PartialNetworkTrafficAnnotationTag& - partial_traffic_annotation); - - JobStatusUpdater(const JobStatusUpdater&) = delete; - JobStatusUpdater& operator=(const JobStatusUpdater&) = delete; - - // Checks the status of the local print job and sends an update. - void UpdateStatus(); - void Stop(); - - // CloudPrintURLFetcher::Delegate implementation. - CloudPrintURLFetcher::ResponseAction HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) override; - CloudPrintURLFetcher::ResponseAction OnRequestAuthError() override; - std::string GetAuthHeaderValue() override; - - private: - friend class base::RefCountedThreadSafe<JobStatusUpdater>; - ~JobStatusUpdater() override; - - const std::string printer_name_; - const std::string job_id_; - const PlatformJobId local_job_id_; - PrintJobDetails last_job_details_; - scoped_refptr<CloudPrintURLFetcher> request_; - const GURL cloud_print_server_url_; - scoped_refptr<PrintSystem> print_system_; - const raw_ptr<Delegate> delegate_; - // A flag that is set to true in Stop() and will ensure the next scheduled - // task will do nothing. - bool stopped_ = false; - // Partial network traffic annotation for network requests. - const net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation_; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_JOB_STATUS_UPDATER_H_
diff --git a/chrome/service/cloud_print/print_system.cc b/chrome/service/cloud_print/print_system.cc deleted file mode 100644 index 277ec423..0000000 --- a/chrome/service/cloud_print/print_system.cc +++ /dev/null
@@ -1,46 +0,0 @@ -// Copyright (c) 2010 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/service/cloud_print/print_system.h" - -#include "base/guid.h" -#include "build/build_config.h" - -namespace cloud_print { - -PrintJobDetails::PrintJobDetails() - : status(PRINT_JOB_STATUS_INVALID), - platform_status_flags(0), - total_pages(0), - pages_printed(0) { -} - -void PrintJobDetails::Clear() { - status = PRINT_JOB_STATUS_INVALID; - platform_status_flags = 0; - status_message.clear(); - total_pages = 0; - pages_printed = 0; -} - -PrintSystem::PrintServerWatcher::~PrintServerWatcher() {} - -PrintSystem::PrinterWatcher::~PrinterWatcher() {} - -PrintSystem::JobSpooler::~JobSpooler() {} - -PrintSystem::~PrintSystem() {} - -std::string PrintSystem::GenerateProxyId() { - return base::GenerateGUID(); -} - -#if (defined(OS_LINUX) || defined(OS_CHROMEOS)) && !defined(USE_CUPS) -scoped_refptr<PrintSystem> PrintSystem::CreateInstance( - const base::DictionaryValue*) { - return nullptr; -} -#endif - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/print_system.h b/chrome/service/cloud_print/print_system.h deleted file mode 100644 index 33119bf..0000000 --- a/chrome/service/cloud_print/print_system.h +++ /dev/null
@@ -1,221 +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 CHROME_SERVICE_CLOUD_PRINT_PRINT_SYSTEM_H_ -#define CHROME_SERVICE_CLOUD_PRINT_PRINT_SYSTEM_H_ - -#include <map> -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/memory/ref_counted.h" -#include "printing/backend/print_backend.h" - -namespace base { -class DictionaryValue; -class FilePath; -} - -namespace printing { -struct PrinterBasicInfo; -struct PrinterCapsAndDefaults; -} - -// This is the interface for platform-specific code for cloud print -namespace cloud_print { - -typedef int PlatformJobId; - -enum PrintJobStatus { - PRINT_JOB_STATUS_INVALID, - PRINT_JOB_STATUS_IN_PROGRESS, - PRINT_JOB_STATUS_ERROR, - PRINT_JOB_STATUS_COMPLETED, - PRINT_JOB_STATUS_MAX, -}; - -struct PrintJobDetails { - PrintJobDetails(); - - void Clear(); - - bool operator ==(const PrintJobDetails& other) const { - return (status == other.status) && - (platform_status_flags == other.platform_status_flags) && - (status_message == other.status_message) && - (total_pages == other.total_pages) && - (pages_printed == other.pages_printed); - } - - bool operator !=(const PrintJobDetails& other) const { - return !(*this == other); - } - - PrintJobStatus status; - int platform_status_flags; - std::string status_message; - int total_pages; - int pages_printed; -}; - -// PrintSystem class will provide interface for different printing systems -// (Windows, CUPS) to implement. User will call CreateInstance() to -// obtain available printing system. -// Please note, that PrintSystem is not platform specific, but rather -// print system specific. For example, CUPS is available on both Linux and Mac, -// but not available on ChromeOS, etc. This design allows us to add more -// functionality on some platforms, while reusing core (CUPS) functions. -class PrintSystem : public base::RefCountedThreadSafe<PrintSystem> { - public: - class PrintServerWatcher - : public base::RefCountedThreadSafe<PrintServerWatcher> { - public: - // Callback interface for new printer notifications. - class Delegate { - public: - virtual void OnPrinterAdded() = 0; - // TODO(gene): Do we need OnPrinterDeleted notification here? - - protected: - virtual ~Delegate() {} - }; - - virtual bool StartWatching(PrintServerWatcher::Delegate* delegate) = 0; - virtual bool StopWatching() = 0; - - protected: - friend class base::RefCountedThreadSafe<PrintServerWatcher>; - virtual ~PrintServerWatcher(); - }; - - class PrinterWatcher : public base::RefCountedThreadSafe<PrinterWatcher> { - public: - // Callback interface for printer updates notifications. - class Delegate { - public: - virtual void OnPrinterDeleted() = 0; - virtual void OnPrinterChanged() = 0; - virtual void OnJobChanged() = 0; - - protected: - virtual ~Delegate() {} - }; - - virtual bool StartWatching(PrinterWatcher::Delegate* delegate) = 0; - virtual bool StopWatching() = 0; - virtual bool GetCurrentPrinterInfo( - printing::PrinterBasicInfo* printer_info) = 0; - - protected: - friend class base::RefCountedThreadSafe<PrinterWatcher>; - virtual ~PrinterWatcher(); - }; - - class JobSpooler : public base::RefCountedThreadSafe<JobSpooler> { - public: - // Callback interface for JobSpooler notifications. - class Delegate { - public: - virtual void OnJobSpoolSucceeded(const PlatformJobId& job_id) = 0; - virtual void OnJobSpoolFailed() = 0; - - protected: - virtual ~Delegate() {} - }; - - // Spool job to the printer asynchronously. Caller will be notified via - // |delegate|. Note that only one print job can be in progress at any given - // time. Subsequent calls to Spool (before the Delegate::OnJobSpoolSucceeded - // or Delegate::OnJobSpoolFailed methods are called) can fail. - virtual bool Spool(const std::string& print_ticket, - const std::string& print_ticket_mime_type, - const base::FilePath& print_data_file_path, - const std::string& print_data_mime_type, - const std::string& printer_name, - const std::string& job_title, - const std::vector<std::string>& tags, - JobSpooler::Delegate* delegate) = 0; - protected: - friend class base::RefCountedThreadSafe<JobSpooler>; - virtual ~JobSpooler(); - }; - - class PrintSystemResult { - public: - PrintSystemResult(bool succeeded, const std::string& message) - : succeeded_(succeeded), message_(message) { } - bool succeeded() const { return succeeded_; } - std::string message() const { return message_; } - - private: - PrintSystemResult() {} - - bool succeeded_; - std::string message_; - }; - - using PrinterCapsAndDefaultsCallback = base::OnceCallback< - void(bool, const std::string&, const printing::PrinterCapsAndDefaults&)>; - - // Initialize print system. This need to be called before any other function - // of PrintSystem. - virtual PrintSystemResult Init() = 0; - - // Enumerates the list of installed local and network printers. - virtual PrintSystemResult EnumeratePrinters( - printing::PrinterList* printer_list) = 0; - - // Gets the capabilities and defaults for a specific printer asynchronously. - virtual void GetPrinterCapsAndDefaults( - const std::string& printer_name, - PrinterCapsAndDefaultsCallback callback) = 0; - - // Returns true if printer_name points to a valid printer. - virtual bool IsValidPrinter(const std::string& printer_name) = 0; - - // Returns true if ticket is valid. - virtual bool ValidatePrintTicket( - const std::string& printer_name, - const std::string& print_ticket_data, - const std::string& print_ticket_mime_type) = 0; - - // Get details for already spooled job. - virtual bool GetJobDetails(const std::string& printer_name, - PlatformJobId job_id, - PrintJobDetails* job_details) = 0; - - // Factory methods to create corresponding watcher. Callee is responsible - // for deleting objects. Return NULL if failed. - virtual PrintServerWatcher* CreatePrintServerWatcher() = 0; - virtual PrinterWatcher* CreatePrinterWatcher( - const std::string& printer_name) = 0; - virtual JobSpooler* CreateJobSpooler() = 0; - - // Returns a true if connector should use CDD for capabilities and CJT as - // print ticket. - virtual bool UseCddAndCjt() = 0; - - // Returns a comma separated list of mimetypes for print data that are - // supported by this print system. The format of this string is the same as - // that used for the HTTP Accept: header. - virtual std::string GetSupportedMimeTypes() = 0; - - // Generate unique for proxy. - static std::string GenerateProxyId(); - - // Call this function to obtain printing system for specified print server. - // If print settings are NULL, default settings will be used. - // Return NULL if no print system available. - static scoped_refptr<PrintSystem> CreateInstance( - const base::DictionaryValue* print_system_settings); - - protected: - friend class base::RefCountedThreadSafe<PrintSystem>; - virtual ~PrintSystem(); -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_PRINT_SYSTEM_H_
diff --git a/chrome/service/cloud_print/print_system_cups.cc b/chrome/service/cloud_print/print_system_cups.cc deleted file mode 100644 index 0738fd2..0000000 --- a/chrome/service/cloud_print/print_system_cups.cc +++ /dev/null
@@ -1,861 +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 "chrome/service/cloud_print/print_system.h" - -#include <cups/cups.h> -#include <dlfcn.h> -#include <errno.h> -#include <pthread.h> -#include <stddef.h> - -#include <algorithm> -#include <map> -#include <memory> - -#include "base/bind.h" -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/hash/md5.h" -#include "base/json/json_reader.h" -#include "base/location.h" -#include "base/logging.h" -#include "base/rand_util.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_util.h" -#include "base/strings/utf_string_conversions.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/values.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/service/cloud_print/cloud_print_service_helpers.h" -#include "components/crash/core/common/crash_keys.h" -#include "printing/backend/cups_helper.h" -#include "printing/backend/print_backend.h" -#include "printing/backend/print_backend_consts.h" -#include "url/gurl.h" - -namespace { - -// Print system config options. -const char kCUPSPrintServerURLs[] = "print_server_urls"; -const char kCUPSUpdateTimeoutMs[] = "update_timeout_ms"; -const char kCUPSNotifyDelete[] = "notify_delete"; -const char kCUPSSupportedMimeTipes[] = "supported_mime_types"; - -// Default mime types supported by CUPS -// http://www.cups.org/articles.php?L205+TFAQ+Q -const char kCUPSDefaultSupportedTypes[] = - "application/pdf,application/postscript,image/jpeg,image/png,image/gif"; - -// Time interval to check for printer's updates. -constexpr base::TimeDelta kCheckForPrinterUpdatesTime = base::Minutes(5); - -// Job update timeout -constexpr base::TimeDelta kJobUpdateTimeout = base::Seconds(5); - -// Job id for dry run (it should not affect CUPS job ids, since 0 job-id is -// invalid in CUPS. -const int kDryRunJobId = 0; - -} // namespace - -namespace cloud_print { - -struct PrintServerInfoCUPS { - GURL url; - scoped_refptr<printing::PrintBackend> backend; - printing::PrinterList printers; - // CapsMap cache PPD until the next update and give a fast access to it by - // printer name. PPD request is relatively expensive and this should minimize - // the number of requests. - typedef std::map<std::string, printing::PrinterCapsAndDefaults> CapsMap; - CapsMap caps_cache; -}; - -class PrintSystemCUPS : public PrintSystem { - public: - explicit PrintSystemCUPS(const base::DictionaryValue* print_system_settings); - - // PrintSystem implementation. - PrintSystemResult Init() override; - PrintSystem::PrintSystemResult EnumeratePrinters( - printing::PrinterList* printer_list) override; - void GetPrinterCapsAndDefaults( - const std::string& printer_name, - PrinterCapsAndDefaultsCallback callback) override; - bool IsValidPrinter(const std::string& printer_name) override; - bool ValidatePrintTicket(const std::string& printer_name, - const std::string& print_ticket_data, - const std::string& print_ticket_mime_type) override; - bool GetJobDetails(const std::string& printer_name, - PlatformJobId job_id, - PrintJobDetails* job_details) override; - PrintSystem::PrintServerWatcher* CreatePrintServerWatcher() override; - PrintSystem::PrinterWatcher* CreatePrinterWatcher( - const std::string& printer_name) override; - PrintSystem::JobSpooler* CreateJobSpooler() override; - bool UseCddAndCjt() override; - std::string GetSupportedMimeTypes() override; - - // Helper functions. - PlatformJobId SpoolPrintJob(const std::string& print_ticket, - const base::FilePath& print_data_file_path, - const std::string& print_data_mime_type, - const std::string& printer_name, - const std::string& job_title, - const std::vector<std::string>& tags, - bool* dry_run); - bool GetPrinterInfo(const std::string& printer_name, - printing::PrinterBasicInfo* info); - bool ParsePrintTicket(const std::string& print_ticket, - std::map<std::string, std::string>* options); - - // Synchronous version of GetPrinterCapsAndDefaults. - bool GetPrinterCapsAndDefaults( - const std::string& printer_name, - printing::PrinterCapsAndDefaults* printer_info); - - base::TimeDelta GetUpdateTimeout() const { - return update_timeout_; - } - - bool NotifyDelete() const { - // Notify about deleted printers only when we - // fetched printers list without errors. - return notify_delete_ && printer_enum_succeeded_; - } - - private: - ~PrintSystemCUPS() override {} - - // Following functions are wrappers around corresponding CUPS functions. - // <functions>2() are called when print server is specified, and plain - // version in another case. There is an issue specifing CUPS_HTTP_DEFAULT - // in the <functions>2(), it does not work in CUPS prior to 1.4. - static int GetJobs(cups_job_t** jobs, - const GURL& url, - http_encryption_t encryption, - const char* name, - int myjobs, - int whichjobs); - static int PrintFile(const GURL& url, - http_encryption_t encryption, - const char* name, - const char* filename, - const char* title, - int num_options, - cups_option_t* options); - - void InitPrintBackends(const base::DictionaryValue* print_system_settings); - void AddPrintServer(const std::string& url); - - void UpdatePrinters(); - - // Full name contains print server url:port and printer name. Short name - // is the name of the printer in the CUPS server. - static std::string MakeFullPrinterName(const GURL& url, - const std::string& short_printer_name); - PrintServerInfoCUPS* FindServerByFullName( - const std::string& full_printer_name, std::string* short_printer_name); - - // Helper method to invoke a PrinterCapsAndDefaultsCallback. - static void RunCapsCallback( - PrinterCapsAndDefaultsCallback callback, - bool succeeded, - const std::string& printer_name, - const printing::PrinterCapsAndDefaults& printer_info); - - // Contains information about all print servers and backends this proxy is - // connected to. - std::vector<PrintServerInfoCUPS> print_servers_; - - base::TimeDelta update_timeout_ = kCheckForPrinterUpdatesTime; - bool initialized_ = false; - bool printer_enum_succeeded_ = false; - bool notify_delete_ = true; - http_encryption_t cups_encryption_ = HTTP_ENCRYPT_NEVER; - std::string supported_mime_types_ = kCUPSDefaultSupportedTypes; -}; - -class PrintServerWatcherCUPS - : public PrintSystem::PrintServerWatcher { - public: - explicit PrintServerWatcherCUPS(PrintSystemCUPS* print_system) - : print_system_(print_system) {} - - PrintServerWatcherCUPS(const PrintServerWatcherCUPS&) = delete; - PrintServerWatcherCUPS& operator=(const PrintServerWatcherCUPS&) = delete; - - // PrintSystem::PrintServerWatcher implementation. - bool StartWatching( - PrintSystem::PrintServerWatcher::Delegate* delegate) override { - delegate_ = delegate; - printers_hash_ = GetPrintersHash(); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&PrintServerWatcherCUPS::CheckForUpdates, this), - print_system_->GetUpdateTimeout()); - return true; - } - - bool StopWatching() override { - delegate_ = nullptr; - return true; - } - - void CheckForUpdates() { - if (!delegate_) - return; // Orphan call. We have been stopped already. - - VLOG(1) << "CP_CUPS: Checking for new printers"; - std::string new_hash = GetPrintersHash(); - if (printers_hash_ != new_hash) { - printers_hash_ = new_hash; - delegate_->OnPrinterAdded(); - } - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&PrintServerWatcherCUPS::CheckForUpdates, this), - print_system_->GetUpdateTimeout()); - } - - protected: - ~PrintServerWatcherCUPS() override { StopWatching(); } - - private: - std::string GetPrintersHash() { - printing::PrinterList printer_list; - print_system_->EnumeratePrinters(&printer_list); - - // Sort printer names. - std::vector<std::string> printers; - for (const auto& it : printer_list) - printers.push_back(it.printer_name); - std::sort(printers.begin(), printers.end()); - - std::string to_hash; - for (const auto& printer : printers) - to_hash += printer; - return base::MD5String(to_hash); - } - - scoped_refptr<PrintSystemCUPS> print_system_; - PrintSystem::PrintServerWatcher::Delegate* delegate_ = nullptr; - std::string printers_hash_; -}; - -class PrinterWatcherCUPS - : public PrintSystem::PrinterWatcher { - public: - PrinterWatcherCUPS(PrintSystemCUPS* print_system, - const std::string& printer_name) - : printer_name_(printer_name), - print_system_(print_system) { - } - - PrinterWatcherCUPS(const PrinterWatcherCUPS&) = delete; - PrinterWatcherCUPS& operator=(const PrinterWatcherCUPS&) = delete; - - // PrintSystem::PrinterWatcher implementation. - bool StartWatching(PrintSystem::PrinterWatcher::Delegate* delegate) override { - scoped_refptr<printing::PrintBackend> print_backend( - printing::PrintBackend::CreateInstanceForCloudPrint( - /*print_backend_settings=*/nullptr)); - crash_keys::ScopedPrinterInfo crash_key( - print_backend->GetPrinterDriverInfo(printer_name_)); - if (delegate_) - StopWatching(); - delegate_ = delegate; - settings_hash_ = GetSettingsHash(); - // Schedule next job status update. - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(&PrinterWatcherCUPS::JobStatusUpdate, this), - kJobUpdateTimeout); - // Schedule next printer check. - // TODO(gene): Randomize time for the next printer update. - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(&PrinterWatcherCUPS::PrinterUpdate, this), - print_system_->GetUpdateTimeout()); - return true; - } - - bool StopWatching() override { - delegate_ = nullptr; - return true; - } - - bool GetCurrentPrinterInfo( - printing::PrinterBasicInfo* printer_info) override { - DCHECK(printer_info); - return print_system_->GetPrinterInfo(printer_name_, printer_info); - } - - void JobStatusUpdate() { - if (!delegate_) - return; // Orphan call. We have been stopped already. - - // For CUPS proxy, we are going to fire OnJobChanged notification - // periodically. Higher level will check if there are any outstanding - // jobs for this printer and check their status. If printer has no - // outstanding jobs, OnJobChanged() will do nothing. - delegate_->OnJobChanged(); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(&PrinterWatcherCUPS::JobStatusUpdate, this), - kJobUpdateTimeout); - } - - void PrinterUpdate() { - if (!delegate_) - return; // Orphan call. We have been stopped already. - - VLOG(1) << "CP_CUPS: Checking for updates" - << ", printer name: " << printer_name_; - if (print_system_->NotifyDelete() && - !print_system_->IsValidPrinter(printer_name_)) { - delegate_->OnPrinterDeleted(); - VLOG(1) << "CP_CUPS: Printer deleted" - << ", printer name: " << printer_name_; - } else { - std::string new_hash = GetSettingsHash(); - if (settings_hash_ != new_hash) { - settings_hash_ = new_hash; - delegate_->OnPrinterChanged(); - VLOG(1) << "CP_CUPS: Printer configuration changed" - << ", printer name: " << printer_name_; - } - } - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(&PrinterWatcherCUPS::PrinterUpdate, this), - print_system_->GetUpdateTimeout()); - } - - protected: - ~PrinterWatcherCUPS() override { StopWatching(); } - - private: - std::string GetSettingsHash() { - printing::PrinterBasicInfo info; - if (!print_system_->GetPrinterInfo(printer_name_, &info)) - return std::string(); - - printing::PrinterCapsAndDefaults caps; - if (!print_system_->GetPrinterCapsAndDefaults(printer_name_, &caps)) - return std::string(); - - std::string to_hash(info.printer_name); - to_hash += info.printer_description; - for (const auto& it : info.options) { - to_hash += it.first; - to_hash += it.second; - } - - to_hash += caps.printer_capabilities; - to_hash += caps.caps_mime_type; - to_hash += caps.printer_defaults; - to_hash += caps.defaults_mime_type; - - return base::MD5String(to_hash); - } - const std::string printer_name_; - PrintSystem::PrinterWatcher::Delegate* delegate_ = nullptr; - scoped_refptr<PrintSystemCUPS> print_system_; - std::string settings_hash_; -}; - -class JobSpoolerCUPS : public PrintSystem::JobSpooler { - public: - explicit JobSpoolerCUPS(PrintSystemCUPS* print_system) - : print_system_(print_system) { - DCHECK(print_system_.get()); - } - - JobSpoolerCUPS(const JobSpoolerCUPS&) = delete; - JobSpoolerCUPS& operator=(const JobSpoolerCUPS&) = delete; - - // PrintSystem::JobSpooler implementation. - bool Spool(const std::string& print_ticket, - const std::string& print_ticket_mime_type, - const base::FilePath& print_data_file_path, - const std::string& print_data_mime_type, - const std::string& printer_name, - const std::string& job_title, - const std::vector<std::string>& tags, - JobSpooler::Delegate* delegate) override { - DCHECK(delegate); - bool dry_run = false; - int job_id = print_system_->SpoolPrintJob( - print_ticket, print_data_file_path, print_data_mime_type, - printer_name, job_title, tags, &dry_run); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&JobSpoolerCUPS::NotifyDelegate, delegate, - job_id, dry_run)); - return true; - } - - static void NotifyDelegate(JobSpooler::Delegate* delegate, - int job_id, bool dry_run) { - if (dry_run || job_id) - delegate->OnJobSpoolSucceeded(job_id); - else - delegate->OnJobSpoolFailed(); - } - - protected: - ~JobSpoolerCUPS() override {} - - private: - scoped_refptr<PrintSystemCUPS> print_system_; -}; - -PrintSystemCUPS::PrintSystemCUPS( - const base::DictionaryValue* print_system_settings) { - if (print_system_settings) { - int timeout; - if (print_system_settings->GetInteger(kCUPSUpdateTimeoutMs, &timeout)) - update_timeout_ = base::Milliseconds(timeout); - - int encryption; - if (print_system_settings->GetInteger(kCUPSEncryption, &encryption)) - cups_encryption_ = static_cast<http_encryption_t>(encryption); - - notify_delete_ = print_system_settings->FindBoolPath(kCUPSNotifyDelete) - .value_or(notify_delete_); - - std::string types; - if (print_system_settings->GetString(kCUPSSupportedMimeTipes, &types)) - supported_mime_types_ = types; - } - - InitPrintBackends(print_system_settings); -} - -void PrintSystemCUPS::InitPrintBackends( - const base::DictionaryValue* print_system_settings) { - if (print_system_settings) { - const base::Value* url_list = - print_system_settings->FindListKey(kCUPSPrintServerURLs); - if (url_list) { - for (const base::Value& val : url_list->GetList()) { - const std::string* print_server_url = val.GetIfString(); - if (print_server_url) - AddPrintServer(*print_server_url); - } - } - } - - // If server list is empty, use default print server. - if (print_servers_.empty()) - AddPrintServer(std::string()); -} - -void PrintSystemCUPS::AddPrintServer(const std::string& url) { - if (url.empty()) - LOG(WARNING) << "No print server specified. Using default print server."; - - // Get Print backend for the specific print server. - base::DictionaryValue backend_settings; - backend_settings.SetString(kCUPSPrintServerURL, url); - - // Make CUPS requests non-blocking. - backend_settings.SetString(kCUPSBlocking, kValueFalse); - - // Set encryption for backend. - backend_settings.SetInteger(kCUPSEncryption, cups_encryption_); - - PrintServerInfoCUPS print_server; - print_server.backend = - printing::PrintBackend::CreateInstanceForCloudPrint(&backend_settings); - print_server.url = GURL(url.c_str()); - - print_servers_.push_back(print_server); -} - -PrintSystem::PrintSystemResult PrintSystemCUPS::Init() { - UpdatePrinters(); - initialized_ = true; - return PrintSystemResult(true, std::string()); -} - -void PrintSystemCUPS::UpdatePrinters() { - printer_enum_succeeded_ = true; - for (auto& print_server : print_servers_) { - if (print_server.backend->EnumeratePrinters(&print_server.printers) != - printing::mojom::ResultCode::kSuccess) - printer_enum_succeeded_ = false; - print_server.caps_cache.clear(); - for (auto& printer : print_server.printers) { - printer.printer_name = - MakeFullPrinterName(print_server.url, printer.printer_name); - } - VLOG(1) << "CP_CUPS: Updated printers list" - << ", server: " << print_server.url - << ", # of printers: " << print_server.printers.size(); - } - - // Schedule next update. - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(&PrintSystemCUPS::UpdatePrinters, this), - GetUpdateTimeout()); -} - -PrintSystem::PrintSystemResult PrintSystemCUPS::EnumeratePrinters( - printing::PrinterList* printer_list) { - DCHECK(initialized_); - printer_list->clear(); - for (const auto& print_server : print_servers_) { - printer_list->insert(printer_list->end(), print_server.printers.begin(), - print_server.printers.end()); - } - VLOG(1) << "CP_CUPS: Total printers enumerated: " << printer_list->size(); - // TODO(sanjeevr): Maybe some day we want to report the actual server names - // for which the enumeration failed. - return PrintSystemResult(printer_enum_succeeded_, std::string()); -} - -void PrintSystemCUPS::GetPrinterCapsAndDefaults( - const std::string& printer_name, - PrinterCapsAndDefaultsCallback callback) { - printing::PrinterCapsAndDefaults printer_info; - bool succeeded = GetPrinterCapsAndDefaults(printer_name, &printer_info); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&PrintSystemCUPS::RunCapsCallback, std::move(callback), - succeeded, printer_name, printer_info)); -} - -bool PrintSystemCUPS::IsValidPrinter(const std::string& printer_name) { - return GetPrinterInfo(printer_name, nullptr); -} - -bool PrintSystemCUPS::ValidatePrintTicket( - const std::string& printer_name, - const std::string& print_ticket_data, - const std::string& print_ticket_mime_type) { - DCHECK(initialized_); - absl::optional<base::Value> ticket = - base::JSONReader::Read(print_ticket_data); - return ticket.has_value() && ticket.value().is_dict(); -} - -// Print ticket on linux is a JSON string containing only one dictionary. -bool PrintSystemCUPS::ParsePrintTicket( - const std::string& print_ticket, - std::map<std::string, std::string>* options) { - DCHECK(options); - absl::optional<base::Value> ticket = base::JSONReader::Read(print_ticket); - if (!ticket.has_value() || !ticket.value().is_dict()) - return false; - - options->clear(); - for (const auto it : ticket.value().DictItems()) { - if (it.second.is_string()) - (*options)[it.first] = it.second.GetString(); - } - return true; -} - -bool PrintSystemCUPS::GetPrinterCapsAndDefaults( - const std::string& printer_name, - printing::PrinterCapsAndDefaults* printer_info) { - DCHECK(initialized_); - std::string short_printer_name; - PrintServerInfoCUPS* server_info = - FindServerByFullName(printer_name, &short_printer_name); - if (!server_info) - return false; - - PrintServerInfoCUPS::CapsMap::const_iterator caps_it = - server_info->caps_cache.find(printer_name); - if (caps_it != server_info->caps_cache.end()) { - *printer_info = caps_it->second; - return true; - } - - // TODO(gene): Retry multiple times in case of error. - crash_keys::ScopedPrinterInfo crash_key( - server_info->backend->GetPrinterDriverInfo(short_printer_name)); - if (server_info->backend->GetPrinterCapsAndDefaults(short_printer_name, - printer_info) != - printing::mojom::ResultCode::kSuccess) { - return false; - } - - server_info->caps_cache[printer_name] = *printer_info; - return true; -} - -bool PrintSystemCUPS::GetJobDetails(const std::string& printer_name, - PlatformJobId job_id, - PrintJobDetails* job_details) { - DCHECK(initialized_); - DCHECK(job_details); - - std::string short_printer_name; - const PrintServerInfoCUPS* server_info = - FindServerByFullName(printer_name, &short_printer_name); - if (!server_info) - return false; - - crash_keys::ScopedPrinterInfo crash_key( - server_info->backend->GetPrinterDriverInfo(short_printer_name)); - cups_job_t* jobs = nullptr; - int num_jobs = GetJobs(&jobs, server_info->url, cups_encryption_, - short_printer_name.c_str(), 1, -1); - bool error = (num_jobs == 0) && (cupsLastError() > IPP_OK_EVENTS_COMPLETE); - if (error) { - VLOG(1) << "CP_CUPS: Error getting jobs from CUPS server" - << ", printer name:" << printer_name - << ", error: " << static_cast<int>(cupsLastError()); - return false; - } - - // Check if the request is for dummy dry run job. - // We check this after calling GetJobs API to see if this printer is actually - // accessible through CUPS. - if (job_id == kDryRunJobId) { - job_details->status = PRINT_JOB_STATUS_COMPLETED; - VLOG(1) << "CP_CUPS: Dry run job succeeded" - << ", printer name: " << printer_name; - return true; - } - - bool found = false; - for (int i = 0; i < num_jobs; i++) { - if (jobs[i].id == job_id) { - found = true; - switch (jobs[i].state) { - case IPP_JOB_PENDING : - case IPP_JOB_HELD : - case IPP_JOB_PROCESSING : - job_details->status = PRINT_JOB_STATUS_IN_PROGRESS; - break; - case IPP_JOB_STOPPED : - case IPP_JOB_CANCELLED : - case IPP_JOB_ABORTED : - job_details->status = PRINT_JOB_STATUS_ERROR; - break; - case IPP_JOB_COMPLETED : - job_details->status = PRINT_JOB_STATUS_COMPLETED; - break; - default: - job_details->status = PRINT_JOB_STATUS_INVALID; - } - job_details->platform_status_flags = jobs[i].state; - - // We don't have any details on the number of processed pages here. - break; - } - } - - if (found) { - VLOG(1) << "CP_CUPS: Job found" - << ", printer name: " << printer_name - << ", cups job id: " << job_id - << ", cups job status: " << job_details->status; - } else { - LOG(WARNING) << "CP_CUPS: Job not found" - << ", printer name: " << printer_name - << ", cups job id: " << job_id; - } - - cupsFreeJobs(num_jobs, jobs); - return found; -} - -bool PrintSystemCUPS::GetPrinterInfo(const std::string& printer_name, - printing::PrinterBasicInfo* info) { - DCHECK(initialized_); - if (info) { - VLOG(1) << "CP_CUPS: Getting printer info" - << ", printer name: " << printer_name; - } - - std::string short_printer_name; - const PrintServerInfoCUPS* server_info = - FindServerByFullName(printer_name, &short_printer_name); - if (!server_info) - return false; - - for (const auto& printer : server_info->printers) { - if (printer.printer_name == printer_name) { - if (info) - *info = printer; - return true; - } - } - return false; -} - -PrintSystem::PrintServerWatcher* PrintSystemCUPS::CreatePrintServerWatcher() { - DCHECK(initialized_); - return new PrintServerWatcherCUPS(this); -} - -PrintSystem::PrinterWatcher* PrintSystemCUPS::CreatePrinterWatcher( - const std::string& printer_name) { - DCHECK(initialized_); - DCHECK(!printer_name.empty()); - return new PrinterWatcherCUPS(this, printer_name); -} - -PrintSystem::JobSpooler* PrintSystemCUPS::CreateJobSpooler() { - DCHECK(initialized_); - return new JobSpoolerCUPS(this); -} - -bool PrintSystemCUPS::UseCddAndCjt() { - return false; -} - -std::string PrintSystemCUPS::GetSupportedMimeTypes() { - return supported_mime_types_; -} - -scoped_refptr<PrintSystem> PrintSystem::CreateInstance( - const base::DictionaryValue* print_system_settings) { - return base::MakeRefCounted<PrintSystemCUPS>(print_system_settings); -} - -// static -int PrintSystemCUPS::PrintFile(const GURL& url, - http_encryption_t encryption, - const char* name, - const char* filename, - const char* title, - int num_options, - cups_option_t* options) { - // Use default (local) print server. - if (url.is_empty()) - return cupsPrintFile(name, filename, title, num_options, options); - - printing::HttpConnectionCUPS http(url, encryption, /*blocking=*/false); - return cupsPrintFile2(http.http(), name, filename, title, num_options, - options); -} - -// static -int PrintSystemCUPS::GetJobs(cups_job_t** jobs, - const GURL& url, - http_encryption_t encryption, - const char* name, - int myjobs, - int whichjobs) { - // Use default (local) print server. - if (url.is_empty()) - return cupsGetJobs(jobs, name, myjobs, whichjobs); - - printing::HttpConnectionCUPS http(url, encryption, /*blocking=*/false); - return cupsGetJobs2(http.http(), jobs, name, myjobs, whichjobs); -} - -PlatformJobId PrintSystemCUPS::SpoolPrintJob( - const std::string& print_ticket, - const base::FilePath& print_data_file_path, - const std::string& print_data_mime_type, - const std::string& printer_name, - const std::string& job_title, - const std::vector<std::string>& tags, - bool* dry_run) { - DCHECK(initialized_); - VLOG(1) << "CP_CUPS: Spooling print job, printer name: " << printer_name; - - std::string short_printer_name; - const PrintServerInfoCUPS* server_info = - FindServerByFullName(printer_name, &short_printer_name); - if (!server_info) - return false; - - crash_keys::ScopedPrinterInfo crash_key( - server_info->backend->GetPrinterDriverInfo(printer_name)); - - // We need to store options as char* string for the duration of the - // cupsPrintFile2 call. We'll use map here to store options, since - // Dictionary value from JSON parser returns wchat_t. - std::map<std::string, std::string> options; - bool res = ParsePrintTicket(print_ticket, &options); - DCHECK(res); // If print ticket is invalid we still print using defaults. - - // Check if this is a dry run (test) job. - *dry_run = IsDryRunJob(tags); - if (*dry_run) { - VLOG(1) << "CP_CUPS: Dry run job spooled"; - return kDryRunJobId; - } - - std::vector<cups_option_t> cups_options; - for (const auto& it : options) { - cups_option_t opt; - opt.name = const_cast<char*>(it.first.c_str()); - opt.value = const_cast<char*>(it.second.c_str()); - cups_options.push_back(opt); - } - - int job_id = - PrintFile(server_info->url, cups_encryption_, short_printer_name.c_str(), - print_data_file_path.value().c_str(), job_title.c_str(), - cups_options.size(), cups_options.data()); - base::DeleteFile(print_data_file_path); - - // TODO(alexyu): Output printer id. - VLOG(1) << "CP_CUPS: Job spooled" - << ", printer name: " << printer_name - << ", cups job id: " << job_id; - - return job_id; -} - -// static -std::string PrintSystemCUPS::MakeFullPrinterName( - const GURL& url, const std::string& short_printer_name) { - std::string full_name; - full_name += "\\\\"; - full_name += url.host(); - if (!url.port().empty()) { - full_name += ":"; - full_name += url.port(); - } - full_name += "\\"; - full_name += short_printer_name; - return full_name; -} - -PrintServerInfoCUPS* PrintSystemCUPS::FindServerByFullName( - const std::string& full_printer_name, std::string* short_printer_name) { - size_t front = full_printer_name.find("\\\\"); - size_t separator = full_printer_name.find("\\", 2); - if (front == std::string::npos || separator == std::string::npos) { - LOG(WARNING) << "CP_CUPS: Invalid UNC" - << ", printer name: " << full_printer_name; - return nullptr; - } - std::string server = full_printer_name.substr(2, separator - 2); - - for (auto& print_server : print_servers_) { - std::string cur_server; - cur_server += print_server.url.host(); - if (!print_server.url.port().empty()) { - cur_server += ":"; - cur_server += print_server.url.port(); - } - if (cur_server == server) { - *short_printer_name = full_printer_name.substr(separator + 1); - return &print_server; - } - } - - LOG(WARNING) << "CP_CUPS: Server not found" - << ", printer name: " << full_printer_name; - return nullptr; -} - -void PrintSystemCUPS::RunCapsCallback( - PrinterCapsAndDefaultsCallback callback, - bool succeeded, - const std::string& printer_name, - const printing::PrinterCapsAndDefaults& printer_info) { - std::move(callback).Run(succeeded, printer_name, printer_info); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/print_system_win.cc b/chrome/service/cloud_print/print_system_win.cc deleted file mode 100644 index 77f3c99b..0000000 --- a/chrome/service/cloud_print/print_system_win.cc +++ /dev/null
@@ -1,774 +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 "chrome/service/cloud_print/print_system.h" - -#include <windows.h> -#include <winspool.h> -#include <wrl/client.h> - -#include <memory> -#include <tuple> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/files/file_util.h" -#include "base/json/json_writer.h" -#include "base/memory/free_deleter.h" -#include "base/memory/raw_ptr.h" -#include "base/strings/utf_string_conversions.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/win/object_watcher.h" -#include "base/win/scoped_bstr.h" -#include "base/win/scoped_hdc.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/service/cloud_print/cdd_conversion_win.h" -#include "chrome/service/service_process.h" -#include "chrome/service/service_utility_process_host.h" -#include "components/crash/core/common/crash_keys.h" -#include "components/printing/common/cloud_print_cdd_conversion.h" -#include "printing/backend/win_helper.h" -#include "printing/emf_win.h" -#include "printing/mojom/print.mojom.h" -#include "printing/page_range.h" -#include "printing/pdf_render_settings.h" -#include "printing/printing_utils.h" -#include "ui/gfx/geometry/rect.h" - -namespace cloud_print { - -namespace { - -bool CurrentlyOnServiceIOThread() { - return g_service_process->io_task_runner()->BelongsToCurrentThread(); -} - -bool PostIOThreadTask(const base::Location& from_here, base::OnceClosure task) { - return g_service_process->io_task_runner()->PostTask(from_here, - std::move(task)); -} - -class PrintSystemWatcherWin : public base::win::ObjectWatcher::Delegate { - public: - PrintSystemWatcherWin() {} - ~PrintSystemWatcherWin() override { Stop(); } - - class Delegate { - public: - virtual ~Delegate() {} - virtual void OnPrinterAdded() = 0; - virtual void OnPrinterDeleted() = 0; - virtual void OnPrinterChanged() = 0; - virtual void OnJobChanged() = 0; - }; - - bool Start(const std::string& printer_name, Delegate* delegate) { - scoped_refptr<printing::PrintBackend> print_backend( - printing::PrintBackend::CreateInstance(/*locale=*/std::string())); - printer_info_ = print_backend->GetPrinterDriverInfo(printer_name); - crash_keys::ScopedPrinterInfo crash_key(printer_info_); - - delegate_ = delegate; - // An empty printer name means watch the current server, we need to pass - // nullptr to OpenPrinterWithName(). - wchar_t* printer_name_to_use = nullptr; - std::wstring wide_printer_name; - if (!printer_name.empty()) { - wide_printer_name = base::UTF8ToWide(printer_name); - printer_name_to_use = const_cast<wchar_t*>(wide_printer_name.c_str()); - } - bool ret = false; - if (printer_.OpenPrinterWithName(printer_name_to_use)) { - printer_change_.Set(FindFirstPrinterChangeNotification( - printer_.Get(), PRINTER_CHANGE_PRINTER | PRINTER_CHANGE_JOB, 0, - nullptr)); - if (printer_change_.IsValid()) { - ret = watcher_.StartWatchingOnce(printer_change_.Get(), this); - } - } - if (!ret) { - Stop(); - } - return ret; - } - - bool Stop() { - watcher_.StopWatching(); - printer_.Close(); - printer_change_.Close(); - return true; - } - - // base::ObjectWatcher::Delegate method - void OnObjectSignaled(HANDLE object) override { - crash_keys::ScopedPrinterInfo crash_key(printer_info_); - DWORD change = 0; - FindNextPrinterChangeNotification(object, &change, nullptr, nullptr); - - if (change != ((PRINTER_CHANGE_PRINTER|PRINTER_CHANGE_JOB) & - (~PRINTER_CHANGE_FAILED_CONNECTION_PRINTER))) { - // For printer connections, we get spurious change notifications with - // all flags set except PRINTER_CHANGE_FAILED_CONNECTION_PRINTER. - // Ignore these. - if (change & PRINTER_CHANGE_ADD_PRINTER) { - delegate_->OnPrinterAdded(); - } else if (change & PRINTER_CHANGE_DELETE_PRINTER) { - delegate_->OnPrinterDeleted(); - } else if (change & PRINTER_CHANGE_SET_PRINTER) { - delegate_->OnPrinterChanged(); - } - if (change & PRINTER_CHANGE_JOB) { - delegate_->OnJobChanged(); - } - } - watcher_.StartWatchingOnce(printer_change_.Get(), this); - } - - bool GetCurrentPrinterInfo(printing::PrinterBasicInfo* printer_info) { - DCHECK(printer_info); - return InitBasicPrinterInfo(printer_.Get(), printer_info); - } - - private: - base::win::ObjectWatcher watcher_; - printing::ScopedPrinterHandle printer_; // The printer being watched - // Returned by FindFirstPrinterChangeNotifier. - printing::ScopedPrinterChangeHandle printer_change_; - raw_ptr<Delegate> delegate_ = nullptr; // Delegate to notify - std::string printer_info_; // For crash reporting. -}; - -class PrintServerWatcherWin - : public PrintSystem::PrintServerWatcher, - public PrintSystemWatcherWin::Delegate { - public: - PrintServerWatcherWin() {} - - PrintServerWatcherWin(const PrintServerWatcherWin&) = delete; - PrintServerWatcherWin& operator=(const PrintServerWatcherWin&) = delete; - - // PrintSystem::PrintServerWatcher implementation. - bool StartWatching( - PrintSystem::PrintServerWatcher::Delegate* delegate) override { - delegate_ = delegate; - return watcher_.Start(std::string(), this); - } - - bool StopWatching() override { - bool ret = watcher_.Stop(); - delegate_ = nullptr; - return ret; - } - - // PrintSystemWatcherWin::Delegate implementation. - void OnPrinterAdded() override { - delegate_->OnPrinterAdded(); - } - void OnPrinterDeleted() override {} - void OnPrinterChanged() override {} - void OnJobChanged() override {} - - protected: - ~PrintServerWatcherWin() override {} - - private: - raw_ptr<PrintSystem::PrintServerWatcher::Delegate> delegate_ = nullptr; - PrintSystemWatcherWin watcher_; -}; - -class PrinterWatcherWin - : public PrintSystem::PrinterWatcher, - public PrintSystemWatcherWin::Delegate { - public: - explicit PrinterWatcherWin(const std::string& printer_name) - : printer_name_(printer_name) {} - - PrinterWatcherWin(const PrinterWatcherWin&) = delete; - PrinterWatcherWin& operator=(const PrinterWatcherWin&) = delete; - - // PrintSystem::PrinterWatcher implementation. - bool StartWatching(PrintSystem::PrinterWatcher::Delegate* delegate) override { - delegate_ = delegate; - return watcher_.Start(printer_name_, this); - } - - bool StopWatching() override { - bool ret = watcher_.Stop(); - delegate_ = nullptr; - return ret; - } - - bool GetCurrentPrinterInfo( - printing::PrinterBasicInfo* printer_info) override { - return watcher_.GetCurrentPrinterInfo(printer_info); - } - - // PrintSystemWatcherWin::Delegate implementation. - void OnPrinterAdded() override { - NOTREACHED(); - } - void OnPrinterDeleted() override { - delegate_->OnPrinterDeleted(); - } - void OnPrinterChanged() override { - delegate_->OnPrinterChanged(); - } - void OnJobChanged() override { - delegate_->OnJobChanged(); - } - - protected: - ~PrinterWatcherWin() override {} - - private: - const std::string printer_name_; - raw_ptr<PrintSystem::PrinterWatcher::Delegate> delegate_ = nullptr; - PrintSystemWatcherWin watcher_; -}; - -class JobSpoolerWin : public PrintSystem::JobSpooler { - public: - JobSpoolerWin() : core_(base::MakeRefCounted<Core>()) {} - - JobSpoolerWin(const JobSpoolerWin&) = delete; - JobSpoolerWin& operator=(const JobSpoolerWin&) = delete; - - // PrintSystem::JobSpooler implementation. - bool Spool(const std::string& print_ticket, - const std::string& print_ticket_mime_type, - const base::FilePath& print_data_file_path, - const std::string& print_data_mime_type, - const std::string& printer_name, - const std::string& job_title, - const std::vector<std::string>& tags, - JobSpooler::Delegate* delegate) override { - // TODO(gene): add tags handling. - scoped_refptr<printing::PrintBackend> print_backend( - printing::PrintBackend::CreateInstance(/*locale=*/std::string())); - crash_keys::ScopedPrinterInfo crash_key( - print_backend->GetPrinterDriverInfo(printer_name)); - return core_->Spool(print_ticket, print_ticket_mime_type, - print_data_file_path, print_data_mime_type, - printer_name, job_title, delegate); - } - - protected: - ~JobSpoolerWin() override {} - - private: - // We use a Core class because we want a separate RefCountedThreadSafe - // implementation for ServiceUtilityProcessHost::Client. - class Core : public ServiceUtilityProcessHost::Client, - public base::win::ObjectWatcher::Delegate { - public: - Core() {} - - Core(const Core&) = delete; - Core& operator=(const Core&) = delete; - - bool Spool(const std::string& print_ticket, - const std::string& print_ticket_mime_type, - const base::FilePath& print_data_file_path, - const std::string& print_data_mime_type, - const std::string& printer_name, - const std::string& job_title, - JobSpooler::Delegate* delegate) { - if (delegate_) { - // We are already in the process of printing. - NOTREACHED(); - return false; - } - - // We only support PDF documents. - if (print_data_mime_type != kContentTypePDF || - print_ticket_mime_type != kContentTypeJSON) { - NOTREACHED(); - return false; - } - - std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode = - CjtToDevMode(base::UTF8ToWide(printer_name), print_ticket); - if (!dev_mode) { - NOTREACHED(); - return false; - } - - HDC dc = CreateDC(L"WINSPOOL", base::UTF8ToWide(printer_name).c_str(), - nullptr, dev_mode.get()); - if (!dc) { - NOTREACHED(); - return false; - } - DOCINFO di = {0}; - di.cbSize = sizeof(DOCINFO); - std::u16string doc_name = base::UTF8ToUTF16(job_title); - DCHECK(printing::SimplifyDocumentTitle(doc_name) == doc_name); - di.lpszDocName = base::as_wcstr(doc_name); - job_id_ = StartDoc(dc, &di); - if (job_id_ <= 0) - return false; - - printer_dc_.Set(dc); - saved_dc_ = SaveDC(printer_dc_.Get()); - delegate_ = delegate; - RenderPDFPages(print_data_file_path, - printing::IsDevModeWithColor(dev_mode.get())); - return true; - } - - void PreparePageDCForPrinting(HDC, float scale_factor) { - SetGraphicsMode(printer_dc_.Get(), GM_ADVANCED); - // Setup the matrix to translate and scale to the right place. Take in - // account the scale factor. - // Note that the printing output is relative to printable area of - // the page. That is 0,0 is offset by PHYSICALOFFSETX/Y from the page. - int offset_x = ::GetDeviceCaps(printer_dc_.Get(), PHYSICALOFFSETX); - int offset_y = ::GetDeviceCaps(printer_dc_.Get(), PHYSICALOFFSETY); - XFORM xform = {0}; - xform.eDx = static_cast<float>(-offset_x); - xform.eDy = static_cast<float>(-offset_y); - xform.eM11 = xform.eM22 = 1.0f / scale_factor; - SetWorldTransform(printer_dc_.Get(), &xform); - } - - // ServiceUtilityProcessHost::Client implementation. - void OnRenderPDFPagesToMetafilePageDone( - float scale_factor, - const printing::MetafilePlayer& emf) override { - PreparePageDCForPrinting(printer_dc_.Get(), scale_factor); - ::StartPage(printer_dc_.Get()); - emf.SafePlayback(printer_dc_.Get()); - ::EndPage(printer_dc_.Get()); - } - - // ServiceUtilityProcessHost::Client implementation. - void OnRenderPDFPagesToMetafileDone(bool success) override { - PrintJobDone(success); - } - - void OnChildDied() override { PrintJobDone(false); } - - // base::win::ObjectWatcher::Delegate implementation. - void OnObjectSignaled(HANDLE object) override { - DCHECK(xps_print_job_.Get()); - DCHECK(object == job_progress_event_.Get()); - ResetEvent(job_progress_event_.Get()); - if (!delegate_) - return; - XPS_JOB_STATUS job_status = {0}; - xps_print_job_->GetJobStatus(&job_status); - if ((job_status.completion == XPS_JOB_CANCELLED) || - (job_status.completion == XPS_JOB_FAILED)) { - delegate_->OnJobSpoolFailed(); - } else if (job_status.jobId || - (job_status.completion == XPS_JOB_COMPLETED)) { - // Note: In the case of the XPS document being printed to the - // Microsoft XPS Document Writer, it seems to skip spooling the job - // and goes to the completed state without ever assigning a job id. - delegate_->OnJobSpoolSucceeded(job_status.jobId); - } else { - job_progress_watcher_.StopWatching(); - job_progress_watcher_.StartWatchingOnce( - job_progress_event_.Get(), this); - } - } - - private: - ~Core() override {} - - // Helper class to allow PrintXPSDocument() to have multiple exits. - class PrintJobCanceler { - public: - explicit PrintJobCanceler(Microsoft::WRL::ComPtr<IXpsPrintJob>* job_ptr) - : job_ptr_(job_ptr) {} - - PrintJobCanceler(const PrintJobCanceler&) = delete; - PrintJobCanceler& operator=(const PrintJobCanceler&) = delete; - - ~PrintJobCanceler() { - if (job_ptr_ && job_ptr_->Get()) { - (*job_ptr_)->Cancel(); - job_ptr_->Reset(); - } - } - - void reset() { job_ptr_ = nullptr; } - - private: - raw_ptr<Microsoft::WRL::ComPtr<IXpsPrintJob>> job_ptr_; - }; - - void PrintJobDone(bool success) { - // If there is no delegate, then there is nothing pending to process. - if (!delegate_) - return; - RestoreDC(printer_dc_.Get(), saved_dc_); - EndDoc(printer_dc_.Get()); - if (success) { - delegate_->OnJobSpoolSucceeded(job_id_); - } else { - delegate_->OnJobSpoolFailed(); - } - delegate_ = nullptr; - } - - void RenderPDFPages(const base::FilePath& pdf_path, bool use_color) { - gfx::Size printer_dpi = - gfx::Size(::GetDeviceCaps(printer_dc_.Get(), LOGPIXELSX), - ::GetDeviceCaps(printer_dc_.Get(), LOGPIXELSY)); - int dc_width = GetDeviceCaps(printer_dc_.Get(), PHYSICALWIDTH); - int dc_height = GetDeviceCaps(printer_dc_.Get(), PHYSICALHEIGHT); - gfx::Rect render_area(0, 0, dc_width, dc_height); - PostIOThreadTask( - FROM_HERE, - base::BindOnce(&JobSpoolerWin::Core::RenderPDFPagesInSandbox, this, - pdf_path, render_area, printer_dpi, use_color, - base::ThreadTaskRunnerHandle::Get())); - } - - void RenderPDFPagesInSandbox( - const base::FilePath& pdf_path, - const gfx::Rect& render_area, - const gfx::Size& render_dpi, - bool use_color, - scoped_refptr<base::SingleThreadTaskRunner> client_task_runner) { - DCHECK(CurrentlyOnServiceIOThread()); - auto utility_host = std::make_unique<ServiceUtilityProcessHost>( - this, client_task_runner.get()); - // TODO(gene): For now we disabling autorotation for CloudPrinting. - // Landscape/Portrait setting is passed in the print ticket and - // server is generating portrait PDF always. - // We should enable autorotation once server will be able to generate - // PDF that matches paper size and orientation. - if (utility_host->StartRenderPDFPagesToMetafile( - pdf_path, printing::PdfRenderSettings( - render_area, gfx::Point(0, 0), render_dpi, - /*autorotate=*/false, use_color, - printing::PdfRenderSettings::Mode::NORMAL))) { - // The object will self-destruct when the child process dies. - std::ignore = utility_host.release(); - } else { - client_task_runner->PostTask( - FROM_HERE, base::BindOnce(&Core::PrintJobDone, this, false)); - } - } - - bool PrintXPSDocument(const std::string& printer_name, - const std::string& job_title, - const base::FilePath& xps_path, - const std::string& print_ticket) { - base::File xps_file(xps_path, base::File::FLAG_OPEN | - base::File::FLAG_READ | - base::File::FLAG_DELETE_ON_CLOSE); - if (!printing::XPSPrintModule::Init()) - return false; - - job_progress_event_.Set(CreateEvent(nullptr, TRUE, FALSE, nullptr)); - if (!job_progress_event_.Get()) - return false; - - PrintJobCanceler job_canceler(&xps_print_job_); - Microsoft::WRL::ComPtr<IXpsPrintJobStream> doc_stream; - Microsoft::WRL::ComPtr<IXpsPrintJobStream> print_ticket_stream; - if (FAILED(printing::XPSPrintModule::StartXpsPrintJob( - base::UTF8ToWide(printer_name).c_str(), - base::UTF8ToWide(job_title).c_str(), nullptr, - job_progress_event_.Get(), nullptr, nullptr, 0, &xps_print_job_, - &doc_stream, &print_ticket_stream))) { - return false; - } - - ULONG print_bytes_written = 0; - if (FAILED(print_ticket_stream->Write(print_ticket.c_str(), - print_ticket.length(), - &print_bytes_written))) { - return false; - } - DCHECK_EQ(print_ticket.length(), print_bytes_written); - if (FAILED(print_ticket_stream->Close())) - return false; - - int64_t file_size = xps_file.GetLength(); - if (file_size <= 0) - return false; - - std::unique_ptr<char[]> document_data(new char[file_size]); - int bytes_read = xps_file.Read(0, document_data.get(), file_size); - if (bytes_read != file_size) - return false; - - ULONG doc_bytes_written = 0; - if (FAILED(doc_stream->Write(document_data.get(), file_size, - &doc_bytes_written))) { - return false; - } - DCHECK_EQ(file_size, doc_bytes_written); - if (FAILED(doc_stream->Close())) - return false; - - job_progress_watcher_.StartWatchingOnce(job_progress_event_.Get(), this); - job_canceler.reset(); - return true; - } - - PlatformJobId job_id_ = -1; - raw_ptr<PrintSystem::JobSpooler::Delegate> delegate_ = nullptr; - int saved_dc_ = 0; - base::win::ScopedCreateDC printer_dc_; - base::win::ScopedHandle job_progress_event_; - base::win::ObjectWatcher job_progress_watcher_; - Microsoft::WRL::ComPtr<IXpsPrintJob> xps_print_job_; - }; - scoped_refptr<Core> core_; -}; - -// A helper class to handle the response from the utility process to the -// request to fetch printer capabilities and defaults. -class PrinterCapsHandler : public ServiceUtilityProcessHost::Client { - public: - PrinterCapsHandler(const std::string& printer_name, - PrintSystem::PrinterCapsAndDefaultsCallback callback) - : printer_name_(printer_name), callback_(std::move(callback)) {} - - // ServiceUtilityProcessHost::Client implementation. - void OnChildDied() override { - OnGetPrinterCapsAndDefaults(false, printer_name_, - printing::PrinterCapsAndDefaults()); - } - - void OnGetPrinterCapsAndDefaults( - bool succeeded, - const std::string& printer_name, - const printing::PrinterCapsAndDefaults& caps_and_defaults) override { - std::move(callback_).Run(succeeded, printer_name, caps_and_defaults); - Release(); - } - - void OnGetPrinterSemanticCapsAndDefaults( - bool succeeded, - const std::string& printer_name, - const printing::PrinterSemanticCapsAndDefaults& semantic_info) override { - printing::PrinterCapsAndDefaults printer_info; - if (succeeded) { - printer_info.caps_mime_type = kContentTypeJSON; - base::JSONWriter::WriteWithOptions( - PrinterSemanticCapsAndDefaultsToCdd(semantic_info), - base::JSONWriter::OPTIONS_PRETTY_PRINT, - &printer_info.printer_capabilities); - } - std::move(callback_).Run(succeeded, printer_name, printer_info); - Release(); - } - - void StartGetPrinterCapsAndDefaults() { - PostIOThreadTask( - FROM_HERE, - base::BindOnce(&PrinterCapsHandler::GetPrinterCapsAndDefaultsImpl, this, - base::ThreadTaskRunnerHandle::Get())); - } - - void StartGetPrinterSemanticCapsAndDefaults() { - PostIOThreadTask( - FROM_HERE, - base::BindOnce( - &PrinterCapsHandler::GetPrinterSemanticCapsAndDefaultsImpl, this, - base::ThreadTaskRunnerHandle::Get())); - } - - private: - ~PrinterCapsHandler() override {} - - void GetPrinterCapsAndDefaultsImpl( - scoped_refptr<base::SingleThreadTaskRunner> client_task_runner) { - DCHECK(CurrentlyOnServiceIOThread()); - auto utility_host = std::make_unique<ServiceUtilityProcessHost>( - this, client_task_runner.get()); - if (utility_host->StartGetPrinterCapsAndDefaults(printer_name_)) { - // The object will self-destruct when the child process dies. - std::ignore = utility_host.release(); - } else { - client_task_runner->PostTask( - FROM_HERE, base::BindOnce(&PrinterCapsHandler::OnChildDied, this)); - } - } - - void GetPrinterSemanticCapsAndDefaultsImpl( - scoped_refptr<base::SingleThreadTaskRunner> client_task_runner) { - DCHECK(CurrentlyOnServiceIOThread()); - auto utility_host = std::make_unique<ServiceUtilityProcessHost>( - this, client_task_runner.get()); - if (utility_host->StartGetPrinterSemanticCapsAndDefaults(printer_name_)) { - // The object will self-destruct when the child process dies. - std::ignore = utility_host.release(); - } else { - client_task_runner->PostTask( - FROM_HERE, base::BindOnce(&PrinterCapsHandler::OnChildDied, this)); - } - } - - const std::string printer_name_; - PrintSystem::PrinterCapsAndDefaultsCallback callback_; -}; - -class PrintSystemWin : public PrintSystem { - public: - PrintSystemWin(); - - PrintSystemWin(const PrintSystemWin&) = delete; - PrintSystemWin& operator=(const PrintSystemWin&) = delete; - - // PrintSystem implementation. - PrintSystemResult Init() override; - PrintSystem::PrintSystemResult EnumeratePrinters( - printing::PrinterList* printer_list) override; - void GetPrinterCapsAndDefaults( - const std::string& printer_name, - PrinterCapsAndDefaultsCallback callback) override; - bool IsValidPrinter(const std::string& printer_name) override; - bool ValidatePrintTicket( - const std::string& printer_name, - const std::string& print_ticket_data, - const std::string& print_ticket_data_mime_type) override; - bool GetJobDetails(const std::string& printer_name, - PlatformJobId job_id, - PrintJobDetails* job_details) override; - PrintSystem::PrintServerWatcher* CreatePrintServerWatcher() override; - PrintSystem::PrinterWatcher* CreatePrinterWatcher( - const std::string& printer_name) override; - PrintSystem::JobSpooler* CreateJobSpooler() override; - bool UseCddAndCjt() override; - std::string GetSupportedMimeTypes() override; - - private: - ~PrintSystemWin() override {} - - std::string GetPrinterDriverInfo(const std::string& printer_name) const; - - scoped_refptr<printing::PrintBackend> print_backend_; -}; - -PrintSystemWin::PrintSystemWin() - : print_backend_( - printing::PrintBackend::CreateInstance(/*locale=*/std::string())) {} - -PrintSystem::PrintSystemResult PrintSystemWin::Init() { - return PrintSystemResult(true, std::string()); -} - -PrintSystem::PrintSystemResult PrintSystemWin::EnumeratePrinters( - printing::PrinterList* printer_list) { - printing::mojom::ResultCode result = - print_backend_->EnumeratePrinters(printer_list); - return PrintSystemResult(result == printing::mojom::ResultCode::kSuccess, - std::string()); -} - -void PrintSystemWin::GetPrinterCapsAndDefaults( - const std::string& printer_name, - PrinterCapsAndDefaultsCallback callback) { - // Launch as child process to retrieve the capabilities and defaults because - // this involves invoking a printer driver DLL and crashes have been known to - // occur. - PrinterCapsHandler* handler = - new PrinterCapsHandler(printer_name, std::move(callback)); - handler->AddRef(); - handler->StartGetPrinterSemanticCapsAndDefaults(); -} - -bool PrintSystemWin::IsValidPrinter(const std::string& printer_name) { - return print_backend_->IsValidPrinter(printer_name); -} - -bool PrintSystemWin::ValidatePrintTicket( - const std::string& printer_name, - const std::string& print_ticket_data, - const std::string& print_ticket_data_mime_type) { - crash_keys::ScopedPrinterInfo crash_key(GetPrinterDriverInfo(printer_name)); - - return print_ticket_data_mime_type == kContentTypeJSON && - IsValidCjt(print_ticket_data); -} - -bool PrintSystemWin::GetJobDetails(const std::string& printer_name, - PlatformJobId job_id, - PrintJobDetails* job_details) { - crash_keys::ScopedPrinterInfo crash_key( - print_backend_->GetPrinterDriverInfo(printer_name)); - DCHECK(job_details); - printing::ScopedPrinterHandle printer_handle; - std::wstring wide_printer_name = base::UTF8ToWide(printer_name); - printer_handle.OpenPrinterWithName(wide_printer_name.c_str()); - DCHECK(printer_handle.IsValid()); - bool ret = false; - if (printer_handle.IsValid()) { - DWORD bytes_needed = 0; - GetJob(printer_handle.Get(), job_id, 1, nullptr, 0, &bytes_needed); - DWORD last_error = GetLastError(); - if (ERROR_INVALID_PARAMETER != last_error) { - // ERROR_INVALID_PARAMETER normally means that the job id is not valid. - DCHECK(last_error == ERROR_INSUFFICIENT_BUFFER); - std::unique_ptr<BYTE[]> job_info_buffer(new BYTE[bytes_needed]); - if (GetJob(printer_handle.Get(), job_id, 1, job_info_buffer.get(), - bytes_needed, &bytes_needed)) { - JOB_INFO_1* job_info = - reinterpret_cast<JOB_INFO_1*>(job_info_buffer.get()); - if (job_info->pStatus) { - base::WideToUTF8(job_info->pStatus, wcslen(job_info->pStatus), - &job_details->status_message); - } - job_details->platform_status_flags = job_info->Status; - if ((job_info->Status & JOB_STATUS_COMPLETE) || - (job_info->Status & JOB_STATUS_PRINTED)) { - job_details->status = PRINT_JOB_STATUS_COMPLETED; - } else if (job_info->Status & JOB_STATUS_ERROR) { - job_details->status = PRINT_JOB_STATUS_ERROR; - } else { - job_details->status = PRINT_JOB_STATUS_IN_PROGRESS; - } - job_details->total_pages = job_info->TotalPages; - job_details->pages_printed = job_info->PagesPrinted; - ret = true; - } - } - } - return ret; -} - -PrintSystem::PrintServerWatcher* -PrintSystemWin::CreatePrintServerWatcher() { - return new PrintServerWatcherWin(); -} - -PrintSystem::PrinterWatcher* PrintSystemWin::CreatePrinterWatcher( - const std::string& printer_name) { - DCHECK(!printer_name.empty()); - return new PrinterWatcherWin(printer_name); -} - -PrintSystem::JobSpooler* PrintSystemWin::CreateJobSpooler() { - return new JobSpoolerWin(); -} - -bool PrintSystemWin::UseCddAndCjt() { - return true; -} - -std::string PrintSystemWin::GetSupportedMimeTypes() { - return kContentTypePDF; -} - -std::string PrintSystemWin::GetPrinterDriverInfo( - const std::string& printer_name) const { - return print_backend_->GetPrinterDriverInfo(printer_name); -} - -} // namespace - -scoped_refptr<PrintSystem> PrintSystem::CreateInstance( - const base::DictionaryValue* print_system_settings) { - return base::MakeRefCounted<PrintSystemWin>(); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/printer_job_handler.cc b/chrome/service/cloud_print/printer_job_handler.cc deleted file mode 100644 index 5c5b051..0000000 --- a/chrome/service/cloud_print/printer_job_handler.cc +++ /dev/null
@@ -1,739 +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 "chrome/service/cloud_print/printer_job_handler.h" - -#include <utility> -#include <vector> - -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/files/file_util.h" -#include "base/hash/md5.h" -#include "base/json/json_reader.h" -#include "base/location.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/stringprintf.h" -#include "base/strings/utf_string_conversions.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/time/time.h" -#include "base/values.h" -#include "build/build_config.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/common/cloud_print/cloud_print_helpers.h" -#include "chrome/grit/generated_resources.h" -#include "chrome/service/cloud_print/cloud_print_service_helpers.h" -#include "chrome/service/cloud_print/job_status_updater.h" -#include "net/base/mime_util.h" -#include "net/http/http_response_headers.h" -#include "net/http/http_status_code.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "printing/printing_utils.h" -#include "ui/base/l10n/l10n_util.h" -#include "url/gurl.h" - -namespace cloud_print { - -namespace { - -enum PrinterJobHandlerEvent { - JOB_HANDLER_CHECK_FOR_JOBS, - JOB_HANDLER_START, - JOB_HANDLER_PENDING_TASK, - JOB_HANDLER_PRINTER_UPDATE, - JOB_HANDLER_JOB_CHECK, - JOB_HANDLER_JOB_STARTED, - JOB_HANDLER_VALID_TICKET, - JOB_HANDLER_DATA, - JOB_HANDLER_SET_IN_PROGRESS, - JOB_HANDLER_SET_START_PRINTING, - JOB_HANDLER_START_SPOOLING, - JOB_HANDLER_SPOOLED, - JOB_HANDLER_JOB_COMPLETED, - JOB_HANDLER_INVALID_TICKET, - JOB_HANDLER_INVALID_DATA, - JOB_HANDLER_MAX, -}; - -constexpr net::PartialNetworkTrafficAnnotationTag kPartialTrafficAnnotation = - net::DefinePartialNetworkTrafficAnnotation("printer_job_handler", - "cloud_print", - R"( - semantics { - description: - "Handles Cloud Print jobs for a particular printer, including " - "connecting to printer, sending jobs, updating jobs, and getting " - "status." - trigger: - "Automatic checking if printer is available, registering printer, " - "and starting or continuing a printer task." - data: - "Cloud Print server URL, printer id, job details." - })"); - -} // namespace - -PrinterJobHandler::PrinterInfoFromCloud::PrinterInfoFromCloud() = default; - -PrinterJobHandler::PrinterInfoFromCloud::PrinterInfoFromCloud( - const PrinterInfoFromCloud& other) = default; - -PrinterJobHandler::PrinterJobHandler( - const printing::PrinterBasicInfo& printer_info, - const PrinterInfoFromCloud& printer_info_cloud, - const GURL& cloud_print_server_url, - PrintSystem* print_system, - Delegate* delegate) - : print_system_(print_system), - printer_info_(printer_info), - printer_info_cloud_(printer_info_cloud), - cloud_print_server_url_(cloud_print_server_url), - delegate_(delegate), - print_thread_("Chrome_CloudPrintJobPrintThread"), - job_handler_task_runner_(base::ThreadTaskRunnerHandle::Get()) { - DCHECK(delegate_); -} - -bool PrinterJobHandler::Initialize() { - if (!print_system_->IsValidPrinter(printer_info_.printer_name)) - return false; - - printer_watcher_ = print_system_->CreatePrinterWatcher( - printer_info_.printer_name); - printer_watcher_->StartWatching(this); - CheckForJobs(kJobFetchReasonStartup); - return true; -} - -const std::string& PrinterJobHandler::GetPrinterName() const { - return printer_info_.printer_name; -} - -void PrinterJobHandler::CheckForJobs(const std::string& reason) { - VLOG(1) << "CP_CONNECTOR: Checking for jobs" - << ", printer id: " << printer_info_cloud_.printer_id - << ", reason: " << reason - << ", task in progress: " << task_in_progress_; - job_fetch_reason_ = reason; - job_check_pending_ = true; - if (!task_in_progress_) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Start, this)); - } -} - -void PrinterJobHandler::Shutdown() { - VLOG(1) << "CP_CONNECTOR: Shutting down printer job handler" - << ", printer id: " << printer_info_cloud_.printer_id; - Reset(); - shutting_down_ = true; - while (!job_status_updater_list_.empty()) { - // Calling Stop() will cause the OnJobCompleted to be called which will - // remove the updater object from the list. - job_status_updater_list_.front()->Stop(); - } -} - -// CloudPrintURLFetcher::Delegate implementation. -CloudPrintURLFetcher::ResponseAction PrinterJobHandler::HandleRawResponse( - const net::URLFetcher* source, - const GURL& url, - net::Error error, - int response_code, - const std::string& data) { - // 415 (Unsupported media type) error while fetching data from the server - // means data conversion error. Stop fetching process and mark job as error. - if (next_data_handler_ == (&PrinterJobHandler::HandlePrintDataResponse) && - response_code == net::HTTP_UNSUPPORTED_MEDIA_TYPE) { - VLOG(1) << "CP_CONNECTOR: Job failed (unsupported media type)"; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::JobFailed, this, - JOB_DOWNLOAD_FAILED)); - return CloudPrintURLFetcher::STOP_PROCESSING; - } - return CloudPrintURLFetcher::CONTINUE_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction PrinterJobHandler::HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) { - if (!next_data_handler_) - return CloudPrintURLFetcher::CONTINUE_PROCESSING; - return (this->*next_data_handler_)(source, url, data); -} - -CloudPrintURLFetcher::ResponseAction PrinterJobHandler::HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - DCHECK(next_json_data_handler_); - return (this->*next_json_data_handler_)(source, url, json_data, succeeded); -} - -// Mark the job fetch as failed and check if other jobs can be printed -void PrinterJobHandler::OnRequestGiveUp() { - if (job_queue_handler_.JobFetchFailed(job_details_.job_id_)) { - VLOG(1) << "CP_CONNECTOR: Job failed to load (scheduling retry)"; - CheckForJobs(kJobFetchReasonFailure); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Stop, this)); - } else { - VLOG(1) << "CP_CONNECTOR: Job failed (giving up after " << - kNumRetriesBeforeAbandonJob << " retries)"; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::JobFailed, this, - JOB_DOWNLOAD_FAILED)); - } -} - -CloudPrintURLFetcher::ResponseAction PrinterJobHandler::OnRequestAuthError() { - // We got an Auth error and have no idea how long it will take to refresh - // auth information (may take forever). We'll drop current request and - // propagate this error to the upper level. After auth issues will be - // resolved, GCP connector will restart. - OnAuthError(); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -std::string PrinterJobHandler::GetAuthHeaderValue() { - return GetCloudPrintAuthHeaderFromStore(); -} - -// JobStatusUpdater::Delegate implementation -bool PrinterJobHandler::OnJobCompleted(JobStatusUpdater* updater) { - job_queue_handler_.JobDone(job_details_.job_id_); - - for (auto it = job_status_updater_list_.begin(); - it != job_status_updater_list_.end(); ++it) { - if (it->get() == updater) { - job_status_updater_list_.erase(it); - return true; - } - } - return false; -} - -void PrinterJobHandler::OnAuthError() { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Stop, this)); - delegate_->OnAuthError(); -} - -void PrinterJobHandler::OnPrinterDeleted() { - delegate_->OnPrinterDeleted(printer_info_cloud_.printer_id); -} - -void PrinterJobHandler::OnPrinterChanged() { - printer_update_pending_ = true; - if (!task_in_progress_) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Start, this)); - } -} - -void PrinterJobHandler::OnJobChanged() { - // Some job on the printer changed. Loop through all our JobStatusUpdaters - // and have them check for updates. - for (const auto& it : job_status_updater_list_) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&JobStatusUpdater::UpdateStatus, it)); - } -} - -void PrinterJobHandler::OnJobSpoolSucceeded(const PlatformJobId& job_id) { - DCHECK(CurrentlyOnPrintThread()); - print_thread_.task_runner()->ReleaseSoon(FROM_HERE, std::move(job_spooler_)); - job_handler_task_runner_->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::JobSpooled, this, job_id)); -} - -void PrinterJobHandler::OnJobSpoolFailed() { - DCHECK(CurrentlyOnPrintThread()); - print_thread_.task_runner()->ReleaseSoon(FROM_HERE, std::move(job_spooler_)); - VLOG(1) << "CP_CONNECTOR: Job failed (spool failed)"; - job_handler_task_runner_->PostTask( - FROM_HERE, - base::BindOnce(&PrinterJobHandler::JobFailed, this, JOB_FAILED)); -} - -PrinterJobHandler::~PrinterJobHandler() { - if (printer_watcher_.get()) - printer_watcher_->StopWatching(); -} - -// Begin Response handlers -CloudPrintURLFetcher::ResponseAction -PrinterJobHandler::HandlePrinterUpdateResponse(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - VLOG(1) << "CP_CONNECTOR: Handling printer update response" - << ", printer id: " << printer_info_cloud_.printer_id; - // We are done here. Go to the Stop state - VLOG(1) << "CP_CONNECTOR: Stopping printer job handler" - << ", printer id: " << printer_info_cloud_.printer_id; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Stop, this)); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -PrinterJobHandler::HandleJobMetadataResponse(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - VLOG(1) << "CP_CONNECTOR: Handling job metadata response" - << ", printer id: " << printer_info_cloud_.printer_id; - if (succeeded) { - std::vector<JobDetails> jobs = - job_queue_handler_.GetJobsFromQueue(json_data); - if (!jobs.empty()) { - if (jobs[0].time_remaining_.is_zero()) { - job_details_ = jobs[0]; - SetNextDataHandler(&PrinterJobHandler::HandlePrintTicketResponse); - request_ = CloudPrintURLFetcher::Create(kPartialTrafficAnnotation); - GURL request_url; - if (print_system_->UseCddAndCjt()) { - request_url = GetUrlForJobCjt( - cloud_print_server_url_, job_details_.job_id_, job_fetch_reason_); - } else { - request_url = GURL(job_details_.print_ticket_url_); - } - request_->StartGetRequest(request_url, this, kJobDataMaxRetryCount); - return CloudPrintURLFetcher::STOP_PROCESSING; - } - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&PrinterJobHandler::RunScheduledJobCheck, this), - jobs[0].time_remaining_); - } - } - - // If no jobs are available, go to the Stop state. - VLOG(1) << "CP_CONNECTOR: Stopping printer job handler" - << ", printer id: " << printer_info_cloud_.printer_id; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Stop, this)); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -PrinterJobHandler::HandlePrintTicketResponse(const net::URLFetcher* source, - const GURL& url, - const std::string& data) { - VLOG(1) << "CP_CONNECTOR: Handling print ticket response" - << ", printer id: " << printer_info_cloud_.printer_id; - std::string mime_type; - source->GetResponseHeaders()->GetMimeType(&mime_type); - if (print_system_->ValidatePrintTicket(printer_info_.printer_name, data, - mime_type)) { - job_details_.print_ticket_ = data; - job_details_.print_ticket_mime_type_ = mime_type; - SetNextDataHandler(&PrinterJobHandler::HandlePrintDataResponse); - request_ = CloudPrintURLFetcher::Create(kPartialTrafficAnnotation); - request_->StartGetRequestWithAcceptHeader( - GURL(job_details_.print_data_url_), this, kJobDataMaxRetryCount, - print_system_->GetSupportedMimeTypes()); - } else { - // The print ticket was not valid. We are done here. - ValidatePrintTicketFailed(); - } - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -PrinterJobHandler::HandlePrintDataResponse(const net::URLFetcher* source, - const GURL& url, - const std::string& data) { - VLOG(1) << "CP_CONNECTOR: Handling print data response" - << ", printer id: " << printer_info_cloud_.printer_id; - if (base::CreateTemporaryFile(&job_details_.print_data_file_path_)) { - bool ret = base::WriteFile(job_details_.print_data_file_path_, data); - source->GetResponseHeaders()->GetMimeType( - &job_details_.print_data_mime_type_); - if (ret) { - UpdateJobStatus(PRINT_JOB_STATUS_IN_PROGRESS, JOB_SUCCESS); - return CloudPrintURLFetcher::STOP_PROCESSING; - } - } - - // If we are here, then there was an error in saving the print data, bail out - // here. - VLOG(1) << "CP_CONNECTOR: Error saving print data" - << ", printer id: " << printer_info_cloud_.printer_id; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&PrinterJobHandler::JobFailed, this, JOB_DOWNLOAD_FAILED)); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -PrinterJobHandler::HandleInProgressStatusUpdateResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - VLOG(1) << "CP_CONNECTOR: Handling success status update response" - << ", printer id: " << printer_info_cloud_.printer_id; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::StartPrinting, this)); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -CloudPrintURLFetcher::ResponseAction -PrinterJobHandler::HandleFailureStatusUpdateResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) { - VLOG(1) << "CP_CONNECTOR: Handling failure status update response" - << ", printer id: " << printer_info_cloud_.printer_id; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Stop, this)); - return CloudPrintURLFetcher::STOP_PROCESSING; -} - -void PrinterJobHandler::Start() { - VLOG(1) << "CP_CONNECTOR: Starting printer job handler" - << ", printer id: " << printer_info_cloud_.printer_id - << ", task in progress: " << task_in_progress_; - if (task_in_progress_) { - // Multiple Starts can get posted because of multiple notifications - // We want to ignore the other ones that happen when a task is in progress. - return; - } - Reset(); - if (shutting_down_) - return; - - // Check if we have work to do. - if (!HavePendingTasks()) - return; - - if (!task_in_progress_ && printer_update_pending_) { - printer_update_pending_ = false; - task_in_progress_ = UpdatePrinterInfo(); - VLOG(1) << "CP_CONNECTOR: Changed task in progress" - << ", printer id: " << printer_info_cloud_.printer_id - << ", task in progress: " << task_in_progress_; - } - if (!task_in_progress_ && job_check_pending_) { - task_in_progress_ = true; - VLOG(1) << "CP_CONNECTOR: Changed task in progress" - ", printer id: " - << printer_info_cloud_.printer_id - << ", task in progress: " << task_in_progress_; - job_check_pending_ = false; - // We need to fetch any pending jobs for this printer - SetNextJSONHandler(&PrinterJobHandler::HandleJobMetadataResponse); - request_ = CloudPrintURLFetcher::Create(kPartialTrafficAnnotation); - request_->StartGetRequest( - GetUrlForJobFetch(cloud_print_server_url_, - printer_info_cloud_.printer_id, job_fetch_reason_), - this, kCloudPrintAPIMaxRetryCount); - VLOG(1) << "CP_CONNECTOR: Last job fetch time" - << ", printer name: " << printer_info_.printer_name - << ", timestamp: " << base::TimeTicks::Now().since_origin(); - job_fetch_reason_.clear(); - } -} - -void PrinterJobHandler::Stop() { - VLOG(1) << "CP_CONNECTOR: Stopping printer job handler" - << ", printer id: " << printer_info_cloud_.printer_id; - task_in_progress_ = false; - VLOG(1) << "CP_CONNECTOR: Changed task in progress" - << ", printer id: " << printer_info_cloud_.printer_id - << ", task in progress: " << task_in_progress_; - Reset(); - if (HavePendingTasks()) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Start, this)); - } -} - -void PrinterJobHandler::StartPrinting() { - VLOG(1) << "CP_CONNECTOR: Starting printing" - << ", printer id: " << printer_info_cloud_.printer_id; - // We are done with the request object for now. - request_.reset(); - if (shutting_down_) - return; - -#if defined(OS_WIN) - print_thread_.init_com_with_mta(true); -#endif - if (print_thread_.Start()) { - print_thread_.task_runner()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::DoPrint, this, - job_details_, printer_info_.printer_name)); - } else { - VLOG(1) << "CP_CONNECTOR: Failed to start print thread" - << ", printer id: " << printer_info_cloud_.printer_id; - JobFailed(JOB_FAILED); - } -} - -void PrinterJobHandler::Reset() { - job_details_.Clear(); - request_.reset(); - print_thread_.Stop(); -} - -void PrinterJobHandler::UpdateJobStatus(PrintJobStatus status, - PrintJobError error) { - VLOG(1) << "CP_CONNECTOR: Updating job status" - << ", printer id: " << printer_info_cloud_.printer_id - << ", job id: " << job_details_.job_id_ - << ", job status: " << status; - if (shutting_down_) { - VLOG(1) << "CP_CONNECTOR: Job status update aborted (shutting down)" - << ", printer id: " << printer_info_cloud_.printer_id - << ", job id: " << job_details_.job_id_; - return; - } - if (job_details_.job_id_.empty()) { - VLOG(1) << "CP_CONNECTOR: Job status update aborted (empty job id)" - << ", printer id: " << printer_info_cloud_.printer_id; - return; - } - - if (error == JOB_SUCCESS) { - DCHECK_EQ(status, PRINT_JOB_STATUS_IN_PROGRESS); - SetNextJSONHandler( - &PrinterJobHandler::HandleInProgressStatusUpdateResponse); - } else { - SetNextJSONHandler( - &PrinterJobHandler::HandleFailureStatusUpdateResponse); - } - request_ = CloudPrintURLFetcher::Create(kPartialTrafficAnnotation); - request_->StartGetRequest( - GetUrlForJobStatusUpdate(cloud_print_server_url_, job_details_.job_id_, - status, error), - this, kCloudPrintAPIMaxRetryCount); -} - -void PrinterJobHandler::RunScheduledJobCheck() { - CheckForJobs(kJobFetchReasonRetry); -} - -void PrinterJobHandler::SetNextJSONHandler(JSONDataHandler handler) { - next_json_data_handler_ = handler; - next_data_handler_ = NULL; -} - -void PrinterJobHandler::SetNextDataHandler(DataHandler handler) { - next_data_handler_ = handler; - next_json_data_handler_ = NULL; -} - -void PrinterJobHandler::JobFailed(PrintJobError error) { - VLOG(1) << "CP_CONNECTOR: Job failed" - << ", printer id: " << printer_info_cloud_.printer_id - << ", job id: " << job_details_.job_id_ - << ", error: " << error; - if (!shutting_down_) { - UpdateJobStatus(PRINT_JOB_STATUS_ERROR, error); - // This job failed, but others may be pending. Schedule a check. - job_check_pending_ = true; - job_fetch_reason_ = kJobFetchReasonFailure; - } -} - -void PrinterJobHandler::JobSpooled(PlatformJobId local_job_id) { - VLOG(1) << "CP_CONNECTOR: Job spooled" - << ", printer id: " << printer_info_cloud_.printer_id - << ", job id: " << local_job_id; - if (shutting_down_) - return; - - local_job_id_ = local_job_id; - print_thread_.Stop(); - - // The print job has been spooled locally. We now need to create an object - // that monitors the status of the job and updates the server. - auto job_status_updater = base::MakeRefCounted<JobStatusUpdater>( - printer_info_.printer_name, job_details_.job_id_, local_job_id_, - cloud_print_server_url_, print_system_.get(), this, - kPartialTrafficAnnotation); - job_status_updater_list_.push_back(job_status_updater); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&JobStatusUpdater::UpdateStatus, job_status_updater)); - - CheckForJobs(kJobFetchReasonQueryMore); - - VLOG(1) << "CP_CONNECTOR: Stopping printer job handler" - << ", printer id: " << printer_info_cloud_.printer_id; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Stop, this)); -} - -bool PrinterJobHandler::UpdatePrinterInfo() { - if (!printer_watcher_.get()) { - LOG(ERROR) << "CP_CONNECTOR: Printer watcher is missing." - << " Check printer server url for printer id: " - << printer_info_cloud_.printer_id; - return false; - } - - VLOG(1) << "CP_CONNECTOR: Updating printer info" - << ", printer id: " << printer_info_cloud_.printer_id; - // We need to update the parts of the printer info that have changed - // (could be printer name, description, status or capabilities). - // First asynchronously fetch the capabilities. - printing::PrinterBasicInfo printer_info; - printer_watcher_->GetCurrentPrinterInfo(&printer_info); - - // Asynchronously fetch the printer caps and defaults. The story will - // continue in OnReceivePrinterCaps. - print_system_->GetPrinterCapsAndDefaults( - printer_info.printer_name, - base::BindOnce(&PrinterJobHandler::OnReceivePrinterCaps, - weak_ptr_factory_.GetWeakPtr())); - - // While we are waiting for the data, pretend we have work to do and return - // true. - return true; -} - -bool PrinterJobHandler::HavePendingTasks() { - return (job_check_pending_ || printer_update_pending_); -} - -void PrinterJobHandler::ValidatePrintTicketFailed() { - if (!shutting_down_) { - LOG(ERROR) << "CP_CONNECTOR: Failed validating print ticket" - << ", printer name: " << printer_info_.printer_name - << ", job id: " << job_details_.job_id_; - JobFailed(JOB_VALIDATE_TICKET_FAILED); - } -} - -void PrinterJobHandler::OnReceivePrinterCaps( - bool succeeded, - const std::string& printer_name, - const printing::PrinterCapsAndDefaults& caps_and_defaults) { - printing::PrinterBasicInfo printer_info; - if (printer_watcher_.get()) - printer_watcher_->GetCurrentPrinterInfo(&printer_info); - - std::string post_data; - std::string mime_boundary = net::GenerateMimeMultipartBoundary(); - - if (succeeded) { - std::string caps_hash = - base::MD5String(caps_and_defaults.printer_capabilities); - if (caps_hash != printer_info_cloud_.caps_hash) { - // Hashes don't match, we need to upload new capabilities (the defaults - // go for free along with the capabilities) - printer_info_cloud_.caps_hash = caps_hash; - if (caps_and_defaults.caps_mime_type == kContentTypeJSON) { - DCHECK(print_system_->UseCddAndCjt()); - net::AddMultipartValueForUpload(kUseCDD, "true", mime_boundary, - std::string(), &post_data); - } - net::AddMultipartValueForUpload(kPrinterCapsValue, - caps_and_defaults.printer_capabilities, mime_boundary, - caps_and_defaults.caps_mime_type, &post_data); - net::AddMultipartValueForUpload(kPrinterDefaultsValue, - caps_and_defaults.printer_defaults, mime_boundary, - caps_and_defaults.defaults_mime_type, &post_data); - net::AddMultipartValueForUpload(kPrinterCapsHashValue, - caps_hash, mime_boundary, std::string(), &post_data); - } - } else { - LOG(ERROR) << "Failed to get printer caps and defaults" - << ", printer name: " << printer_name; - } - - std::string tags_hash = GetHashOfPrinterInfo(printer_info); - if (tags_hash != printer_info_cloud_.tags_hash) { - printer_info_cloud_.tags_hash = tags_hash; - post_data += GetPostDataForPrinterInfo(printer_info, mime_boundary); - // Remove all the existing proxy tags. - std::string cp_tag_wildcard(kCloudPrintServiceProxyTagPrefix); - cp_tag_wildcard += ".*"; - net::AddMultipartValueForUpload(kPrinterRemoveTagValue, - cp_tag_wildcard, mime_boundary, std::string(), &post_data); - } - - if (printer_info.printer_name != printer_info_.printer_name) { - net::AddMultipartValueForUpload(kPrinterNameValue, - printer_info.printer_name, mime_boundary, std::string(), &post_data); - } - if (printer_info.printer_description != printer_info_.printer_description) { - net::AddMultipartValueForUpload(kPrinterDescValue, - printer_info.printer_description, mime_boundary, - std::string(), &post_data); - } - if (printer_info.printer_status != printer_info_.printer_status) { - net::AddMultipartValueForUpload( - kPrinterStatusValue, base::NumberToString(printer_info.printer_status), - mime_boundary, std::string(), &post_data); - } - - // Add local_settings with a current XMPP ping interval. - if (printer_info_cloud_.pending_xmpp_timeout != 0) { - DCHECK(kMinXmppPingTimeoutSecs <= printer_info_cloud_.pending_xmpp_timeout); - net::AddMultipartValueForUpload(kPrinterLocalSettingsValue, - base::StringPrintf(kUpdateLocalSettingsXmppPingFormat, - printer_info_cloud_.current_xmpp_timeout), - mime_boundary, std::string(), &post_data); - } - - printer_info_ = printer_info; - if (!post_data.empty()) { - net::AddMultipartFinalDelimiterForUpload(mime_boundary, &post_data); - std::string mime_type("multipart/form-data; boundary="); - mime_type += mime_boundary; - SetNextJSONHandler(&PrinterJobHandler::HandlePrinterUpdateResponse); - request_ = CloudPrintURLFetcher::Create(kPartialTrafficAnnotation); - request_->StartPostRequest( - GetUrlForPrinterUpdate(cloud_print_server_url_, - printer_info_cloud_.printer_id), - this, kCloudPrintAPIMaxRetryCount, mime_type, post_data); - } else { - // We are done here. Go to the Stop state - VLOG(1) << "CP_CONNECTOR: Stopping printer job handler" - << ", printer name: " << printer_name; - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&PrinterJobHandler::Stop, this)); - } -} - -void PrinterJobHandler::DoPrint(const JobDetails& job_details, - const std::string& printer_name) { - DCHECK(CurrentlyOnPrintThread()); - job_spooler_ = print_system_->CreateJobSpooler(); - DCHECK(job_spooler_.get()); - - std::u16string document_name = - job_details.job_title_.empty() - ? l10n_util::GetStringUTF16(IDS_DEFAULT_PRINT_DOCUMENT_TITLE) - : base::UTF8ToUTF16(job_details.job_title_); - - document_name = printing::FormatDocumentTitleWithOwner( - base::UTF8ToUTF16(job_details.job_owner_), document_name); - - if (!job_spooler_->Spool(job_details.print_ticket_, - job_details.print_ticket_mime_type_, - job_details.print_data_file_path_, - job_details.print_data_mime_type_, - printer_name, - base::UTF16ToUTF8(document_name), - job_details.tags_, - this)) { - OnJobSpoolFailed(); - } -} - -bool PrinterJobHandler::CurrentlyOnPrintThread() const { - return print_thread_.task_runner()->BelongsToCurrentThread(); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/printer_job_handler.h b/chrome/service/cloud_print/printer_job_handler.h deleted file mode 100644 index 009d7ec..0000000 --- a/chrome/service/cloud_print/printer_job_handler.h +++ /dev/null
@@ -1,302 +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 CHROME_SERVICE_CLOUD_PRINT_PRINTER_JOB_HANDLER_H_ -#define CHROME_SERVICE_CLOUD_PRINT_PRINTER_JOB_HANDLER_H_ - -#include <list> -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread.h" -#include "chrome/service/cloud_print/cloud_print_url_fetcher.h" -#include "chrome/service/cloud_print/job_status_updater.h" -#include "chrome/service/cloud_print/printer_job_queue_handler.h" -#include "net/base/net_errors.h" -#include "printing/backend/print_backend.h" -#include "url/gurl.h" - -class URLFetcher; - -// A class that handles cloud print jobs for a particular printer. This class -// imlements a state machine that transitions from Start to various states. The -// various states are shown in the below diagram. -// the status on the server. - -// Start --> No pending tasks --> Done -// | -// | -// | Have Pending tasks -// | -// | -// | ---Update Pending-----> -// | | -// | | -// | | -// | Update Printer info on server -// | Go to Stop -// | -// | Job Available -// | -// | -// Fetch Next Job Metadata -// Fetch Print Ticket -// Fetch Print Data -// Spool Print Job -// Create Job StatusUpdater for job -// Mark job as "in progress" on server -// (On any unrecoverable error in any of the above steps go to Stop) -// Go to Stop -// | -// | -// | -// | -// | -// | -// | -// Stop -// (If there are pending tasks go back to Start) - -namespace cloud_print { - -class PrinterJobHandler : public base::RefCountedThreadSafe<PrinterJobHandler>, - public CloudPrintURLFetcher::Delegate, - public JobStatusUpdater::Delegate, - public PrintSystem::PrinterWatcher::Delegate, - public PrintSystem::JobSpooler::Delegate { - public: - class Delegate { - public: - // Notify delegate about authentication error. - virtual void OnAuthError() = 0; - // Notify delegate that printer has been deleted. - virtual void OnPrinterDeleted(const std::string& printer_name) = 0; - - protected: - virtual ~Delegate() {} - }; - - struct PrinterInfoFromCloud { - std::string printer_id; - std::string caps_hash; - std::string tags_hash; - int current_xmpp_timeout = 0; - int pending_xmpp_timeout = 0; - - PrinterInfoFromCloud(); - PrinterInfoFromCloud(const PrinterInfoFromCloud& other); - }; - - PrinterJobHandler(const printing::PrinterBasicInfo& printer_info, - const PrinterInfoFromCloud& printer_info_from_server, - const GURL& cloud_print_server_url, - PrintSystem* print_system, - Delegate* delegate); - - PrinterJobHandler(const PrinterJobHandler&) = delete; - PrinterJobHandler& operator=(const PrinterJobHandler&) = delete; - - bool Initialize(); - - const std::string& GetPrinterName() const; - - // Requests a job check. |reason| is the reason for fetching the job. Used - // for logging and diagnostc purposes. - void CheckForJobs(const std::string& reason); - - // Shutdown everything (the process is exiting). - void Shutdown(); - - // CloudPrintURLFetcher::Delegate implementation. - CloudPrintURLFetcher::ResponseAction HandleRawResponse( - const net::URLFetcher* source, - const GURL& url, - net::Error error, - int response_code, - const std::string& data) override; - CloudPrintURLFetcher::ResponseAction HandleRawData( - const net::URLFetcher* source, - const GURL& url, - const std::string& data) override; - CloudPrintURLFetcher::ResponseAction HandleJSONData( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded) override; - void OnRequestGiveUp() override; - CloudPrintURLFetcher::ResponseAction OnRequestAuthError() override; - std::string GetAuthHeaderValue() override; - - // JobStatusUpdater::Delegate implementation - bool OnJobCompleted(JobStatusUpdater* updater) override; - void OnAuthError() override; - - // PrinterWatcherDelegate implementation - void OnPrinterDeleted() override; - void OnPrinterChanged() override; - void OnJobChanged() override; - - // JobSpoolerDelegate implementation. - // Called on |print_thread_|. - void OnJobSpoolSucceeded(const PlatformJobId& job_id) override; - void OnJobSpoolFailed() override; - - private: - friend class base::RefCountedThreadSafe<PrinterJobHandler>; - - enum PrintJobError { - JOB_SUCCESS, - JOB_DOWNLOAD_FAILED, - JOB_VALIDATE_TICKET_FAILED, - JOB_FAILED, - JOB_MAX, - }; - - // Prototype for a JSON data handler. - typedef CloudPrintURLFetcher::ResponseAction ( - PrinterJobHandler::*JSONDataHandler)(const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - // Prototype for a data handler. - typedef CloudPrintURLFetcher::ResponseAction ( - PrinterJobHandler::*DataHandler)(const net::URLFetcher* source, - const GURL& url, - const std::string& data); - - ~PrinterJobHandler() override; - - // Begin request handlers for each state in the state machine - CloudPrintURLFetcher::ResponseAction HandlePrinterUpdateResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - - CloudPrintURLFetcher::ResponseAction HandleJobMetadataResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - - CloudPrintURLFetcher::ResponseAction HandlePrintTicketResponse( - const net::URLFetcher* source, - const GURL& url, - const std::string& data); - - CloudPrintURLFetcher::ResponseAction HandlePrintDataResponse( - const net::URLFetcher* source, - const GURL& url, - const std::string& data); - - CloudPrintURLFetcher::ResponseAction HandleInProgressStatusUpdateResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - - CloudPrintURLFetcher::ResponseAction HandleFailureStatusUpdateResponse( - const net::URLFetcher* source, - const GURL& url, - const base::Value& json_data, - bool succeeded); - // End request handlers for each state in the state machine - - // Start the state machine. Based on the flags set this could mean updating - // printer information, deleting the printer from the server or looking for - // new print jobs - void Start(); - - // End the state machine. If there are pending tasks, we will post a Start - // again. - void Stop(); - - void StartPrinting(); - void Reset(); - void UpdateJobStatus(PrintJobStatus status, PrintJobError error); - - // Run a job check as the result of a scheduled check - void RunScheduledJobCheck(); - - // Sets the next response handler to the specified JSON data handler. - void SetNextJSONHandler(JSONDataHandler handler); - // Sets the next response handler to the specified data handler. - void SetNextDataHandler(DataHandler handler); - - void JobFailed(PrintJobError error); - void JobSpooled(PlatformJobId local_job_id); - // Returns false if printer info is up to date and no updating is needed. - bool UpdatePrinterInfo(); - bool HavePendingTasks(); - void ValidatePrintTicketFailed(); - - // Callback that asynchronously receives printer caps and defaults. - void OnReceivePrinterCaps( - bool succeeded, - const std::string& printer_name, - const printing::PrinterCapsAndDefaults& caps_and_defaults); - - // Called on |print_thread_|. It is not safe to access any members other than - // |job_handler_task_runner_|, |job_spooler_| and |print_system_|. - void DoPrint(const JobDetails& job_details, - const std::string& printer_name); - - bool CurrentlyOnPrintThread() const; - - scoped_refptr<CloudPrintURLFetcher> request_; - scoped_refptr<PrintSystem> print_system_; - printing::PrinterBasicInfo printer_info_; - PrinterInfoFromCloud printer_info_cloud_; - const GURL cloud_print_server_url_; - const std::string print_data_url_; - JobDetails job_details_; - const raw_ptr<Delegate> delegate_; - - // Once the job has been spooled to the local spooler, this specifies the - // job id of the job on the local spooler. - PlatformJobId local_job_id_ = -1; - - // The next response handler can either be a JSONDataHandler or a - // DataHandler (depending on the current request being made). - JSONDataHandler next_json_data_handler_ = nullptr; - DataHandler next_data_handler_ = nullptr; - // The thread on which the actual print operation happens - base::Thread print_thread_; - // The Job spooler object. This is only non-NULL during a print operation. - // It lives and dies on |print_thread_| - scoped_refptr<PrintSystem::JobSpooler> job_spooler_; - // The task runner representing the thread on which this object was created. - // Used by the print thread. - scoped_refptr<base::SingleThreadTaskRunner> job_handler_task_runner_; - - // There may be pending tasks in the message queue when Shutdown is called. - // We set this flag so as to do nothing in those tasks. - bool shutting_down_ = false; - - // A string indicating the reason we are fetching jobs from the server - // (used to specify the reason in the fetch URL). - std::string job_fetch_reason_; - // Flags that specify various pending server updates - bool job_check_pending_ = false; - bool printer_update_pending_ = true; - - // Some task in the state machine is in progress. - bool task_in_progress_ = false; - scoped_refptr<PrintSystem::PrinterWatcher> printer_watcher_; - - using JobStatusUpdaterList = std::list<scoped_refptr<JobStatusUpdater>>; - JobStatusUpdaterList job_status_updater_list_; - - // Manages parsing the job queue - PrinterJobQueueHandler job_queue_handler_; - - base::WeakPtrFactory<PrinterJobHandler> weak_ptr_factory_{this}; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_PRINTER_JOB_HANDLER_H_
diff --git a/chrome/service/cloud_print/printer_job_handler_unittest.cc b/chrome/service/cloud_print/printer_job_handler_unittest.cc deleted file mode 100644 index 4fc2c61b..0000000 --- a/chrome/service/cloud_print/printer_job_handler_unittest.cc +++ /dev/null
@@ -1,791 +0,0 @@ -// Copyright (c) 2013 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/service/cloud_print/printer_job_handler.h" - -#include <memory> - -#include "base/bind.h" -#include "base/files/file_path.h" -#include "base/hash/md5.h" -#include "base/location.h" -#include "base/memory/ref_counted.h" -#include "base/run_loop.h" -#include "base/strings/stringprintf.h" -#include "base/task/single_thread_task_runner.h" -#include "base/test/bind.h" -#include "base/test/scoped_run_loop_timeout.h" -#include "base/test/task_environment.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "chrome/service/cloud_print/cloud_print_service_helpers.h" -#include "chrome/service/cloud_print/cloud_print_token_store.h" -#include "chrome/service/cloud_print/print_system.h" -#include "net/http/http_response_headers.h" -#include "net/http/http_status_code.h" -#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "net/url_request/test_url_fetcher_factory.h" -#include "net/url_request/url_request_test_util.h" -#include "printing/backend/print_backend.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using ::testing::AtLeast; -using ::testing::DoAll; -using ::testing::Exactly; -using ::testing::Invoke; -using ::testing::InvokeWithoutArgs; -using ::testing::NiceMock; -using ::testing::Return; -using ::testing::SaveArg; -using ::testing::Sequence; -using ::testing::SetArgPointee; -using ::testing::StrictMock; -using ::testing::_; - -namespace cloud_print { - -namespace { - -using base::StringPrintf; - -const char kExampleCloudPrintServerURL[] = "https://www.google.com/cloudprint/"; - -const char kExamplePrintTicket[] = "{\"MediaType\":\"plain\"," - "\"Resolution\":\"300x300dpi\",\"PageRegion\":\"Letter\"," - "\"InputSlot\":\"auto\",\"PageSize\":\"Letter\",\"EconoMode\":\"off\"}"; - - -// The fillowing constants will all be constructed with StringPrintf. The -// following types of parameters are possible: -// job number(int): ID # of job from given job list. All job IDs follow the -// format __example_job_idN for some N. -// fetch reason(string): Fetch reason used by the code. The job list URL -// requested by PrinterJobHandler has an extra parameter that signifies when -// the request was triggered. -// status string(string): Status of print job, one of IN_PROGRESS, DONE or ERROR -// job object list(string/JSON formatted): a comma-separated list of job objects - -// StringPrintf parameters: job number, job number, job number, job number -const char kExampleJobObject[] = "{" -" \"tags\": [" -" \"^own\"" -" ]," -" \"printerName\": \"Example Printer\"," -" \"status\": \"QUEUED\"," -" \"ownerId\": \"sampleuser@gmail.com\"," -" \"ticketUrl\": \"https://www.google.com/cloudprint/ticket?exampleURI%d\"," -" \"printerid\": \"__example_printer_id\"," -" \"printerType\": \"GOOGLE\"," -" \"contentType\": \"text/html\"," -" \"fileUrl\": \"https://www.google.com/cloudprint/download?exampleURI%d\"," -" \"id\": \"__example_job_id%d\"," -" \"message\": \"\"," -" \"title\": \"Example Job %d\"," -" \"errorCode\": \"\"," -" \"numberOfPages\": 3" -" }"; - -// StringPrintf parameters: job object list -const char kExampleJobListResponse[] = "{" -" \"success\": true," -" \"jobs\": [" -" %s" -" ]," -" \"xsrf_token\": \"AIp06DjUd3AV6BO0aujB9NvM2a9ZbogxOQ:1360021066932\"," -" \"request\": {" -" \"time\": \"0\"," -" \"users\": [" -" \"sampleuser@gmail.com\"" -" ]," -" \"params\": {" -" \"printerid\": [" -" \"__example_printer_id\"" -" ]" -" }," -" \"user\": \"sampleuser@gmail.com\"" -" }" -"}"; - - -// StringPrintf parameters: job number -const char kExampleJobID[] = "__example_job_id%d"; - -// StringPrintf parameters: job number -const char kExamplePrintTicketURI[] = - "https://www.google.com/cloudprint/ticket?exampleURI%d"; - -// StringPrintf parameters: job number -const char kExamplePrintDownloadURI[] = - "https://www.google.com/cloudprint/download?exampleURI%d"; - -// StringPrintf parameters: job number -const char kExampleUpdateDoneURI[] = - "https://www.google.com/cloudprint/control?jobid=__example_job_id%d" - "&status=DONE&code=0&message=&numpages=0&pagesprinted=0"; - -// StringPrintf parameters: job number -const char kExampleUpdateErrorURI[] = - "https://www.google.com/cloudprint/control?jobid=__example_job_id%d" - "&status=ERROR"; - -// StringPrintf parameters: fetch reason -const char kExamplePrinterJobListURI[] = - "https://www.google.com/cloudprint/fetch" - "?printerid=__example_printer_id&deb=%s"; - -// StringPrintf parameters: status string, job number, status string (repeat) -const char kExampleControlResponse[] = "{" -" \"success\": true," -" \"message\": \"Print job updated successfully.\"," -" \"xsrf_token\": \"AIp06DjKgbfGalbqzj23V1bU6i-vtR2B4w:1360023068789\"," -" \"request\": {" -" \"time\": \"0\"," -" \"users\": [" -" \"sampleuser@gmail.com\"" -" ]," -" \"params\": {" -" \"xsrf\": [" -" \"AIp06DgeGIETs42Cj28QWmxGPWVDiaXwVQ:1360023041852\"" -" ]," -" \"status\": [" -" \"%s\"" -" ]," -" \"jobid\": [" -" \"__example_job_id%d\"" -" ]" -" }," -" \"user\": \"sampleuser@gmail.com\"" -" }," -" \"job\": {" -" \"tags\": [" -" \"^own\"" -" ]," -" \"printerName\": \"Example Printer\"," -" \"status\": \"%s\"," -" \"ownerId\": \"sampleuser@gmail.com\"," -" \"ticketUrl\": \"https://www.google.com/cloudprint/ticket?exampleURI1\"," -" \"printerid\": \"__example_printer_id\"," -" \"contentType\": \"text/html\"," -" \"fileUrl\": \"https://www.google.com/cloudprint/download?exampleURI1\"," -" \"id\": \"__example_job_id1\"," -" \"message\": \"\"," -" \"title\": \"Example Job\"," -" \"errorCode\": \"\"," -" \"numberOfPages\": 3" -" }" -"}"; - -const char kExamplePrinterID[] = "__example_printer_id"; - -const char kExamplePrinterCapabilities[] = ""; - -const char kExampleCapsMimeType[] = ""; - -// These can stay empty -const char kExampleDefaults[] = ""; - -const char kExampleDefaultMimeType[] = ""; - -// Since we're not connecting to the server, this can be any non-empty string. -const char kExampleCloudPrintOAuthToken[] = "__SAMPLE_TOKEN"; - - -// Not actually printing, no need for real PDF. -const char kExamplePrintData[] = "__EXAMPLE_PRINT_DATA"; - -const char kExampleJobDownloadResponseHeaders[] = - "Content-Type: Application/PDF\n"; - -const char kExampleTicketDownloadResponseHeaders[] = - "Content-Type: application/json\n"; - -const char kExamplePrinterName[] = "Example Printer"; - -const char kExamplePrinterDescription[] = "Example Description"; - -// These are functions used to construct the various sample strings. -std::string JobListResponse(int num_jobs) { - std::string job_objects; - for (int i = 0; i < num_jobs; i++) { - job_objects = job_objects + StringPrintf(kExampleJobObject, i+1, i+1, i+1, - i+1); - if (i != num_jobs-1) job_objects = job_objects + ","; - } - return StringPrintf(kExampleJobListResponse, job_objects.c_str()); -} - -GURL JobListURI(const char* reason) { - return GURL(StringPrintf(kExamplePrinterJobListURI, reason)); -} - -GURL DoneURI(int job_num) { - return GURL(StringPrintf(kExampleUpdateDoneURI, job_num)); -} - -GURL ErrorURI(int job_num) { - return GURL(StringPrintf(kExampleUpdateErrorURI, job_num)); -} - -GURL TicketURI(int job_num) { - return GURL(StringPrintf(kExamplePrintTicketURI, job_num)); -} - -GURL DownloadURI(int job_num) { - return GURL(StringPrintf(kExamplePrintDownloadURI, job_num)); -} - -GURL InProgressURI(int job_num) { - return GetUrlForJobStatusUpdate(GURL(kExampleCloudPrintServerURL), - StringPrintf(kExampleJobID, job_num), - PRINT_JOB_STATUS_IN_PROGRESS, - 0); -} - -std::string StatusResponse(int job_num, const char* status_string) { - return StringPrintf(kExampleControlResponse, - status_string, - job_num, - status_string); -} - -} // namespace - -class CloudPrintURLFetcherNoServiceProcess - : public CloudPrintURLFetcher { - public: - CloudPrintURLFetcherNoServiceProcess() - : CloudPrintURLFetcher(PARTIAL_TRAFFIC_ANNOTATION_FOR_TESTS), - context_getter_(new net::TestURLRequestContextGetter( - base::ThreadTaskRunnerHandle::Get())) {} - - protected: - net::URLRequestContextGetter* GetRequestContextGetter() override { - return context_getter_.get(); - } - - ~CloudPrintURLFetcherNoServiceProcess() override {} - - private: - scoped_refptr<net::URLRequestContextGetter> context_getter_; -}; - - -class CloudPrintURLFetcherNoServiceProcessFactory - : public CloudPrintURLFetcherFactory { - public: - CloudPrintURLFetcher* CreateCloudPrintURLFetcher() override { - return new CloudPrintURLFetcherNoServiceProcess; - } - - ~CloudPrintURLFetcherNoServiceProcessFactory() override {} -}; - - -// This class handles the callback from FakeURLFetcher -// It is a separate class because callback methods must be -// on RefCounted classes - -class TestURLFetcherCallback { - public: - std::unique_ptr<net::FakeURLFetcher> CreateURLFetcher( - const GURL& url, - net::URLFetcherDelegate* d, - const std::string& response_data, - net::HttpStatusCode response_code, - net::Error error) { - std::unique_ptr<net::FakeURLFetcher> fetcher( - new net::FakeURLFetcher(url, d, response_data, response_code, error)); - OnRequestCreate(url, fetcher.get()); - return fetcher; - } - MOCK_METHOD2(OnRequestCreate, - void(const GURL&, net::FakeURLFetcher*)); -}; - - -class MockPrinterJobHandlerDelegate - : public PrinterJobHandler::Delegate { - public: - MOCK_METHOD0(OnAuthError, void()); - MOCK_METHOD1(OnPrinterDeleted, void(const std::string& str)); - - ~MockPrinterJobHandlerDelegate() override {} -}; - - -class MockPrintServerWatcher - : public PrintSystem::PrintServerWatcher { - public: - MOCK_METHOD1(StartWatching, - bool(PrintSystem::PrintServerWatcher::Delegate* d)); - MOCK_METHOD0(StopWatching, bool()); - - MockPrintServerWatcher(); - PrintSystem::PrintServerWatcher::Delegate* delegate() const { - return delegate_; - } - - friend class scoped_refptr<NiceMock<MockPrintServerWatcher> >; - friend class scoped_refptr<StrictMock<MockPrintServerWatcher> >; - friend class scoped_refptr<MockPrintServerWatcher>; - - protected: - ~MockPrintServerWatcher() override {} - - private: - PrintSystem::PrintServerWatcher::Delegate* delegate_; -}; - -class MockPrinterWatcher : public PrintSystem::PrinterWatcher { - public: - MOCK_METHOD1(StartWatching, bool(PrintSystem::PrinterWatcher::Delegate* d)); - MOCK_METHOD0(StopWatching, bool()); - MOCK_METHOD1(GetCurrentPrinterInfo, - bool(printing::PrinterBasicInfo* printer_info)); - - MockPrinterWatcher(); - PrintSystem::PrinterWatcher::Delegate* delegate() const { return delegate_; } - - friend class scoped_refptr<NiceMock<MockPrinterWatcher> >; - friend class scoped_refptr<StrictMock<MockPrinterWatcher> >; - friend class scoped_refptr<MockPrinterWatcher>; - - protected: - ~MockPrinterWatcher() override {} - - private: - PrintSystem::PrinterWatcher::Delegate* delegate_; -}; - - -class MockJobSpooler : public PrintSystem::JobSpooler { - public: - MOCK_METHOD8(Spool, bool( - const std::string& print_ticket, - const std::string& print_ticket_mime_type, - const base::FilePath& print_data_file_path, - const std::string& print_data_mime_type, - const std::string& printer_name, - const std::string& job_title, - const std::vector<std::string>& tags, - PrintSystem::JobSpooler::Delegate* delegate)); - - MockJobSpooler(); - PrintSystem::JobSpooler::Delegate* delegate() const { return delegate_; } - - friend class scoped_refptr<NiceMock<MockJobSpooler> >; - friend class scoped_refptr<StrictMock<MockJobSpooler> >; - friend class scoped_refptr<MockJobSpooler>; - - protected: - ~MockJobSpooler() override {} - - private: - PrintSystem::JobSpooler::Delegate* delegate_; -}; - - - -class MockPrintSystem : public PrintSystem { - public: - MockPrintSystem(); - PrintSystem::PrintSystemResult succeed() { - return PrintSystem::PrintSystemResult(true, "success"); - } - - PrintSystem::PrintSystemResult fail() { - return PrintSystem::PrintSystemResult(false, "failure"); - } - - MockJobSpooler& JobSpooler() { return *job_spooler_.get(); } - - MockPrinterWatcher& PrinterWatcher() { return *printer_watcher_.get(); } - - MockPrintServerWatcher& PrintServerWatcher() { - return *print_server_watcher_.get(); - } - - MOCK_METHOD0(Init, PrintSystem::PrintSystemResult()); - MOCK_METHOD1(EnumeratePrinters, PrintSystem::PrintSystemResult( - printing::PrinterList* printer_list)); - - MOCK_METHOD2(GetPrinterCapsAndDefaults, - void(const std::string& printer_name, - PrintSystem::PrinterCapsAndDefaultsCallback callback)); - - MOCK_METHOD1(IsValidPrinter, bool(const std::string& printer_name)); - - MOCK_METHOD3(ValidatePrintTicket, - bool(const std::string& printer_name, - const std::string& print_ticket_data, - const std::string& print_ticket_mime_type)); - - MOCK_METHOD3(GetJobDetails, bool(const std::string& printer_name, - PlatformJobId job_id, - PrintJobDetails* job_details)); - - MOCK_METHOD0(CreatePrintServerWatcher, PrintSystem::PrintServerWatcher*()); - MOCK_METHOD1(CreatePrinterWatcher, - PrintSystem::PrinterWatcher*(const std::string& printer_name)); - MOCK_METHOD0(CreateJobSpooler, PrintSystem::JobSpooler*()); - - MOCK_METHOD0(UseCddAndCjt, bool()); - MOCK_METHOD0(GetSupportedMimeTypes, std::string()); - - friend class scoped_refptr<NiceMock<MockPrintSystem> >; - friend class scoped_refptr<StrictMock<MockPrintSystem> >; - friend class scoped_refptr<MockPrintSystem>; - - protected: - ~MockPrintSystem() override {} - - private: - scoped_refptr<MockJobSpooler> job_spooler_; - scoped_refptr<MockPrinterWatcher> printer_watcher_; - scoped_refptr<MockPrintServerWatcher> print_server_watcher_; -}; - - -class PrinterJobHandlerTest : public ::testing::Test { - public: - PrinterJobHandlerTest(); - void SetUp() override; - void TearDown() override; - bool GetPrinterInfo(printing::PrinterBasicInfo* info); - void SendCapsAndDefaults( - const std::string& printer_name, - PrintSystem::PrinterCapsAndDefaultsCallback callback); - void AddMimeHeader(const GURL& url, net::FakeURLFetcher* fetcher); - void AddTicketMimeHeader(const GURL& url, net::FakeURLFetcher* fetcher); - bool PostSpoolSuccess(); - void SetUpJobSuccessTest(int job_num); - void BeginTest(int timeout_seconds); - void MakeJobFetchReturnNoJobs(); - - base::test::SingleThreadTaskEnvironment task_environment_{ - base::test::SingleThreadTaskEnvironment::MainThreadType::IO}; - base::OnceClosure active_run_loop_quit_closure_; - TestURLFetcherCallback url_callback_; - MockPrinterJobHandlerDelegate jobhandler_delegate_; - CloudPrintTokenStore token_store_; - CloudPrintURLFetcherNoServiceProcessFactory cloud_print_factory_; - scoped_refptr<PrinterJobHandler> job_handler_; - scoped_refptr<NiceMock<MockPrintSystem> > print_system_; - net::FakeURLFetcherFactory factory_; - printing::PrinterBasicInfo basic_info_; - printing::PrinterCapsAndDefaults caps_and_defaults_; - PrinterJobHandler::PrinterInfoFromCloud info_from_cloud_; -}; - - -void PrinterJobHandlerTest::SetUp() { - basic_info_.printer_name = kExamplePrinterName; - basic_info_.printer_description = kExamplePrinterDescription; - basic_info_.is_default = 0; - - info_from_cloud_.printer_id = kExamplePrinterID; - info_from_cloud_.tags_hash = GetHashOfPrinterInfo(basic_info_); - - info_from_cloud_.caps_hash = base::MD5String(kExamplePrinterCapabilities); - info_from_cloud_.current_xmpp_timeout = 300; - info_from_cloud_.pending_xmpp_timeout = 0; - - caps_and_defaults_.printer_capabilities = kExamplePrinterCapabilities; - caps_and_defaults_.caps_mime_type = kExampleCapsMimeType; - caps_and_defaults_.printer_defaults = kExampleDefaults; - caps_and_defaults_.defaults_mime_type = kExampleDefaultMimeType; - - print_system_ = new NiceMock<MockPrintSystem>(); - - token_store_.SetToken(kExampleCloudPrintOAuthToken); - - ON_CALL(print_system_->PrinterWatcher(), GetCurrentPrinterInfo(_)) - .WillByDefault(Invoke(this, &PrinterJobHandlerTest::GetPrinterInfo)); - - ON_CALL(*print_system_.get(), GetPrinterCapsAndDefaults(_, _)) - .WillByDefault(Invoke(this, &PrinterJobHandlerTest::SendCapsAndDefaults)); - - CloudPrintURLFetcher::set_test_factory(&cloud_print_factory_); -} - -void PrinterJobHandlerTest::MakeJobFetchReturnNoJobs() { - factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), - JobListResponse(0), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), - JobListResponse(0), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), JobListResponse(0), - net::HTTP_OK, net::OK); -} - -PrinterJobHandlerTest::PrinterJobHandlerTest() - : factory_(nullptr, - base::BindRepeating(&TestURLFetcherCallback::CreateURLFetcher, - base::Unretained(&url_callback_))) {} - -bool PrinterJobHandlerTest::PostSpoolSuccess() { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&PrinterJobHandler::OnJobSpoolSucceeded, job_handler_, 0)); - - // Everything that would be posted on the printer thread queue - // has been posted, we can tell the main message loop to quit when idle - // and not worry about it idling while the print thread does work. - DCHECK(!active_run_loop_quit_closure_.is_null()); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, std::move(active_run_loop_quit_closure_)); - return true; -} - -void PrinterJobHandlerTest::AddMimeHeader(const GURL& url, - net::FakeURLFetcher* fetcher) { - scoped_refptr<net::HttpResponseHeaders> download_headers = - new net::HttpResponseHeaders(kExampleJobDownloadResponseHeaders); - fetcher->set_response_headers(download_headers); -} - -void PrinterJobHandlerTest::AddTicketMimeHeader(const GURL& url, - net::FakeURLFetcher* fetcher) { - scoped_refptr<net::HttpResponseHeaders> download_headers = - new net::HttpResponseHeaders(kExampleTicketDownloadResponseHeaders); - fetcher->set_response_headers(download_headers); -} - - -void PrinterJobHandlerTest::SetUpJobSuccessTest(int job_num) { - factory_.SetFakeResponse(TicketURI(job_num), kExamplePrintTicket, - net::HTTP_OK, net::OK); - factory_.SetFakeResponse(DownloadURI(job_num), kExamplePrintData, - net::HTTP_OK, net::OK); - - factory_.SetFakeResponse(DoneURI(job_num), StatusResponse(job_num, "DONE"), - net::HTTP_OK, net::OK); - factory_.SetFakeResponse(InProgressURI(job_num), - StatusResponse(job_num, "IN_PROGRESS"), net::HTTP_OK, - net::OK); - - // The times requirement is relaxed for the ticket URI - // in order to accommodate TicketDownloadFailureTest - EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(job_num), _)) - .Times(AtLeast(1)) - .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddTicketMimeHeader)); - - EXPECT_CALL(url_callback_, OnRequestCreate(DownloadURI(job_num), _)) - .Times(Exactly(1)) - .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddMimeHeader)); - - EXPECT_CALL(url_callback_, OnRequestCreate(InProgressURI(job_num), _)) - .Times(Exactly(1)); - - EXPECT_CALL(url_callback_, OnRequestCreate(DoneURI(job_num), _)) - .Times(Exactly(1)); - - EXPECT_CALL(print_system_->JobSpooler(), - Spool(kExamplePrintTicket, _, _, _, _, _, _, _)) - .Times(Exactly(1)) - .WillOnce(InvokeWithoutArgs(this, - &PrinterJobHandlerTest::PostSpoolSuccess)); -} - -void PrinterJobHandlerTest::BeginTest(int timeout_seconds) { - job_handler_ = new PrinterJobHandler(basic_info_, - info_from_cloud_, - GURL(kExampleCloudPrintServerURL), - print_system_.get(), - &jobhandler_delegate_); - - job_handler_->Initialize(); - - base::RunLoop run_loop; - active_run_loop_quit_closure_ = run_loop.QuitWhenIdleClosure(); - - base::test::ScopedRunLoopTimeout run_timeout(FROM_HERE, - base::Seconds(timeout_seconds)); - run_loop.Run(); -} - -void PrinterJobHandlerTest::SendCapsAndDefaults( - const std::string& printer_name, - PrintSystem::PrinterCapsAndDefaultsCallback callback) { - std::move(callback).Run(true, printer_name, caps_and_defaults_); -} - -bool PrinterJobHandlerTest::GetPrinterInfo(printing::PrinterBasicInfo* info) { - *info = basic_info_; - return true; -} - -void PrinterJobHandlerTest::TearDown() { - base::RunLoop().RunUntilIdle(); - CloudPrintURLFetcher::set_test_factory(nullptr); -} - -MockPrintServerWatcher::MockPrintServerWatcher() : delegate_(nullptr) { - ON_CALL(*this, StartWatching(_)) - .WillByDefault(DoAll(SaveArg<0>(&delegate_), Return(true))); - ON_CALL(*this, StopWatching()).WillByDefault(Return(true)); -} - -MockPrinterWatcher::MockPrinterWatcher() : delegate_(nullptr) { - ON_CALL(*this, StartWatching(_)) - .WillByDefault(DoAll(SaveArg<0>(&delegate_), Return(true))); - ON_CALL(*this, StopWatching()).WillByDefault(Return(true)); -} - -MockJobSpooler::MockJobSpooler() : delegate_(nullptr) { - ON_CALL(*this, Spool(_, _, _, _, _, _, _, _)) - .WillByDefault(DoAll(SaveArg<7>(&delegate_), Return(true))); -} - -MockPrintSystem::MockPrintSystem() - : job_spooler_(new NiceMock<MockJobSpooler>()), - printer_watcher_(new NiceMock<MockPrinterWatcher>()), - print_server_watcher_(new NiceMock<MockPrintServerWatcher>()) { - ON_CALL(*this, CreateJobSpooler()).WillByDefault(Return(job_spooler_.get())); - - ON_CALL(*this, CreatePrinterWatcher(_)) - .WillByDefault(Return(printer_watcher_.get())); - - ON_CALL(*this, CreatePrintServerWatcher()) - .WillByDefault(Return(print_server_watcher_.get())); - - ON_CALL(*this, IsValidPrinter(_)). - WillByDefault(Return(true)); - - ON_CALL(*this, ValidatePrintTicket(_, _, _)). - WillByDefault(Return(true)); -} - -// This test simulates an end-to-end printing of a document -// but tests only non-failure cases. -// Disabled - http://crbug.com/184245 -TEST_F(PrinterJobHandlerTest, DISABLED_HappyPathTest) { - factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), - JobListResponse(1), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), - JobListResponse(0), net::HTTP_OK, net::OK); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) - .Times(Exactly(1)); - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) - .Times(Exactly(1)); - - SetUpJobSuccessTest(1); - BeginTest(20); -} - -TEST_F(PrinterJobHandlerTest, TicketDownloadFailureTest) { - factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), - JobListResponse(2), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), - JobListResponse(2), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), - JobListResponse(0), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(TicketURI(1), std::string(), - net::HTTP_INTERNAL_SERVER_ERROR, net::ERR_FAILED); - - EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(1), _)) - .Times(AtLeast(1)) - .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddTicketMimeHeader)); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) - .Times(AtLeast(1)); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) - .Times(AtLeast(1)); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) - .Times(AtLeast(1)); - - SetUpJobSuccessTest(2); - BeginTest(20); -} - -// TODO(noamsml): Figure out how to make this test not take 1 second and -// re-enable it -TEST_F(PrinterJobHandlerTest, DISABLED_ManyFailureTest) { - factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), - JobListResponse(1), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), - JobListResponse(1), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), JobListResponse(1), - net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonQueryMore), - JobListResponse(0), net::HTTP_OK, net::OK); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) - .Times(AtLeast(1)); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonQueryMore), _)) - .Times(AtLeast(1)); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) - .Times(AtLeast(1)); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonRetry), _)) - .Times(AtLeast(1)); - - SetUpJobSuccessTest(1); - - factory_.SetFakeResponse(TicketURI(1), std::string(), - net::HTTP_INTERNAL_SERVER_ERROR, net::ERR_FAILED); - - task_environment_.GetMainThreadTaskRunner()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&net::FakeURLFetcherFactory::SetFakeResponse, - base::Unretained(&factory_), TicketURI(1), - kExamplePrintTicket, net::HTTP_OK, net::OK), - base::Seconds(1)); - - BeginTest(5); -} - - -// TODO(noamsml): Figure out how to make this test not take ~64-~2048 (depending -// constant values) seconds and re-enable it -TEST_F(PrinterJobHandlerTest, DISABLED_CompleteFailureTest) { - factory_.SetFakeResponse(JobListURI(kJobFetchReasonStartup), - JobListResponse(1), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonFailure), - JobListResponse(1), net::HTTP_OK, net::OK); - factory_.SetFakeResponse(JobListURI(kJobFetchReasonRetry), JobListResponse(1), - net::HTTP_OK, net::OK); - factory_.SetFakeResponse(ErrorURI(1), StatusResponse(1, "ERROR"), - net::HTTP_OK, net::OK); - factory_.SetFakeResponse(TicketURI(1), std::string(), - net::HTTP_INTERNAL_SERVER_ERROR, net::ERR_FAILED); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonStartup), _)) - .Times(AtLeast(1)); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonFailure), _)) - .Times(AtLeast(1)); - - EXPECT_CALL(url_callback_, - OnRequestCreate(JobListURI(kJobFetchReasonRetry), _)) - .Times(AtLeast(1)); - - EXPECT_CALL(url_callback_, OnRequestCreate(ErrorURI(1), _)) - .Times(Exactly(1)) - .WillOnce(InvokeWithoutArgs( - this, &PrinterJobHandlerTest::MakeJobFetchReturnNoJobs)); - - EXPECT_CALL(url_callback_, OnRequestCreate(TicketURI(1), _)) - .Times(AtLeast(kNumRetriesBeforeAbandonJob)); - - BeginTest(70); -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/printer_job_queue_handler.cc b/chrome/service/cloud_print/printer_job_queue_handler.cc deleted file mode 100644 index 2349c71..0000000 --- a/chrome/service/cloud_print/printer_job_queue_handler.cc +++ /dev/null
@@ -1,181 +0,0 @@ -// Copyright (c) 2013 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/service/cloud_print/printer_job_queue_handler.h" - -#include <math.h> -#include <stddef.h> -#include <stdint.h> - -#include <algorithm> - -#include "base/values.h" - -namespace cloud_print { - -namespace { - -class TimeProviderImpl : public PrinterJobQueueHandler::TimeProvider { - public: - base::Time GetNow() override; -}; - -base::Time TimeProviderImpl::GetNow() { - return base::Time::Now(); -} - -JobDetails ConstructJobDetailsFromJson(const base::Value& job_data) { - DCHECK(job_data.is_dict()); - - JobDetails job_details; - const std::string* str = job_data.FindStringKey(kIdValue); - if (str) - job_details.job_id_ = *str; - str = job_data.FindStringKey(kTitleValue); - if (str) - job_details.job_title_ = *str; - str = job_data.FindStringKey(kOwnerValue); - if (str) - job_details.job_owner_ = *str; - str = job_data.FindStringKey(kTicketUrlValue); - if (str) - job_details.print_ticket_url_ = *str; - str = job_data.FindStringKey(kFileUrlValue); - if (str) - job_details.print_data_url_ = *str; - - // Get tags for print job. - const base::Value* tags = - job_data.FindKeyOfType(kTagsValue, base::Value::Type::LIST); - if (tags) { - for (const auto& tag : tags->GetList()) { - if (tag.is_string()) - job_details.tags_.push_back(tag.GetString()); - } - } - return job_details; -} - -} // namespace - -JobDetails::JobDetails() {} - -JobDetails::JobDetails(const JobDetails& other) = default; - -JobDetails::~JobDetails() {} - -void JobDetails::Clear() { - job_id_.clear(); - job_title_.clear(); - job_owner_.clear(); - print_ticket_.clear(); - print_ticket_mime_type_.clear(); - print_data_mime_type_.clear(); - print_data_file_path_ = base::FilePath(); - print_data_url_.clear(); - print_ticket_url_.clear(); - tags_.clear(); - time_remaining_ = base::TimeDelta(); -} - -// static -bool JobDetails::Ordering(const JobDetails& first, const JobDetails& second) { - return first.time_remaining_ < second.time_remaining_; -} - -PrinterJobQueueHandler::PrinterJobQueueHandler( - std::unique_ptr<TimeProvider> time_provider) - : time_provider_(std::move(time_provider)) {} - -PrinterJobQueueHandler::PrinterJobQueueHandler() - : time_provider_(new TimeProviderImpl) {} - -PrinterJobQueueHandler::~PrinterJobQueueHandler() {} - -base::TimeDelta PrinterJobQueueHandler::ComputeBackoffTime( - const std::string& job_id) { - FailedJobMap::const_iterator job_location = failed_job_map_.find(job_id); - if (job_location == failed_job_map_.end()) { - return base::TimeDelta(); - } - - base::TimeDelta backoff_time = base::Seconds(kJobFirstWaitTimeSecs); - backoff_time *= - // casting argument to double and result to uint64_t to avoid compilation - // issues - static_cast<int64_t>( - pow(static_cast<long double>(kJobWaitTimeExponentialMultiplier), - job_location->second.retries_) + - 0.5); - base::Time scheduled_retry = - job_location->second.last_retry_ + backoff_time; - base::Time now = time_provider_->GetNow(); - - if (scheduled_retry < now) { - return base::TimeDelta(); - } - return scheduled_retry - now; -} - -std::vector<JobDetails> PrinterJobQueueHandler::GetJobsFromQueue( - const base::Value& json_data) { - DCHECK(json_data.is_dict()); - - std::vector<JobDetails> jobs; - - const base::Value* job_list = - json_data.FindKeyOfType(kJobListValue, base::Value::Type::LIST); - if (!job_list) - return jobs; - - std::vector<JobDetails> jobs_with_timeouts; - for (const auto& job_value : job_list->GetList()) { - if (!job_value.is_dict()) - continue; - - JobDetails job_details_current = ConstructJobDetailsFromJson(job_value); - job_details_current.time_remaining_ = - ComputeBackoffTime(job_details_current.job_id_); - if (job_details_current.time_remaining_.is_zero()) { - jobs.push_back(job_details_current); - } else { - jobs_with_timeouts.push_back(job_details_current); - } - } - - sort(jobs_with_timeouts.begin(), jobs_with_timeouts.end(), - &JobDetails::Ordering); - jobs.insert(jobs.end(), jobs_with_timeouts.begin(), jobs_with_timeouts.end()); - return jobs; -} - -void PrinterJobQueueHandler::JobDone(const std::string& job_id) { - failed_job_map_.erase(job_id); -} - -bool PrinterJobQueueHandler::JobFetchFailed(const std::string& job_id) { - FailedJobMetadata metadata; - metadata.retries_ = 0; - metadata.last_retry_ = time_provider_->GetNow(); - - std::pair<FailedJobMap::iterator, bool> job_found = - failed_job_map_.insert(FailedJobPair(job_id, metadata)); - - // If the job has already failed once, increment the number of retries. - // If it has failed too many times, remove it from the map and tell the caller - // to report a failure. - if (!job_found.second) { - if (job_found.first->second.retries_ >= kNumRetriesBeforeAbandonJob) { - failed_job_map_.erase(job_found.first); - return false; - } - - job_found.first->second.retries_ += 1; - job_found.first->second.last_retry_ = time_provider_->GetNow(); - } - - return true; -} - -} // namespace cloud_print
diff --git a/chrome/service/cloud_print/printer_job_queue_handler.h b/chrome/service/cloud_print/printer_job_queue_handler.h deleted file mode 100644 index 62cfac93..0000000 --- a/chrome/service/cloud_print/printer_job_queue_handler.h +++ /dev/null
@@ -1,102 +0,0 @@ -// Copyright (c) 2013 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_SERVICE_CLOUD_PRINT_PRINTER_JOB_QUEUE_HANDLER_H_ -#define CHROME_SERVICE_CLOUD_PRINT_PRINTER_JOB_QUEUE_HANDLER_H_ - -#include <map> -#include <memory> -#include <string> -#include <utility> -#include <vector> - -#include "base/files/file_path.h" -#include "base/memory/ref_counted.h" -#include "base/time/time.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" - -namespace base { -class Value; -} - -namespace cloud_print { - -struct JobDetails { - static bool Ordering(const JobDetails& first, const JobDetails& second); - - JobDetails(); - JobDetails(const JobDetails& other); - ~JobDetails(); - - void Clear(); - - std::string job_id_; - std::string job_title_; - std::string job_owner_; - - std::string print_ticket_url_; - std::string print_data_url_; - - std::string print_ticket_; - std::string print_ticket_mime_type_; - base::FilePath print_data_file_path_; - std::string print_data_mime_type_; - - std::vector<std::string> tags_; - - base::TimeDelta time_remaining_; -}; - -// class containing logic for print job backoff - -class PrinterJobQueueHandler { - public: - class TimeProvider { - public: - virtual base::Time GetNow() = 0; - virtual ~TimeProvider() {} - }; - - PrinterJobQueueHandler(); - - PrinterJobQueueHandler(const PrinterJobQueueHandler&) = delete; - PrinterJobQueueHandler& operator=(const PrinterJobQueueHandler&) = delete; - - ~PrinterJobQueueHandler(); - - // Returns a vector with details of all jobs in the queue, sorted by time - // until they are ready to print, lowest to highest. Jobs that are ready to - // print will have a |time_remaining_| of 0. - std::vector<JobDetails> GetJobsFromQueue(const base::Value& json_data); - - // Marks a job fetch as failed. Returns "true" if the job will be retried. - bool JobFetchFailed(const std::string& job_id); - - void JobDone(const std::string& job_id); - - protected: - // Only used for testing. - explicit PrinterJobQueueHandler(std::unique_ptr<TimeProvider> time_provider); - - TimeProvider* time_provider() { return time_provider_.get(); } - - private: - base::TimeDelta ComputeBackoffTime(const std::string& job_id); - - std::unique_ptr<TimeProvider> time_provider_; - - struct FailedJobMetadata { - int retries_; - base::Time last_retry_; - }; - - using FailedJobMap = std::map<std::string, FailedJobMetadata>; - using FailedJobPair = std::pair<std::string, FailedJobMetadata>; - - FailedJobMap failed_job_map_; -}; - -} // namespace cloud_print - -#endif // CHROME_SERVICE_CLOUD_PRINT_PRINTER_JOB_QUEUE_HANDLER_H_
diff --git a/chrome/service/cloud_print/printer_job_queue_handler_unittest.cc b/chrome/service/cloud_print/printer_job_queue_handler_unittest.cc deleted file mode 100644 index c85f2bf5..0000000 --- a/chrome/service/cloud_print/printer_job_queue_handler_unittest.cc +++ /dev/null
@@ -1,184 +0,0 @@ -// Copyright (c) 2013 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/service/cloud_print/printer_job_queue_handler.h" - -#include <stddef.h> - -#include <set> - -#include "base/memory/ptr_util.h" -#include "base/test/values_test_util.h" -#include "base/values.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using ::testing::Return; -using ::testing::AtLeast; - -namespace cloud_print { - -const char kJobListResponse[] = - "{" - " \"success\" : true, " - " \"jobs\" : [" - "{" - " \"tags\" : [ \"^own\", \"\"], " - " \"title\" : \"test1\"," - " \"ticketUrl\" : \"http://example.com/job1ticket\"," - " \"fileUrl\" : \"http://example.com/job1data\"," - " \"id\" : \"__testjob1\"" - "}," - "{" - " \"tags\" : [ \"^own\", \"\"], " - " \"title\" : \"test2\"," - " \"ticketUrl\" : \"http://example.com/job2ticket\"," - " \"fileUrl\" : \"http://example.com/job2data\"," - " \"id\" : \"__testjob2\"" - "}," - "{" - " \"tags\" : [ \"^own\", \"\"], " - " \"title\" : \"test3\"," - " \"ticketUrl\" : \"http://example.com/job3ticket\"," - " \"fileUrl\" : \"http://example.com/job3data\"," - " \"id\" : \"__testjob3\"" - "}" - "]" - "}"; - -class TimeProviderMock : public PrinterJobQueueHandler::TimeProvider { - public: - MOCK_METHOD0(GetNow, base::Time()); -}; - -class PrinterJobQueueHandlerWithMockedTime : public PrinterJobQueueHandler { - public: - PrinterJobQueueHandlerWithMockedTime() - : PrinterJobQueueHandler(base::WrapUnique(new TimeProviderMock)) {} - - PrinterJobQueueHandlerWithMockedTime( - const PrinterJobQueueHandlerWithMockedTime&) = delete; - PrinterJobQueueHandlerWithMockedTime& operator=( - const PrinterJobQueueHandlerWithMockedTime&) = delete; - - TimeProviderMock* GetMock() { - return static_cast<TimeProviderMock*>( - PrinterJobQueueHandler::time_provider()); - } -}; - -class PrinterJobQueueHandlerTest : public ::testing::Test { - protected: - void SetUp() override { data_ = base::test::ParseJson(kJobListResponse); } - - const base::Value& GetDictionary() const { return data_; } - - private: - base::Value data_; -}; - -TEST_F(PrinterJobQueueHandlerTest, BasicJobReadTest) { - PrinterJobQueueHandler job_queue_handler; - std::vector<JobDetails> jobs = - job_queue_handler.GetJobsFromQueue(GetDictionary()); - - ASSERT_EQ(3U, jobs.size()); - - EXPECT_STREQ("__testjob1", jobs[0].job_id_.c_str()); - EXPECT_STREQ("test1", jobs[0].job_title_.c_str()); - EXPECT_STREQ("http://example.com/job1ticket", - jobs[0].print_ticket_url_.c_str()); - EXPECT_STREQ("http://example.com/job1data", jobs[0].print_data_url_.c_str()); - - std::set<std::string> expected_tags; - expected_tags.insert("^own"); - expected_tags.insert(std::string()); - std::set<std::string> actual_tags; - actual_tags.insert(jobs[0].tags_.begin(), jobs[0].tags_.end()); - - EXPECT_EQ(expected_tags, actual_tags); - EXPECT_EQ(base::TimeDelta(), jobs[0].time_remaining_); -} - -TEST_F(PrinterJobQueueHandlerTest, PreferNonFailureTest) { - PrinterJobQueueHandlerWithMockedTime job_queue_handler; - EXPECT_CALL((*job_queue_handler.GetMock()), GetNow()) - .Times(AtLeast(2)) - .WillRepeatedly(Return(base::Time::UnixEpoch())); - - // must fail twice for backoff to kick in - job_queue_handler.JobFetchFailed("__testjob1"); - job_queue_handler.JobFetchFailed("__testjob1"); - - std::vector<JobDetails> jobs = - job_queue_handler.GetJobsFromQueue(GetDictionary()); - - EXPECT_STREQ("__testjob2", jobs[0].job_id_.c_str()); - EXPECT_EQ(base::TimeDelta(), jobs[0].time_remaining_); -} - -TEST_F(PrinterJobQueueHandlerTest, PreferNoTimeTest) { - PrinterJobQueueHandlerWithMockedTime job_queue_handler; - EXPECT_CALL((*job_queue_handler.GetMock()), GetNow()).Times(AtLeast(8)); - - ON_CALL((*job_queue_handler.GetMock()), GetNow()) - .WillByDefault(Return(base::Time::UnixEpoch())); - - for (int i = 0; i < 4; i++) - job_queue_handler.JobFetchFailed("__testjob1"); - - ON_CALL((*job_queue_handler.GetMock()), GetNow()) - .WillByDefault(Return(base::Time::UnixEpoch() + base::Minutes(4))); - - for (int i = 0; i < 2; i++) - job_queue_handler.JobFetchFailed("__testjob2"); - - for (int i = 0; i < 2; i++) - job_queue_handler.JobFetchFailed("__testjob3"); - - std::vector<JobDetails> jobs = - job_queue_handler.GetJobsFromQueue(GetDictionary()); - - EXPECT_EQ(base::TimeDelta(), jobs[0].time_remaining_); - EXPECT_STREQ("__testjob1", jobs[0].job_id_.c_str()); -} - -TEST_F(PrinterJobQueueHandlerTest, PreferLowerTimeTest) { - PrinterJobQueueHandlerWithMockedTime job_queue_handler; - - EXPECT_CALL((*job_queue_handler.GetMock()), GetNow()).Times(AtLeast(8)); - - ON_CALL((*job_queue_handler.GetMock()), GetNow()) - .WillByDefault(Return(base::Time::UnixEpoch())); - - for (int i = 0; i < 4; i++) - job_queue_handler.JobFetchFailed("__testjob1"); - - ON_CALL((*job_queue_handler.GetMock()), GetNow()) - .WillByDefault(Return(base::Time::UnixEpoch() + base::Seconds(4))); - - for (int i = 0; i < 2; i++) - job_queue_handler.JobFetchFailed("__testjob2"); - - for (int i = 0; i < 2; i++) - job_queue_handler.JobFetchFailed("__testjob3"); - - std::vector<JobDetails> jobs = - job_queue_handler.GetJobsFromQueue(GetDictionary()); - - base::TimeDelta time_to_wait = jobs[0].time_remaining_; - EXPECT_NE(base::TimeDelta(), time_to_wait); - - jobs.clear(); - ON_CALL((*job_queue_handler.GetMock()), GetNow()) - .WillByDefault( - Return(base::Time::UnixEpoch() + base::Seconds(4) + time_to_wait)); - - jobs = job_queue_handler.GetJobsFromQueue(GetDictionary()); - - EXPECT_EQ(base::TimeDelta(), jobs[0].time_remaining_); - EXPECT_STREQ("__testjob2", jobs[0].job_id_.c_str()); -} - -} // namespace cloud_print
diff --git a/chrome/service/net/in_process_network_connection_tracker.cc b/chrome/service/net/in_process_network_connection_tracker.cc deleted file mode 100644 index 4c673d9..0000000 --- a/chrome/service/net/in_process_network_connection_tracker.cc +++ /dev/null
@@ -1,21 +0,0 @@ -// Copyright 2018 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/service/net/in_process_network_connection_tracker.h" - -InProcessNetworkConnectionTracker::InProcessNetworkConnectionTracker() { - net::NetworkChangeNotifier::AddNetworkChangeObserver(this); - OnInitialConnectionType(network::mojom::ConnectionType( - net::NetworkChangeNotifier::GetConnectionType())); -} - -InProcessNetworkConnectionTracker::~InProcessNetworkConnectionTracker() { - net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); -} - -void InProcessNetworkConnectionTracker::OnNetworkChanged( - net::NetworkChangeNotifier::ConnectionType type) { - network::NetworkConnectionTracker::OnNetworkChanged( - network::mojom::ConnectionType(type)); -}
diff --git a/chrome/service/net/in_process_network_connection_tracker.h b/chrome/service/net/in_process_network_connection_tracker.h deleted file mode 100644 index 4da5bef..0000000 --- a/chrome/service/net/in_process_network_connection_tracker.h +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2018 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_SERVICE_NET_IN_PROCESS_NETWORK_CONNECTION_TRACKER_H_ -#define CHROME_SERVICE_NET_IN_PROCESS_NETWORK_CONNECTION_TRACKER_H_ - -#include "net/base/network_change_notifier.h" -#include "services/network/public/cpp/network_connection_tracker.h" - -// A NetworkConnectionTracker subclass that directly wraps the -// NetworkChangeNotifier instead of getting connection notifications via -// the NetworkChangeManager mojo service. -// -// This is needed because some dependencies need a NetworkConnectionTracker, but -// we can't start up the network service within the Cloud Print service process. -class InProcessNetworkConnectionTracker - : public network::NetworkConnectionTracker, - private net::NetworkChangeNotifier::NetworkChangeObserver { - public: - InProcessNetworkConnectionTracker(); - - InProcessNetworkConnectionTracker(const InProcessNetworkConnectionTracker&) = - delete; - InProcessNetworkConnectionTracker& operator=( - const InProcessNetworkConnectionTracker&) = delete; - - ~InProcessNetworkConnectionTracker() override; - - protected: - using network::NetworkConnectionTracker::OnNetworkChanged; - - private: - // net::NetworkChangeNotifier::NetworkChangeObserver implementation: - void OnNetworkChanged( - net::NetworkChangeNotifier::ConnectionType type) override; -}; - -#endif // CHROME_SERVICE_NET_IN_PROCESS_NETWORK_CONNECTION_TRACKER_H_
diff --git a/chrome/service/net/in_process_network_connection_tracker_unittest.cc b/chrome/service/net/in_process_network_connection_tracker_unittest.cc deleted file mode 100644 index 10e48ed..0000000 --- a/chrome/service/net/in_process_network_connection_tracker_unittest.cc +++ /dev/null
@@ -1,92 +0,0 @@ -// Copyright 2018 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/service/net/in_process_network_connection_tracker.h" - -#include <memory> - -#include "base/bind.h" -#include "base/memory/raw_ptr.h" -#include "base/run_loop.h" -#include "base/test/task_environment.h" -#include "net/base/mock_network_change_notifier.h" -#include "testing/gtest/include/gtest/gtest.h" - -class TestNetworkConnectionObserver - : public network::NetworkConnectionTracker::NetworkConnectionObserver { - public: - explicit TestNetworkConnectionObserver( - network::NetworkConnectionTracker* tracker) - : tracker_(tracker) { - tracker_->AddNetworkConnectionObserver(this); - } - - ~TestNetworkConnectionObserver() override { - tracker_->RemoveNetworkConnectionObserver(this); - } - - void OnConnectionChanged(network::mojom::ConnectionType type) override { - call_count++; - last_type = type; - } - - int call_count = 0; - network::mojom::ConnectionType last_type = - network::mojom::ConnectionType::CONNECTION_UNKNOWN; - - private: - raw_ptr<network::NetworkConnectionTracker> tracker_; -}; - -class InProcessNetworkConnectionTrackerTest : public ::testing::Test { - protected: - void SetConnectionType(net::NetworkChangeNotifier::ConnectionType type) { - notifier_->SetConnectionType(type); - notifier_->NotifyObserversOfNetworkChangeForTests( - notifier_->GetConnectionType()); - task_environment_.RunUntilIdle(); - } - - network::NetworkConnectionTracker::ConnectionTypeCallback - UnreachedCallback() { - return base::BindOnce( - [](network::mojom::ConnectionType type) { NOTREACHED(); }); - } - - private: - base::test::TaskEnvironment task_environment_; - std::unique_ptr<net::test::MockNetworkChangeNotifier> notifier_ = - net::test::MockNetworkChangeNotifier::Create(); -}; - -// Tests that a registered observer gets called. -TEST_F(InProcessNetworkConnectionTrackerTest, ObserverCalled) { - InProcessNetworkConnectionTracker tracker; - TestNetworkConnectionObserver observer(&tracker); - - ASSERT_EQ(observer.call_count, 0); - SetConnectionType(net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G); - ASSERT_EQ(observer.call_count, 1); - ASSERT_EQ(observer.last_type, network::mojom::ConnectionType::CONNECTION_3G); - SetConnectionType(net::NetworkChangeNotifier::ConnectionType::CONNECTION_4G); - ASSERT_EQ(observer.call_count, 2); - ASSERT_EQ(observer.last_type, network::mojom::ConnectionType::CONNECTION_4G); -} - -// Tests that GetConnectionType returns synchronously. -TEST_F(InProcessNetworkConnectionTrackerTest, GetConnectionTypeSync) { - SetConnectionType( - net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI); - InProcessNetworkConnectionTracker tracker; - - auto type = network::mojom::ConnectionType::CONNECTION_UNKNOWN; - bool sync = tracker.GetConnectionType(&type, UnreachedCallback()); - ASSERT_TRUE(sync); - ASSERT_EQ(type, network::mojom::ConnectionType::CONNECTION_WIFI); - - SetConnectionType(net::NetworkChangeNotifier::ConnectionType::CONNECTION_2G); - sync = tracker.GetConnectionType(&type, UnreachedCallback()); - ASSERT_TRUE(sync); - ASSERT_EQ(type, network::mojom::ConnectionType::CONNECTION_2G); -}
diff --git a/chrome/service/net/service_url_request_context_getter.cc b/chrome/service/net/service_url_request_context_getter.cc deleted file mode 100644 index db0d78e..0000000 --- a/chrome/service/net/service_url_request_context_getter.cc +++ /dev/null
@@ -1,126 +0,0 @@ -// Copyright 2014 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/service/net/service_url_request_context_getter.h" - -#include <stdint.h> -#include <utility> - -#include "base/compiler_specific.h" -#include "base/strings/stringprintf.h" -#include "base/system/sys_info.h" -#include "base/task/single_thread_task_runner.h" -#include "build/build_config.h" -#include "build/chromeos_buildflags.h" -#include "chrome/service/service_process.h" -#include "components/version_info/version_info.h" -#include "net/proxy_resolution/configured_proxy_resolution_service.h" -#include "net/proxy_resolution/proxy_config_service.h" -#include "net/url_request/url_request_context_builder.h" - -#if defined(OS_POSIX) && !defined(OS_MAC) -#include <sys/utsname.h> -#endif - -#if BUILDFLAG(IS_CHROMEOS_ASH) -#error "Not supported on ChromeOS" -#endif - -namespace { -// Copied from webkit/glue/user_agent.cc. We don't want to pull in a dependency -// on webkit/glue which also pulls in the renderer. Also our user-agent is -// totally different from the user-agent used by the browser, just the -// OS-specific parts are common. -std::string BuildOSCpuInfo() { - std::string os_cpu; - -#if defined(OS_WIN) || defined(OS_MAC) - int32_t os_major_version = 0; - int32_t os_minor_version = 0; - int32_t os_bugfix_version = 0; - base::SysInfo::OperatingSystemVersionNumbers(&os_major_version, - &os_minor_version, - &os_bugfix_version); -#endif -#if defined(OS_POSIX) && !defined(OS_MAC) - // Should work on any Posix system. - struct utsname unixinfo; - uname(&unixinfo); - - std::string cputype; - // special case for biarch systems - if (strcmp(unixinfo.machine, "x86_64") == 0 && - sizeof(void*) == sizeof(int32_t)) { // NOLINT - cputype.assign("i686 (x86_64)"); - } else { - cputype.assign(unixinfo.machine); - } -#endif - - base::StringAppendF( - &os_cpu, -#if defined(OS_WIN) - "Windows NT %d.%d", - os_major_version, - os_minor_version -#elif defined(OS_MAC) - "Intel Mac OS X %d_%d_%d", - os_major_version, - os_minor_version, - os_bugfix_version -#else - "%s %s", - unixinfo.sysname, // e.g. Linux - cputype.c_str() // e.g. i686 -#endif - ); // NOLINT - - return os_cpu; -} - -// Returns the default user agent. -std::string MakeUserAgentForServiceProcess() { - std::string user_agent; - std::string extra_version_info; - if (!version_info::IsOfficialBuild()) - extra_version_info = "-devel"; - base::StringAppendF(&user_agent, - "Chrome Service %s(%s)%s %s ", - version_info::GetVersionNumber().c_str(), - version_info::GetLastChange().c_str(), - extra_version_info.c_str(), - BuildOSCpuInfo().c_str()); - return user_agent; -} - -} // namespace - -ServiceURLRequestContextGetter::ServiceURLRequestContextGetter() - : user_agent_(MakeUserAgentForServiceProcess()), - network_task_runner_(g_service_process->io_task_runner()) { - DCHECK(g_service_process); - proxy_config_service_ = - net::ConfiguredProxyResolutionService::CreateSystemProxyConfigService( - g_service_process->io_task_runner()); -} - -net::URLRequestContext* -ServiceURLRequestContextGetter::GetURLRequestContext() { - if (!url_request_context_.get()) { - net::URLRequestContextBuilder builder; - builder.set_user_agent(user_agent_); - builder.set_accept_language("en-us,fr"); - builder.set_proxy_config_service(std::move(proxy_config_service_)); - builder.set_throttling_enabled(true); - url_request_context_ = builder.Build(); - } - return url_request_context_.get(); -} - -scoped_refptr<base::SingleThreadTaskRunner> -ServiceURLRequestContextGetter::GetNetworkTaskRunner() const { - return network_task_runner_; -} - -ServiceURLRequestContextGetter::~ServiceURLRequestContextGetter() {}
diff --git a/chrome/service/net/service_url_request_context_getter.h b/chrome/service/net/service_url_request_context_getter.h deleted file mode 100644 index 488c54c..0000000 --- a/chrome/service/net/service_url_request_context_getter.h +++ /dev/null
@@ -1,53 +0,0 @@ -// Copyright 2014 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_SERVICE_NET_SERVICE_URL_REQUEST_CONTEXT_GETTER_H_ -#define CHROME_SERVICE_NET_SERVICE_URL_REQUEST_CONTEXT_GETTER_H_ - -#include <memory> -#include <string> - -#include "net/cookies/cookie_monster.h" -#include "net/disk_cache/disk_cache.h" -#include "net/http/http_auth_handler_factory.h" -#include "net/http/http_cache.h" -#include "net/http/http_network_layer.h" -#include "net/ssl/ssl_config_service_defaults.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_getter.h" -#include "net/url_request/url_request_context_storage.h" - -namespace base { -class SingleThreadTaskRunner; -} - -namespace net { -class ProxyConfigService; -} - -class ServiceURLRequestContextGetter : public net::URLRequestContextGetter { - public: - net::URLRequestContext* GetURLRequestContext() override; - scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() - const override; - - void set_user_agent(const std::string& ua) { - user_agent_ = ua; - } - std::string user_agent() const { - return user_agent_; - } - - private: - friend class ServiceProcess; - ServiceURLRequestContextGetter(); - ~ServiceURLRequestContextGetter() override; - - std::string user_agent_; - scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; - std::unique_ptr<net::ProxyConfigService> proxy_config_service_; - std::unique_ptr<net::URLRequestContext> url_request_context_; -}; - -#endif // CHROME_SERVICE_NET_SERVICE_URL_REQUEST_CONTEXT_GETTER_H_
diff --git a/chrome/service/service_ipc_server.cc b/chrome/service/service_ipc_server.cc deleted file mode 100644 index 86ba01a4..0000000 --- a/chrome/service/service_ipc_server.cc +++ /dev/null
@@ -1,79 +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 "chrome/service/service_ipc_server.h" - -#include <algorithm> -#include <memory> - -#include "base/bind.h" - -ServiceIPCServer::ServiceIPCServer( - Client* client, - const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, - base::WaitableEvent* shutdown_event) - : client_(client), - io_task_runner_(io_task_runner), - shutdown_event_(shutdown_event) { - DCHECK(client); - DCHECK(shutdown_event); - binder_registry_.AddInterface( - base::BindRepeating(&ServiceIPCServer::HandleServiceProcessConnection, - base::Unretained(this))); -} - -bool ServiceIPCServer::Init() { - CreateChannel(); - return true; -} - -void ServiceIPCServer::CreateChannel() { - receiver_.reset(); - - receiver_.Bind( - mojo::PendingReceiver<service_manager::mojom::InterfaceProvider>( - client_->CreateChannelMessagePipe())); - receiver_.set_disconnect_handler(base::BindOnce( - &ServiceIPCServer::OnChannelError, base::Unretained(this))); -} - -ServiceIPCServer::~ServiceIPCServer() = default; - -void ServiceIPCServer::OnChannelError() { - // When an IPC client (typically a browser process) disconnects, the pipe is - // closed and we get an OnChannelError. If we want to keep servicing requests, - // we will recreate the channel. - bool client_was_connected = ipc_client_connected_; - ipc_client_connected_ = false; - if (client_was_connected) { - if (client_->OnIPCClientDisconnect()) - CreateChannel(); - } else if (!ipc_client_connected_) { - // If the client was never even connected we had an error connecting. - LOG(ERROR) << "Unable to open service ipc channel"; - } -} - -void ServiceIPCServer::Hello(HelloCallback callback) { - ipc_client_connected_ = true; - std::move(callback).Run(); -} - -void ServiceIPCServer::ShutDown() { - client_->OnShutdown(); -} - -void ServiceIPCServer::UpdateAvailable() { - client_->OnUpdateAvailable(); -} - -void ServiceIPCServer::GetInterface(const std::string& interface_name, - mojo::ScopedMessagePipeHandle pipe) { - binder_registry_.BindInterface(interface_name, std::move(pipe)); -} - -void ServiceIPCServer::HandleServiceProcessConnection( - mojo::PendingReceiver<chrome::mojom::ServiceProcess> receiver) { - service_process_receivers_.Add(this, std::move(receiver)); -}
diff --git a/chrome/service/service_ipc_server.h b/chrome/service/service_ipc_server.h deleted file mode 100644 index 437c0cf..0000000 --- a/chrome/service/service_ipc_server.h +++ /dev/null
@@ -1,103 +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 CHROME_SERVICE_SERVICE_IPC_SERVER_H_ -#define CHROME_SERVICE_SERVICE_IPC_SERVER_H_ - -#include <stdint.h> - -#include <memory> -#include <vector> - -#include "base/memory/raw_ptr.h" -#include "base/task/single_thread_task_runner.h" -#include "chrome/common/service_process.mojom.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/receiver_set.h" -#include "mojo/public/cpp/system/message_pipe.h" -#include "services/service_manager/public/cpp/binder_registry.h" -#include "services/service_manager/public/mojom/interface_provider.mojom.h" - -namespace base { - -class WaitableEvent; - -} // namespace base - -// This class handles IPC commands for the service process. -class ServiceIPCServer : public service_manager::mojom::InterfaceProvider, - public chrome::mojom::ServiceProcess { - public: - class Client { - public: - virtual ~Client() {} - - // Called when the service process must shut down. - virtual void OnShutdown() = 0; - - // Called when a product update is available. - virtual void OnUpdateAvailable() = 0; - - // Called when the IPC channel is closed. A return value of true indicates - // that the IPC server should continue listening for new connections. - virtual bool OnIPCClientDisconnect() = 0; - - // Called to create a message pipe to use for an IPC Channel connection. - virtual mojo::ScopedMessagePipeHandle CreateChannelMessagePipe() = 0; - }; - - ServiceIPCServer( - Client* client, - const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, - base::WaitableEvent* shutdown_event); - - ServiceIPCServer(const ServiceIPCServer&) = delete; - ServiceIPCServer& operator=(const ServiceIPCServer&) = delete; - - ~ServiceIPCServer() override; - - bool Init(); - - service_manager::BinderRegistry& binder_registry() { - return binder_registry_; - } - - bool is_ipc_client_connected() const { return ipc_client_connected_; } - - private: - friend class ServiceIPCServerTest; - friend class MockServiceIPCServer; - - // Helper method to create the sync channel. - void CreateChannel(); - - void OnChannelError(); - - // chrome::mojom::ServiceProcess: - void Hello(HelloCallback callback) override; - void UpdateAvailable() override; - void ShutDown() override; - - // service_manager::mojom::InterfaceProvider: - void GetInterface(const std::string& interface_name, - mojo::ScopedMessagePipeHandle pipe) override; - - void HandleServiceProcessConnection( - mojo::PendingReceiver<chrome::mojom::ServiceProcess> receiver); - - raw_ptr<Client> client_; - scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; - raw_ptr<base::WaitableEvent> shutdown_event_; - - // Indicates whether an IPC client is currently connected to the channel. - bool ipc_client_connected_ = false; - - mojo::Receiver<service_manager::mojom::InterfaceProvider> receiver_{this}; - mojo::ReceiverSet<chrome::mojom::ServiceProcess> service_process_receivers_; - - service_manager::BinderRegistry binder_registry_; -}; - -#endif // CHROME_SERVICE_SERVICE_IPC_SERVER_H_
diff --git a/chrome/service/service_ipc_server_unittest.cc b/chrome/service/service_ipc_server_unittest.cc deleted file mode 100644 index 54d4e1b..0000000 --- a/chrome/service/service_ipc_server_unittest.cc +++ /dev/null
@@ -1,194 +0,0 @@ -// Copyright 2015 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/service/service_ipc_server.h" - -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/run_loop.h" -#include "base/synchronization/waitable_event.h" -#include "base/task/single_thread_task_runner.h" -#include "base/test/task_environment.h" -#include "base/threading/thread.h" -#include "build/build_config.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "mojo/public/cpp/system/message_pipe.h" -#include "services/service_manager/public/cpp/interface_provider.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { - -void PumpCurrentLoop() { - base::RunLoop(base::RunLoop::Type::kNestableTasksAllowed).RunUntilIdle(); -} - -class FakeServiceIPCServerClient : public ServiceIPCServer::Client { - public: - FakeServiceIPCServerClient() {} - ~FakeServiceIPCServerClient() override {} - void OnShutdown() override; - void OnUpdateAvailable() override; - bool OnIPCClientDisconnect() override; - mojo::ScopedMessagePipeHandle CreateChannelMessagePipe() override; - - int shutdown_calls_ = 0; - int update_available_calls_ = 0; - int ipc_client_disconnect_calls_ = 0; - mojo::PendingRemote<service_manager::mojom::InterfaceProvider> - interface_provider_; -}; - -void FakeServiceIPCServerClient::OnShutdown() { - shutdown_calls_++; -} - -void FakeServiceIPCServerClient::OnUpdateAvailable() { - update_available_calls_++; -} - -bool FakeServiceIPCServerClient::OnIPCClientDisconnect() { - ipc_client_disconnect_calls_++; - - // Always return true to indicate the server must continue listening for new - // connections. - return true; -} - -mojo::ScopedMessagePipeHandle -FakeServiceIPCServerClient::CreateChannelMessagePipe() { - return interface_provider_.InitWithNewPipeAndPassReceiver().PassPipe(); -} - -} // namespace - -class ServiceIPCServerTest : public ::testing::Test { - public: - ServiceIPCServerTest(); - ~ServiceIPCServerTest() override {} - void SetUp() override; - void TearDown() override; - void PumpLoops(); - - // Simulates the browser process connecting to the service process. - void ConnectClientChannel(); - - // Simulates the browser process shutting down. - void DestroyClientChannel(); - - protected: - FakeServiceIPCServerClient service_process_client_; - base::test::SingleThreadTaskEnvironment task_environment_{ - base::test::SingleThreadTaskEnvironment::MainThreadType::UI}; - base::Thread io_thread_; - base::WaitableEvent shutdown_event_; - std::unique_ptr<ServiceIPCServer> server_; - service_manager::InterfaceProvider remote_interfaces_{ - base::ThreadTaskRunnerHandle::Get()}; - mojo::Remote<chrome::mojom::ServiceProcess> service_process_; -}; - -ServiceIPCServerTest::ServiceIPCServerTest() - : io_thread_("ServiceIPCServerTest IO"), - shutdown_event_(base::WaitableEvent::ResetPolicy::MANUAL, - base::WaitableEvent::InitialState::NOT_SIGNALED) {} - -void ServiceIPCServerTest::SetUp() { - base::Thread::Options options; - mojo::MessagePipe channel; - options.message_pump_type = base::MessagePumpType::IO; - ASSERT_TRUE(io_thread_.StartWithOptions(std::move(options))); - - server_ = std::make_unique<ServiceIPCServer>( - &service_process_client_, io_thread_.task_runner(), &shutdown_event_); - server_->Init(); -} - -void ServiceIPCServerTest::TearDown() { - // Close the ipc channels to prevent memory leaks. - if (service_process_) { - remote_interfaces_.Close(); - service_process_.reset(); - PumpLoops(); - } - io_thread_.Stop(); -} - -void ServiceIPCServerTest::PumpLoops() { - base::RunLoop run_loop; - io_thread_.task_runner()->PostTaskAndReply( - FROM_HERE, base::BindOnce(&PumpCurrentLoop), run_loop.QuitClosure()); - run_loop.Run(); - PumpCurrentLoop(); -} - -void ServiceIPCServerTest::ConnectClientChannel() { - remote_interfaces_.Close(); - remote_interfaces_.Bind( - std::move(service_process_client_.interface_provider_)); - - remote_interfaces_.GetInterface( - service_process_.BindNewPipeAndPassReceiver()); - service_process_->Hello(base::DoNothing()); - PumpLoops(); -} - -void ServiceIPCServerTest::DestroyClientChannel() { - remote_interfaces_.Close(); - service_process_.reset(); - PumpLoops(); -} - -TEST_F(ServiceIPCServerTest, ConnectDisconnectReconnect) { - // Initially there is no ipc client connected. - ASSERT_FALSE(server_->is_ipc_client_connected()); - - // When a channel is connected the server is notified via OnChannelConnected. - ConnectClientChannel(); - ASSERT_TRUE(server_->is_ipc_client_connected()); - - // When the channel is destroyed the server is notified via OnChannelError. - // In turn, the server notifies its service process client. - DestroyClientChannel(); - ASSERT_FALSE(server_->is_ipc_client_connected()); - ASSERT_EQ(1, service_process_client_.ipc_client_disconnect_calls_); - - ConnectClientChannel(); - ASSERT_TRUE(server_->is_ipc_client_connected()); - service_process_->UpdateAvailable(); - PumpLoops(); - ASSERT_TRUE(server_->is_ipc_client_connected()); - - // Destroy the client process channel again to verify the - // ServiceIPCServer::Client is notified again. This means that unlike - // OnChannelConnected, OnChannelError is called more than once. - DestroyClientChannel(); - ASSERT_FALSE(server_->is_ipc_client_connected()); - ASSERT_EQ(2, service_process_client_.ipc_client_disconnect_calls_); -} - -TEST_F(ServiceIPCServerTest, Shutdown) { - ConnectClientChannel(); - ASSERT_TRUE(server_->is_ipc_client_connected()); - - // When a shutdown message is received, the ServiceIPCServer::Client is - // notified. - service_process_->ShutDown(); - PumpLoops(); - ASSERT_EQ(1, service_process_client_.shutdown_calls_); -} - -TEST_F(ServiceIPCServerTest, UpdateAvailable) { - ConnectClientChannel(); - ASSERT_TRUE(server_->is_ipc_client_connected()); - - // When a product update message is received, the ServiceIPCServer::Client is - // notified. - service_process_->UpdateAvailable(); - PumpLoops(); - ASSERT_EQ(1, service_process_client_.update_available_calls_); -}
diff --git a/chrome/service/service_main.cc b/chrome/service/service_main.cc deleted file mode 100644 index 39af2c42..0000000 --- a/chrome/service/service_main.cc +++ /dev/null
@@ -1,78 +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 "base/base_switches.h" -#include "base/debug/debugger.h" -#include "base/memory/shared_memory_hooks.h" -#include "base/message_loop/message_pump_type.h" -#include "base/run_loop.h" -#include "base/task/single_thread_task_executor.h" -#include "build/build_config.h" -#include "chrome/common/service_process_util.h" -#include "chrome/service/service_process.h" -#include "content/public/common/main_function_params.h" -#include "net/url_request/url_request.h" - -// Mainline routine for running as the Cloud Print service process. -int CloudPrintServiceProcessMain(content::MainFunctionParams parameters) { - // This is a hack: the Cloud Print service doesn't actually set up a sandbox, - // but sandbox::policy::SandboxTypeFromCommandLine(command_line)) doesn't know - // about it, so it's considered sandboxed, causing shared memory hooks to be - // installed above. The Cloud Print service *also* doesn't set - // is_broker_process when initializing Mojo, so that bit also can't be used to - // determine whether or not to install the shared memory hooks. - // - // Since the Cloud Print service is supposed to go away at some point soon, - // just remove the hooks here. - base::SharedMemoryHooks::SetCreateHooks(nullptr, nullptr, nullptr); - - // Chrome disallows cookies by default. All code paths that want to use - // cookies should go through the browser process. - net::URLRequest::SetDefaultCookiePolicyToBlock(); - - base::PlatformThread::SetName("CrServiceMain"); - -#if defined(OS_WIN) - // The service process needs to be able to process WM_QUIT messages from the - // Cloud Print Service UI on Windows. - base::SingleThreadTaskExecutor main_task_executor( - base::MessagePumpType::UI_WITH_WM_QUIT_SUPPORT); -#else - base::SingleThreadTaskExecutor main_task_executor(base::MessagePumpType::UI); -#endif - - if (parameters.command_line->HasSwitch(switches::kWaitForDebugger)) { - base::debug::WaitForDebugger(60, true); - } - - VLOG(1) << "Service process launched: " - << parameters.command_line->GetCommandLineString(); - - auto initialize_service = [](ServiceProcessState* service) { - for (int i = 0; i < 10; ++i) { - if (service->Initialize()) - return true; - base::PlatformThread::Sleep(base::Milliseconds(i * 100)); - } - return false; - }; - - // If there is already a service process running, quit now. Retry a few times - // in case the running service is busy exiting. - // TODO(ellyjones): Are these retries actually necessary / can this case - // happen in practice? - auto state = std::make_unique<ServiceProcessState>(); - if (!initialize_service(state.get())) - return 0; - - base::RunLoop run_loop; - ServiceProcess service_process; - if (service_process.Initialize(run_loop.QuitClosure(), - *parameters.command_line, std::move(state))) { - run_loop.Run(); - } else { - LOG(ERROR) << "Service process failed to initialize"; - } - return 0; -}
diff --git a/chrome/service/service_process.cc b/chrome/service/service_process.cc deleted file mode 100644 index 11dacf9f..0000000 --- a/chrome/service/service_process.cc +++ /dev/null
@@ -1,450 +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 "chrome/service/service_process.h" - -#include <algorithm> -#include <memory> -#include <string> -#include <utility> -#include <vector> - -#include "base/base_switches.h" -#include "base/bind.h" -#include "base/callback.h" -#include "base/command_line.h" -#include "base/environment.h" -#include "base/i18n/rtl.h" -#include "base/location.h" -#include "base/memory/singleton.h" -#include "base/message_loop/message_pump_type.h" -#include "base/path_service.h" -#include "base/run_loop.h" -#include "base/strings/utf_string_conversions.h" -#include "base/synchronization/waitable_event.h" -#include "base/task/post_task.h" -#include "base/task/single_thread_task_runner.h" -#include "base/task/thread_pool.h" -#include "base/task/thread_pool/thread_pool_instance.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/time/time.h" -#include "base/values.h" -#include "build/build_config.h" -#include "chrome/common/chrome_constants.h" -#include "chrome/common/chrome_paths.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/env_vars.h" -#include "chrome/common/pref_names.h" -#include "chrome/common/service_process_util.h" -#include "chrome/grit/chromium_strings.h" -#include "chrome/grit/generated_resources.h" -#include "chrome/service/cloud_print/cloud_print_message_handler.h" -#include "chrome/service/cloud_print/cloud_print_proxy.h" -#include "chrome/service/net/service_url_request_context_getter.h" -#include "chrome/service/service_process_prefs.h" -#include "components/language/core/browser/pref_names.h" -#include "components/language/core/common/locale_util.h" -#include "components/network_session_configurator/common/network_switches.h" -#include "components/prefs/json_pref_store.h" -#include "mojo/core/embedder/embedder.h" -#include "mojo/core/embedder/scoped_ipc_support.h" -#include "net/base/network_change_notifier.h" -#include "net/url_request/url_fetcher.h" -#include "services/network/public/cpp/network_switches.h" -#include "ui/base/l10n/l10n_util.h" -#include "ui/base/resource/resource_bundle.h" -#include "ui/base/ui_base_switches.h" - -#if defined(USE_GLIB) -#include <glib-object.h> -#endif - -ServiceProcess* g_service_process = NULL; - -namespace { - -// Delay in seconds after the last service is disabled before we attempt -// a shutdown. -const int kShutdownDelaySeconds = 60; - -const char kDefaultServiceProcessLocale[] = "en-US"; - -class ServiceIOThread : public base::Thread { - public: - explicit ServiceIOThread(const char* name); - - ServiceIOThread(const ServiceIOThread&) = delete; - ServiceIOThread& operator=(const ServiceIOThread&) = delete; - - ~ServiceIOThread() override; - - protected: - void CleanUp() override; -}; - -ServiceIOThread::ServiceIOThread(const char* name) : base::Thread(name) {} -ServiceIOThread::~ServiceIOThread() { - Stop(); -} - -void ServiceIOThread::CleanUp() { - net::URLFetcher::CancelAll(); -} - -// Prepares the localized strings that are going to be displayed to -// the user if the service process dies. These strings are stored in the -// environment block so they are accessible in the early stages of the -// chrome executable's lifetime. -void PrepareRestartOnCrashEnviroment( - const base::CommandLine& parsed_command_line) { - std::unique_ptr<base::Environment> env(base::Environment::Create()); - // Clear this var so child processes don't show the dialog by default. - env->UnSetVar(env_vars::kShowRestart); - - // For non-interactive tests we don't restart on crash. - if (env->HasVar(env_vars::kHeadless)) - return; - - // If the known command-line test options are used we don't create the - // environment block which means we don't get the restart dialog. - if (parsed_command_line.HasSwitch(switches::kNoErrorDialogs)) - return; - - // The encoding we use for the info is "title|context|direction" where - // direction is either env_vars::kRtlLocale or env_vars::kLtrLocale depending - // on the current locale. - std::u16string dlg_strings( - l10n_util::GetStringUTF16(IDS_CRASH_RECOVERY_TITLE)); - dlg_strings.push_back('|'); - std::u16string adjusted_string(l10n_util::GetStringFUTF16( - IDS_SERVICE_CRASH_RECOVERY_CONTENT, - l10n_util::GetStringUTF16(IDS_GOOGLE_CLOUD_PRINT))); - base::i18n::AdjustStringForLocaleDirection(&adjusted_string); - dlg_strings.append(adjusted_string); - dlg_strings.push_back('|'); - dlg_strings.append(base::ASCIIToUTF16( - base::i18n::IsRTL() ? env_vars::kRtlLocale : env_vars::kLtrLocale)); - - env->SetVar(env_vars::kRestartInfo, base::UTF16ToUTF8(dlg_strings)); -} - -} // namespace - -ServiceProcess::ServiceProcess() - : shutdown_event_(base::WaitableEvent::ResetPolicy::MANUAL, - base::WaitableEvent::InitialState::NOT_SIGNALED), - enabled_services_(0), - update_available_(false) { - DCHECK(!g_service_process); - g_service_process = this; -} - -bool ServiceProcess::Initialize(base::OnceClosure quit_closure, - const base::CommandLine& command_line, - std::unique_ptr<ServiceProcessState> state) { -#if defined(USE_GLIB) - // g_type_init has been deprecated since version 2.35. -#if !GLIB_CHECK_VERSION(2, 35, 0) - // Unclear if still needed, but harmless so keeping. - g_type_init(); -#endif -#endif // defined(USE_GLIB) - quit_closure_ = std::move(quit_closure); - service_process_state_ = std::move(state); - - // Initialize ThreadPool. - constexpr int kMaxForegroundThreads = 6; - base::ThreadPoolInstance::InitParams thread_pool_init_params( - kMaxForegroundThreads); -#if defined(OS_WIN) - // TODO(robliao): Remove DEPRECATED_COM_STA_IN_FOREGROUND_GROUP usage. - // WIP: https://chromium-review.googlesource.com/c/chromium/src/+/1271099 - thread_pool_init_params.common_thread_pool_environment = - base::ThreadPoolInstance::InitParams::CommonThreadPoolEnvironment:: - DEPRECATED_COM_STA_IN_FOREGROUND_GROUP; -#endif - - base::ThreadPoolInstance::Create("CloudPrintServiceProcess"); - base::ThreadPoolInstance::Get()->Start(thread_pool_init_params); - - // The NetworkChangeNotifier must be created after ThreadPool because it - // posts tasks to it. - network_change_notifier_ = net::NetworkChangeNotifier::CreateIfNeeded(); - network_connection_tracker_ = - std::make_unique<InProcessNetworkConnectionTracker>(); - - // Initialize the IO and FILE threads. - base::Thread::Options options; - options.message_pump_type = base::MessagePumpType::IO; - io_thread_ = std::make_unique<ServiceIOThread>("ServiceProcess_IO"); - if (!io_thread_->StartWithOptions(std::move(options))) { - NOTREACHED(); - Teardown(); - return false; - } - - // Initialize Mojo early so things can use it. - mojo::core::Init(); - mojo_ipc_support_ = std::make_unique<mojo::core::ScopedIPCSupport>( - io_thread_->task_runner(), - mojo::core::ScopedIPCSupport::ShutdownPolicy::FAST); - - request_context_getter_ = new ServiceURLRequestContextGetter(); - - base::FilePath user_data_dir; - base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); - base::FilePath pref_path = - user_data_dir.Append(chrome::kServiceStateFileName); - service_prefs_ = std::make_unique<ServiceProcessPrefs>( - pref_path, - base::ThreadPool::CreateSequencedTaskRunner( - {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN}) - .get()); - service_prefs_->ReadPrefs(); - - // This switch it required to run connector with test gaia. - if (command_line.HasSwitch(network::switches::kIgnoreUrlFetcherCertRequests)) - net::URLFetcher::SetIgnoreCertificateRequests(true); - - // Check if a locale override has been specified on the command-line. - std::string locale = command_line.GetSwitchValueASCII(switches::kLang); - if (!locale.empty()) { - service_prefs_->SetString(language::prefs::kApplicationLocale, locale); - service_prefs_->WritePrefs(); - } else { - // If no command-line value was specified, read the last used locale from - // the prefs. - locale = service_prefs_->GetString(language::prefs::kApplicationLocale, - std::string()); - language::ConvertToActualUILocale(&locale); - // If no locale was specified anywhere, use the default one. - if (locale.empty()) - locale = kDefaultServiceProcessLocale; - } - ui::ResourceBundle::InitSharedInstanceWithLocale( - locale, NULL, ui::ResourceBundle::LOAD_COMMON_RESOURCES); - - PrepareRestartOnCrashEnviroment(command_line); - - // Enable Cloud Print if needed. First check the command-line. - // Then check if the cloud print proxy was previously enabled. - if (command_line.HasSwitch(switches::kEnableCloudPrintProxy) || - service_prefs_->GetBoolean(prefs::kCloudPrintProxyEnabled, false)) { - GetCloudPrintProxy()->EnableForUser(); - } - - VLOG(1) << "Starting Service Process IPC Server"; - - ipc_server_ = std::make_unique<ServiceIPCServer>( - this /* client */, io_task_runner(), &shutdown_event_); - ipc_server_->binder_registry().AddInterface(base::BindRepeating( - &cloud_print::CloudPrintMessageHandler::Create, this)); - ipc_server_->Init(); - - // After the IPC server has started we signal that the service process is - // ready. - if (!service_process_state_->SignalReady( - io_task_runner().get(), - base::BindOnce(&ServiceProcess::Terminate, base::Unretained(this)))) { - return false; - } - - // See if we need to stay running. - ScheduleShutdownCheck(); - - return true; -} - -bool ServiceProcess::Teardown() { - service_prefs_.reset(); - cloud_print_proxy_.reset(); - - mojo_ipc_support_.reset(); - ipc_server_.reset(); - - // On POSIX, this must be called before joining |io_thread_| because it posts - // a DeleteSoon() task to that thread. - service_process_state_->SignalStopped(); - - // Signal this event before shutting down the service process. That way all - // background threads can cleanup. - shutdown_event_.Signal(); - io_thread_.reset(); - - if (base::ThreadPoolInstance::Get()) - base::ThreadPoolInstance::Get()->Shutdown(); - - // The NetworkChangeNotifier must be destroyed after all other threads that - // might use it have been shut down. - network_change_notifier_.reset(); - - return true; -} - -// This method is called when a shutdown command is received from IPC channel -// or there was an error in the IPC channel. -void ServiceProcess::Shutdown() { -#if defined(OS_MAC) - // On MacOS X the service must be removed from the launchd job list. - // http://www.chromium.org/developers/design-documents/service-processes - // The best way to do that is to go through the ForceServiceProcessShutdown - // path. If it succeeds Terminate() will be called from the handler registered - // via service_process_state_->SignalReady(). - // On failure call Terminate() directly to force the process to actually - // terminate. - if (!ForceServiceProcessShutdown("", 0)) { - Terminate(); - } -#else - Terminate(); -#endif -} - -void ServiceProcess::Terminate() { - std::move(quit_closure_).Run(); -} - -void ServiceProcess::OnShutdown() { - Shutdown(); -} - -void ServiceProcess::OnUpdateAvailable() { - update_available_ = true; -} - -bool ServiceProcess::OnIPCClientDisconnect() { - // If there are no enabled services or if there is an update available - // we want to shutdown right away. Else we want to keep listening for - // new connections. - if (!enabled_services_ || update_available_) { - Shutdown(); - return false; - } - return true; -} - -mojo::ScopedMessagePipeHandle ServiceProcess::CreateChannelMessagePipe() { -#if defined(OS_MAC) - if (!server_endpoint_.is_valid()) { - server_endpoint_ = - service_process_state_->GetServiceProcessServerEndpoint(); - DCHECK(server_endpoint_.is_valid()); - } -#elif defined(OS_POSIX) - if (!server_endpoint_.is_valid()) { - mojo::NamedPlatformChannel::Options options; - options.server_name = service_process_state_->GetServiceProcessServerName(); - mojo::NamedPlatformChannel server_channel(options); - server_endpoint_ = server_channel.TakeServerEndpoint(); - DCHECK(server_endpoint_.is_valid()); - } -#elif defined(OS_WIN) - if (server_name_.empty()) { - server_name_ = service_process_state_->GetServiceProcessServerName(); - DCHECK(!server_name_.empty()); - } -#endif - - mojo::PlatformChannelServerEndpoint server_endpoint; -#if defined(OS_MAC) - // Mach receive rights (named server channels) are not Clone-able. - server_endpoint = std::move(server_endpoint_); -#elif defined(OS_POSIX) - server_endpoint = server_endpoint_.Clone(); -#elif defined(OS_WIN) - mojo::NamedPlatformChannel::Options options; - options.server_name = server_name_; - options.enforce_uniqueness = false; - mojo::NamedPlatformChannel server_channel(options); - server_endpoint = server_channel.TakeServerEndpoint(); -#endif - CHECK(server_endpoint.is_valid()); - - mojo_connection_ = std::make_unique<mojo::IsolatedConnection>(); - return mojo_connection_->Connect(std::move(server_endpoint)); -} - -cloud_print::CloudPrintProxy* ServiceProcess::GetCloudPrintProxy() { - if (!cloud_print_proxy_.get()) { - cloud_print_proxy_ = std::make_unique<cloud_print::CloudPrintProxy>(); - cloud_print_proxy_->Initialize(service_prefs_.get(), this, - network_connection_tracker_.get()); - } - return cloud_print_proxy_.get(); -} - -void ServiceProcess::OnCloudPrintProxyEnabled(bool persist_state) { - if (persist_state) { - // Save the preference that we have enabled the cloud print proxy. - service_prefs_->SetBoolean(prefs::kCloudPrintProxyEnabled, true); - service_prefs_->WritePrefs(); - } - OnServiceEnabled(); -} - -void ServiceProcess::OnCloudPrintProxyDisabled(bool persist_state) { - if (persist_state) { - // Save the preference that we have disabled the cloud print proxy. - service_prefs_->SetBoolean(prefs::kCloudPrintProxyEnabled, false); - service_prefs_->WritePrefs(); - } - OnServiceDisabled(); -} - -ServiceURLRequestContextGetter* -ServiceProcess::GetServiceURLRequestContextGetter() { - DCHECK(request_context_getter_.get()); - return request_context_getter_.get(); -} - -void ServiceProcess::OnServiceEnabled() { - enabled_services_++; - if ((1 == enabled_services_) && - !base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kNoServiceAutorun)) { - if (!service_process_state_->AddToAutoRun()) { - // TODO(scottbyer/sanjeevr/dmaclach): Handle error condition - LOG(ERROR) << "Unable to AddToAutoRun"; - } - } -} - -void ServiceProcess::OnServiceDisabled() { - DCHECK_NE(enabled_services_, 0); - enabled_services_--; - if (0 == enabled_services_) { - if (!service_process_state_->RemoveFromAutoRun()) { - // TODO(scottbyer/sanjeevr/dmaclach): Handle error condition - LOG(ERROR) << "Unable to RemoveFromAutoRun"; - } - // We will wait for some time to respond to IPCs before shutting down. - ScheduleShutdownCheck(); - } -} - -void ServiceProcess::ScheduleShutdownCheck() { - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&ServiceProcess::ShutdownIfNeeded, base::Unretained(this)), - base::Seconds(kShutdownDelaySeconds)); -} - -void ServiceProcess::ShutdownIfNeeded() { - if (0 == enabled_services_) { - if (ipc_server_->is_ipc_client_connected()) { - // If there is an IPC client connected, we need to try again later. - // Note that there is still a timing window here because a client may - // decide to connect at this point. - // TODO(sanjeevr): Fix this timing window. - ScheduleShutdownCheck(); - } else { - Shutdown(); - } - } -} - -ServiceProcess::~ServiceProcess() { - Teardown(); - g_service_process = NULL; -}
diff --git a/chrome/service/service_process.h b/chrome/service/service_process.h deleted file mode 100644 index fe190d54..0000000 --- a/chrome/service/service_process.h +++ /dev/null
@@ -1,152 +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 CHROME_SERVICE_SERVICE_PROCESS_H_ -#define CHROME_SERVICE_SERVICE_PROCESS_H_ - -#include <memory> - -#include "base/memory/ref_counted.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/thread.h" -#include "build/build_config.h" -#include "chrome/service/cloud_print/cloud_print_proxy.h" -#include "chrome/service/net/in_process_network_connection_tracker.h" -#include "chrome/service/service_ipc_server.h" -#include "mojo/public/cpp/platform/named_platform_channel.h" -#include "mojo/public/cpp/platform/platform_channel_server_endpoint.h" -#include "mojo/public/cpp/system/isolated_connection.h" -#include "mojo/public/cpp/system/message_pipe.h" - -class ServiceProcessPrefs; -class ServiceURLRequestContextGetter; -class ServiceProcessState; - -namespace base { -class CommandLine; -class WaitableEvent; -} - -namespace mojo { -class IsolatedConnection; -namespace core { -class ScopedIPCSupport; -} -} - -namespace net { -class NetworkChangeNotifier; -} - -// The ServiceProcess does not inherit from ChildProcess because this -// process can live independently of the browser process. -// ServiceProcess Design Notes -// https://sites.google.com/a/chromium.org/dev/developers/design-documents/service-processes -class ServiceProcess : public ServiceIPCServer::Client, - public cloud_print::CloudPrintProxy::Client, - public cloud_print::CloudPrintProxy::Provider { - public: - ServiceProcess(); - - ServiceProcess(const ServiceProcess&) = delete; - ServiceProcess& operator=(const ServiceProcess&) = delete; - - ~ServiceProcess() override; - - // Initialize the ServiceProcess. |quit_closure| will be run when the service - // process is ready to exit. - bool Initialize(base::OnceClosure quit_closure, - const base::CommandLine& command_line, - std::unique_ptr<ServiceProcessState> state); - - bool Teardown(); - - // Returns the SingleThreadTaskRunner for the service process io thread (used - // for e.g. network requests and IPC). Returns null before Initialize is - // called and after Teardown is called. - scoped_refptr<base::SingleThreadTaskRunner> io_task_runner() { - return io_thread_ ? io_thread_->task_runner() : nullptr; - } - - // A global event object that is signalled when the main thread's message - // loop exits. This gives background threads a way to observe the main - // thread shutting down. - base::WaitableEvent* GetShutdownEventForTesting() { - return &shutdown_event_; - } - - // Shuts down the service process. - void Shutdown(); - - // ServiceIPCServer::Client implementation. - void OnShutdown() override; - void OnUpdateAvailable() override; - bool OnIPCClientDisconnect() override; - mojo::ScopedMessagePipeHandle CreateChannelMessagePipe() override; - - // CloudPrintProxy::Provider implementation. - cloud_print::CloudPrintProxy* GetCloudPrintProxy() override; - - // CloudPrintProxy::Client implementation. - void OnCloudPrintProxyEnabled(bool persist_state) override; - void OnCloudPrintProxyDisabled(bool persist_state) override; - - ServiceURLRequestContextGetter* GetServiceURLRequestContextGetter(); - - private: - friend class TestServiceProcess; - - // Schedule a call to ShutdownIfNeeded. - void ScheduleShutdownCheck(); - - // Shuts down the process if no services are enabled and no IPC client is - // connected. - void ShutdownIfNeeded(); - - // Called exactly ONCE per process instance for each service that gets - // enabled in this process. - void OnServiceEnabled(); - - // Called exactly ONCE per process instance for each service that gets - // disabled in this process (note that shutdown != disabled). - void OnServiceDisabled(); - - // Terminate forces the service process to quit. - void Terminate(); - - std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_; - std::unique_ptr<InProcessNetworkConnectionTracker> - network_connection_tracker_; - std::unique_ptr<base::Thread> io_thread_; - std::unique_ptr<cloud_print::CloudPrintProxy> cloud_print_proxy_; - std::unique_ptr<ServiceProcessPrefs> service_prefs_; - std::unique_ptr<ServiceIPCServer> ipc_server_; - std::unique_ptr<ServiceProcessState> service_process_state_; - std::unique_ptr<mojo::core::ScopedIPCSupport> mojo_ipc_support_; - std::unique_ptr<mojo::IsolatedConnection> mojo_connection_; - - // An event that will be signalled when we shutdown. - base::WaitableEvent shutdown_event_; - - // Closure to run to cause the main message loop to exit. - base::OnceClosure quit_closure_; - - // Count of currently enabled services in this process. - int enabled_services_; - - // Speficies whether a product update is available. - bool update_available_; - - scoped_refptr<ServiceURLRequestContextGetter> request_context_getter_; - -#if defined(OS_POSIX) - mojo::PlatformChannelServerEndpoint server_endpoint_; -#elif defined(OS_WIN) - mojo::NamedPlatformChannel::ServerName server_name_; -#endif -}; - -extern ServiceProcess* g_service_process; - -#endif // CHROME_SERVICE_SERVICE_PROCESS_H_
diff --git a/chrome/service/service_process_prefs.cc b/chrome/service/service_process_prefs.cc deleted file mode 100644 index 1aeea1d..0000000 --- a/chrome/service/service_process_prefs.cc +++ /dev/null
@@ -1,103 +0,0 @@ -// Copyright (c) 2011 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/service/service_process_prefs.h" - -#include <utility> - -#include "base/threading/thread_task_runner_handle.h" -#include "base/values.h" -#include "components/prefs/pref_filter.h" - -ServiceProcessPrefs::ServiceProcessPrefs(const base::FilePath& pref_filename, - base::SequencedTaskRunner* task_runner) - : prefs_(new JsonPrefStore(pref_filename, - std::unique_ptr<PrefFilter>(), - task_runner)) {} - -ServiceProcessPrefs::~ServiceProcessPrefs() {} - -void ServiceProcessPrefs::ReadPrefs() { - prefs_->ReadPrefs(); -} - -void ServiceProcessPrefs::WritePrefs() { - prefs_->CommitPendingWrite(base::OnceClosure()); -} - -std::string ServiceProcessPrefs::GetString( - const std::string& key, - const std::string& default_value) const { - const base::Value* value; - if (!prefs_->GetValue(key, &value)) - return default_value; - const std::string* result = value->GetIfString(); - return result ? *result : default_value; -} - -void ServiceProcessPrefs::SetString(const std::string& key, - const std::string& value) { - prefs_->SetValue(key, std::make_unique<base::Value>(value), - WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); -} - -bool ServiceProcessPrefs::GetBoolean(const std::string& key, - bool default_value) const { - const base::Value* value; - if (!prefs_->GetValue(key, &value) || !value->is_bool()) - return default_value; - - return value->GetBool(); -} - -void ServiceProcessPrefs::SetBoolean(const std::string& key, bool value) { - prefs_->SetValue(key, std::make_unique<base::Value>(value), - WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); -} - -int ServiceProcessPrefs::GetInt(const std::string& key, - int default_value) const { - const base::Value* value; - if (!prefs_->GetValue(key, &value)) - return default_value; - - return value->GetIfInt().value_or(default_value); -} - -void ServiceProcessPrefs::SetInt(const std::string& key, int value) { - prefs_->SetValue(key, std::make_unique<base::Value>(value), - WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); -} - -const base::DictionaryValue* ServiceProcessPrefs::GetDictionary( - const std::string& key) const { - const base::Value* value; - if (!prefs_->GetValue(key, &value)) - return nullptr; - - const base::DictionaryValue* dict_value = nullptr; - value->GetAsDictionary(&dict_value); - return dict_value; -} - -const base::Value* ServiceProcessPrefs::GetList(const std::string& key) const { - const base::Value* value; - if (!prefs_->GetValue(key, &value)) - return nullptr; - - if (!value || !value->is_list()) - return nullptr; - - return value; -} - -void ServiceProcessPrefs::SetValue(const std::string& key, - std::unique_ptr<base::Value> value) { - prefs_->SetValue(key, std::move(value), - WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); -} - -void ServiceProcessPrefs::RemovePref(const std::string& key) { - prefs_->RemoveValue(key, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); -}
diff --git a/chrome/service/service_process_prefs.h b/chrome/service/service_process_prefs.h deleted file mode 100644 index 9037320..0000000 --- a/chrome/service/service_process_prefs.h +++ /dev/null
@@ -1,72 +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 CHROME_SERVICE_SERVICE_PROCESS_PREFS_H_ -#define CHROME_SERVICE_SERVICE_PROCESS_PREFS_H_ - -#include <memory> -#include <string> - -#include "components/prefs/json_pref_store.h" - -namespace base { -class DictionaryValue; -class SequencedTaskRunner; -} - -// Manages persistent preferences for the service process. This is basically a -// thin wrapper around JsonPrefStore for more comfortable use. -class ServiceProcessPrefs { - public: - // |sequenced_task_runner| must be a shutdown-blocking task runner. - ServiceProcessPrefs(const base::FilePath& pref_filename, - base::SequencedTaskRunner* task_runner); - - ServiceProcessPrefs(const ServiceProcessPrefs&) = delete; - ServiceProcessPrefs& operator=(const ServiceProcessPrefs&) = delete; - - ~ServiceProcessPrefs(); - - // Read preferences from the backing file. - void ReadPrefs(); - - // Write the data to the backing file. - void WritePrefs(); - - // Returns a string preference for |key|. - std::string GetString(const std::string& key, - const std::string& default_value) const; - - // Set a string |value| for |key|. - void SetString(const std::string& key, const std::string& value); - - // Returns a boolean preference for |key|. - bool GetBoolean(const std::string& key, bool default_value) const; - - // Set a boolean |value| for |key|. - void SetBoolean(const std::string& key, bool value); - - // Returns an int preference for |key|. - int GetInt(const std::string& key, int default_value) const; - - // Set an int |value| for |key|. - void SetInt(const std::string& key, int value); - - // Returns a dictionary preference for |key|. - const base::DictionaryValue* GetDictionary(const std::string& key) const; - - // Returns a list for |key|. - const base::Value* GetList(const std::string& key) const; - - // Set a |value| for |key|. - void SetValue(const std::string& key, std::unique_ptr<base::Value> value); - - // Removes the pref specified by |key|. - void RemovePref(const std::string& key); - - private: - scoped_refptr<JsonPrefStore> prefs_; -}; - -#endif // CHROME_SERVICE_SERVICE_PROCESS_PREFS_H_
diff --git a/chrome/service/service_process_prefs_unittest.cc b/chrome/service/service_process_prefs_unittest.cc deleted file mode 100644 index c0813c55..0000000 --- a/chrome/service/service_process_prefs_unittest.cc +++ /dev/null
@@ -1,46 +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 <memory> -#include <string> - -#include "base/files/scoped_temp_dir.h" -#include "base/run_loop.h" -#include "base/task/sequenced_task_runner.h" -#include "base/test/task_environment.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/service/service_process_prefs.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -class ServiceProcessPrefsTest : public testing::Test { - protected: - void SetUp() override { - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - - prefs_ = std::make_unique<ServiceProcessPrefs>( - temp_dir_.GetPath().AppendASCII("service_process_prefs.txt"), - base::ThreadTaskRunnerHandle::Get().get()); - } - - void TearDown() override { prefs_.reset(); } - - // The path to temporary directory used to contain the test operations. - base::ScopedTempDir temp_dir_; - base::test::SingleThreadTaskEnvironment task_environment_; - std::unique_ptr<ServiceProcessPrefs> prefs_; -}; - -// Test ability to retrieve prefs -TEST_F(ServiceProcessPrefsTest, RetrievePrefs) { - prefs_->SetBoolean("testb", true); - prefs_->SetString("tests", "testvalue"); - prefs_->WritePrefs(); - base::RunLoop().RunUntilIdle(); - prefs_->SetBoolean("testb", false); // overwrite - prefs_->SetString("tests", std::string()); // overwrite - prefs_->ReadPrefs(); - EXPECT_EQ(prefs_->GetBoolean("testb", false), true); - EXPECT_EQ(prefs_->GetString("tests", std::string()), "testvalue"); -}
diff --git a/chrome/service/service_utility_process_host.cc b/chrome/service/service_utility_process_host.cc deleted file mode 100644 index ea86fa0..0000000 --- a/chrome/service/service_utility_process_host.cc +++ /dev/null
@@ -1,484 +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 "chrome/service/service_utility_process_host.h" - -#include <stdint.h> - -#include <limits> -#include <utility> -#include <vector> - -#include "base/base_switches.h" -#include "base/bind.h" -#include "base/command_line.h" -#include "base/cxx17_backports.h" -#include "base/files/file.h" -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/logging.h" -#include "base/process/launch.h" -#include "base/process/process_handle.h" -#include "base/rand_util.h" -#include "base/strings/string_number_conversions.h" -#include "base/task/single_thread_task_runner.h" -#include "base/task/task_runner_util.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/win/win_util.h" -#include "build/build_config.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/cloud_print_utility.mojom.h" -#include "chrome/services/printing/public/mojom/pdf_to_emf_converter.mojom.h" -#include "content/public/common/child_process_host.h" -#include "content/public/common/content_switches.h" -#include "content/public/common/font_cache_dispatcher_win.h" -#include "content/public/common/result_codes.h" -#include "content/public/common/sandbox_init_win.h" -#include "content/public/common/sandboxed_process_launcher_delegate.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "mojo/public/cpp/platform/named_platform_channel.h" -#include "mojo/public/cpp/platform/platform_channel.h" -#include "mojo/public/cpp/platform/platform_channel_endpoint.h" -#include "mojo/public/cpp/system/invitation.h" -#include "mojo/public/cpp/system/platform_handle.h" -#include "printing/emf_win.h" -#include "sandbox/policy/mojom/sandbox.mojom.h" -#include "sandbox/policy/sandbox_type.h" -#include "sandbox/policy/switches.h" -#include "sandbox/win/src/sandbox_policy.h" -#include "sandbox/win/src/sandbox_types.h" -#include "ui/base/ui_base_switches.h" - -namespace { - -using content::ChildProcessHost; - -enum ServiceUtilityProcessHostEvent { - SERVICE_UTILITY_STARTED, - SERVICE_UTILITY_DISCONNECTED, - SERVICE_UTILITY_METAFILE_REQUEST, - SERVICE_UTILITY_METAFILE_SUCCEEDED, - SERVICE_UTILITY_METAFILE_FAILED, - SERVICE_UTILITY_CAPS_REQUEST, - SERVICE_UTILITY_CAPS_SUCCEEDED, - SERVICE_UTILITY_CAPS_FAILED, - SERVICE_UTILITY_SEMANTIC_CAPS_REQUEST, - SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED, - SERVICE_UTILITY_SEMANTIC_CAPS_FAILED, - SERVICE_UTILITY_FAILED_TO_START, - SERVICE_UTILITY_EVENT_MAX, -}; - -// NOTE: changes to this class need to be reviewed by the security team. -class ServiceSandboxedProcessLauncherDelegate - : public content::SandboxedProcessLauncherDelegate { - public: - ServiceSandboxedProcessLauncherDelegate() {} - - ServiceSandboxedProcessLauncherDelegate( - const ServiceSandboxedProcessLauncherDelegate&) = delete; - ServiceSandboxedProcessLauncherDelegate& operator=( - const ServiceSandboxedProcessLauncherDelegate&) = delete; - - bool PreSpawnTarget(sandbox::TargetPolicy* policy) override { - // Ignore result of SetAlternateDesktop. Service process may run as windows - // service and it fails to create a window station. - base::IgnoreResult(policy->SetAlternateDesktop(false)); - return true; - } - - sandbox::mojom::Sandbox GetSandboxType() override { - return sandbox::mojom::Sandbox::kPdfConversion; - } -}; - -// This implementation does not do any font pre-caching. -// TODO(thestig): Can this be deleted and the PdfToEmfConverterClient be made -// optional? -class ServicePdfToEmfConverterClientImpl - : public printing::mojom::PdfToEmfConverterClient { - public: - explicit ServicePdfToEmfConverterClientImpl( - mojo::PendingReceiver<printing::mojom::PdfToEmfConverterClient> receiver) - : receiver_(this, std::move(receiver)) {} - - private: - // mojom::PdfToEmfConverterClient: - void PreCacheFontCharacters( - const std::vector<uint8_t>& logfont_data, - const std::u16string& characters, - PreCacheFontCharactersCallback callback) override { - std::move(callback).Run(); - } - - mojo::Receiver<printing::mojom::PdfToEmfConverterClient> receiver_; -}; - -} // namespace - -class ServiceUtilityProcessHost::PdfToEmfState { - public: - explicit PdfToEmfState(base::WeakPtr<ServiceUtilityProcessHost> host) - : weak_host_(host) {} - - ~PdfToEmfState() { Stop(); } - - bool Start(base::ReadOnlySharedMemoryRegion pdf_region, - const printing::PdfRenderSettings& conversion_settings) { - weak_host_->GetHost()->BindReceiver( - pdf_to_emf_converter_factory_.BindNewPipeAndPassReceiver()); - - pdf_to_emf_converter_factory_.set_disconnect_handler(base::BindOnce( - &PdfToEmfState::OnFailed, weak_host_, - std::string("Connection to PdfToEmfConverterFactory error."))); - - mojo::PendingRemote<printing::mojom::PdfToEmfConverterClient> - pdf_to_emf_converter_client_remote; - pdf_to_emf_converter_client_impl_ = - std::make_unique<ServicePdfToEmfConverterClientImpl>( - pdf_to_emf_converter_client_remote - .InitWithNewPipeAndPassReceiver()); - - pdf_to_emf_converter_factory_->CreateConverter( - std::move(pdf_region), conversion_settings, - std::move(pdf_to_emf_converter_client_remote), - base::BindOnce( - &ServiceUtilityProcessHost::OnRenderPDFPagesToMetafilesPageCount, - weak_host_)); - return true; - } - - void GotPageCount( - mojo::PendingRemote<printing::mojom::PdfToEmfConverter> converter, - uint32_t page_count) { - DCHECK(!pdf_to_emf_converter_.is_bound()); - pdf_to_emf_converter_.Bind(std::move(converter)); - pdf_to_emf_converter_.set_disconnect_handler( - base::BindOnce(&PdfToEmfState::OnFailed, weak_host_, - std::string("Connection to PdfToEmfConverter error."))); - page_count_ = page_count; - } - - void GetMorePages() { - const int kMaxNumberOfTempFilesPerDocument = 3; - while (pages_in_progress_ < kMaxNumberOfTempFilesPerDocument && - current_page_ < page_count_) { - ++pages_in_progress_; - - pdf_to_emf_converter_->ConvertPage( - current_page_++, - base::BindOnce( - &ServiceUtilityProcessHost::OnRenderPDFPagesToMetafilesPageDone, - weak_host_)); - } - } - - // Returns true if all pages processed and client should not expect more - // results. - bool OnPageProcessed() { - --pages_in_progress_; - GetMorePages(); - if (pages_in_progress_ || current_page_ < page_count_) - return false; - Stop(); - return true; - } - - bool has_page_count() const { return page_count_ > 0; } - - private: - static void OnFailed(const base::WeakPtr<ServiceUtilityProcessHost>& host, - const std::string& error_message) { - LOG(ERROR) << "Failed to convert PDF: " << error_message; - host->OnChildDisconnected(); - } - - void Stop() { - // Disconnect interface ptrs so that the printing service process stop. - pdf_to_emf_converter_factory_.reset(); - pdf_to_emf_converter_.reset(); - } - - base::WeakPtr<ServiceUtilityProcessHost> weak_host_; - int page_count_ = 0; - int current_page_ = 0; - int pages_in_progress_ = 0; - - std::unique_ptr<ServicePdfToEmfConverterClientImpl> - pdf_to_emf_converter_client_impl_; - - mojo::Remote<printing::mojom::PdfToEmfConverter> pdf_to_emf_converter_; - - mojo::Remote<printing::mojom::PdfToEmfConverterFactory> - pdf_to_emf_converter_factory_; -}; - -ServiceUtilityProcessHost::ServiceUtilityProcessHost( - Client* client, - base::SingleThreadTaskRunner* client_task_runner) - : client_(client), - client_task_runner_(client_task_runner), - waiting_for_reply_(false) { - child_process_host_ = - ChildProcessHost::Create(this, ChildProcessHost::IpcMode::kNormal); - child_process_host_->BindReceiver( - cloud_print_utility_remote_.BindNewPipeAndPassReceiver()); -} - -ServiceUtilityProcessHost::~ServiceUtilityProcessHost() { - // We need to kill the child process when the host dies. - process_.Terminate(content::RESULT_CODE_NORMAL_EXIT, false); -} - -bool ServiceUtilityProcessHost::StartRenderPDFPagesToMetafile( - const base::FilePath& pdf_path, - const printing::PdfRenderSettings& render_settings) { - base::File pdf_file(pdf_path, base::File::FLAG_OPEN | base::File::FLAG_READ | - base::File::FLAG_DELETE_ON_CLOSE); - if (!pdf_file.IsValid()) - return false; - - int64_t size = pdf_file.GetLength(); - if (size <= 0 || size >= std::numeric_limits<int>::max()) - return false; - - base::MappedReadOnlyRegion memory = - base::ReadOnlySharedMemoryRegion::Create(size); - if (!memory.IsValid()) - return false; - - int result = - pdf_file.Read(0, static_cast<char*>(memory.mapping.memory()), size); - if (result != size) - return false; - - if (!StartProcess(/*sandbox=*/true)) - return false; - - DCHECK(!waiting_for_reply_); - waiting_for_reply_ = true; - - pdf_to_emf_state_ = - std::make_unique<PdfToEmfState>(weak_ptr_factory_.GetWeakPtr()); - return pdf_to_emf_state_->Start(std::move(memory.region), render_settings); -} - -bool ServiceUtilityProcessHost::StartGetPrinterCapsAndDefaults( - const std::string& printer_name) { - if (!StartProcess(/*sandbox=*/false)) - return false; - DCHECK(!waiting_for_reply_); - waiting_for_reply_ = true; - cloud_print_utility_remote_->GetPrinterCapsAndDefaults( - printer_name, - base::BindOnce(&ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaults, - base::Unretained(this), printer_name)); - return true; -} - -bool ServiceUtilityProcessHost::StartGetPrinterSemanticCapsAndDefaults( - const std::string& printer_name) { - if (!StartProcess(/*sandbox=*/false)) - return false; - DCHECK(!waiting_for_reply_); - waiting_for_reply_ = true; - cloud_print_utility_remote_->GetPrinterSemanticCapsAndDefaults( - printer_name, - base::BindOnce( - &ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaults, - base::Unretained(this), printer_name)); - return true; -} - -bool ServiceUtilityProcessHost::StartProcess(bool sandbox) { - base::FilePath exe_path = GetUtilityProcessCmd(); - if (exe_path.empty()) { - NOTREACHED() << "Unable to get utility process binary name."; - return false; - } - - base::CommandLine cmd_line(exe_path); - cmd_line.AppendSwitchASCII(switches::kProcessType, switches::kUtilityProcess); - cmd_line.AppendSwitch(switches::kLang); - cmd_line.AppendArg(switches::kPrefetchArgumentOther); - - return Launch(&cmd_line, sandbox); -} - -bool ServiceUtilityProcessHost::Launch(base::CommandLine* cmd_line, - bool sandbox) { - const base::CommandLine& service_command_line = - *base::CommandLine::ForCurrentProcess(); - static const char* const kForwardSwitches[] = { - switches::kDisableLogging, - switches::kEnableLogging, - switches::kIPCConnectionTimeout, - switches::kLoggingLevel, - switches::kUtilityStartupDialog, - switches::kV, - switches::kVModule, -#if defined(OS_WIN) - switches::kDisableHighResTimer, - switches::kRaiseTimerFrequency, -#endif - }; - cmd_line->CopySwitchesFrom(service_command_line, kForwardSwitches, - base::size(kForwardSwitches)); - - mojo::OutgoingInvitation mojo_invitation = - std::move(*child_process_host_->GetMojoInvitation()); - if (sandbox) { - mojo::PlatformChannel channel; - base::HandlesToInheritVector handles; - channel.PrepareToPassRemoteEndpoint(&handles, cmd_line); - - // Need to call SetCommandLineFlagsForSandboxType() here, as this process - // launch path bypasses content::UtilityProcessHost::StartProcess(). - ServiceSandboxedProcessLauncherDelegate delegate; - sandbox::policy::SetCommandLineFlagsForSandboxType( - cmd_line, delegate.GetSandboxType()); - - base::Process process; - sandbox::ResultCode result = - content::StartSandboxedProcess(&delegate, *cmd_line, handles, &process); - if (result != sandbox::SBOX_ALL_OK) - return false; - - process_ = std::move(process); - mojo::OutgoingInvitation::Send(std::move(mojo_invitation), - process_.Handle(), - channel.TakeLocalEndpoint()); - } else { - mojo::NamedPlatformChannel::Options options; - mojo::NamedPlatformChannel channel(options); - channel.PassServerNameOnCommandLine(cmd_line); - - cmd_line->AppendSwitch(sandbox::policy::switches::kNoSandbox); - process_ = base::LaunchProcess(*cmd_line, base::LaunchOptions()); - mojo::OutgoingInvitation::Send(std::move(mojo_invitation), - process_.Handle(), - channel.TakeServerEndpoint()); - } - - return true; -} - -base::FilePath ServiceUtilityProcessHost::GetUtilityProcessCmd() { - return ChildProcessHost::GetChildPath(ChildProcessHost::CHILD_NORMAL); -} - -void ServiceUtilityProcessHost::OnChildDisconnected() { - if (waiting_for_reply_) { - // If we are yet to receive a reply then notify the client that the - // child died. - client_task_runner_->PostTask( - FROM_HERE, base::BindOnce(&Client::OnChildDied, client_.get())); - } - - // The child process has died for some reason. This host is no longer needed. - delete this; -} - -bool ServiceUtilityProcessHost::OnMessageReceived(const IPC::Message& message) { - return false; -} - -const base::Process& ServiceUtilityProcessHost::GetProcess() { - return process_; -} - -void ServiceUtilityProcessHost::OnMetafileSpooled(bool success) { - if (!success || pdf_to_emf_state_->OnPageProcessed()) - OnPDFToEmfFinished(success); -} - -void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafilesPageCount( - mojo::PendingRemote<printing::mojom::PdfToEmfConverter> converter, - uint32_t page_count) { - DCHECK(waiting_for_reply_); - if (page_count == 0 || pdf_to_emf_state_->has_page_count()) - return OnPDFToEmfFinished(false); - - pdf_to_emf_state_->GotPageCount(std::move(converter), page_count); - pdf_to_emf_state_->GetMorePages(); -} - -void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafilesPageDone( - base::ReadOnlySharedMemoryRegion emf_region, - float scale_factor) { - DCHECK(waiting_for_reply_); - if (!pdf_to_emf_state_ || !emf_region.IsValid()) - return OnPDFToEmfFinished(false); - - base::PostTaskAndReplyWithResult( - client_task_runner_.get(), FROM_HERE, - base::BindOnce(&Client::MetafileAvailable, client_.get(), scale_factor, - std::move(emf_region)), - base::BindOnce(&ServiceUtilityProcessHost::OnMetafileSpooled, - weak_ptr_factory_.GetWeakPtr())); -} - -void ServiceUtilityProcessHost::OnPDFToEmfFinished(bool success) { - if (!waiting_for_reply_) - return; - - waiting_for_reply_ = false; - client_task_runner_->PostTask( - FROM_HERE, base::BindOnce(&Client::OnRenderPDFPagesToMetafileDone, - client_.get(), success)); - pdf_to_emf_state_.reset(); - - // The child process has finished at this point. This host is done as well. - delete this; -} - -void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaults( - const std::string& printer_name, - const absl::optional<printing::PrinterCapsAndDefaults>& caps_and_defaults) { - DCHECK(waiting_for_reply_); - waiting_for_reply_ = false; - client_task_runner_->PostTask( - FROM_HERE, - base::BindOnce( - &Client::OnGetPrinterCapsAndDefaults, client_.get(), - caps_and_defaults.has_value(), printer_name, - caps_and_defaults.value_or(printing::PrinterCapsAndDefaults()))); - // The child process disconnects itself and this host deletes itself via - // OnChildDisconnected(). -} - -void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaults( - const std::string& printer_name, - const absl::optional<printing::PrinterSemanticCapsAndDefaults>& - caps_and_defaults) { - DCHECK(waiting_for_reply_); - waiting_for_reply_ = false; - client_task_runner_->PostTask( - FROM_HERE, - base::BindOnce(&Client::OnGetPrinterSemanticCapsAndDefaults, - client_.get(), caps_and_defaults.has_value(), printer_name, - caps_and_defaults.value_or( - printing::PrinterSemanticCapsAndDefaults()))); - // The child process disconnects itself and this host deletes itself via - // OnChildDisconnected(). -} - -bool ServiceUtilityProcessHost::Client::MetafileAvailable( - float scale_factor, - base::ReadOnlySharedMemoryRegion emf_region) { - base::ReadOnlySharedMemoryMapping mapping = emf_region.Map(); - if (!mapping.IsValid()) { - OnRenderPDFPagesToMetafileDone(false); - return false; - } - printing::Emf emf; - if (!emf.InitFromData(mapping.GetMemoryAsSpan<const uint8_t>())) { - OnRenderPDFPagesToMetafileDone(false); - return false; - } - OnRenderPDFPagesToMetafilePageDone(scale_factor, emf); - return true; -}
diff --git a/chrome/service/service_utility_process_host.h b/chrome/service/service_utility_process_host.h deleted file mode 100644 index 3f17e3c..0000000 --- a/chrome/service/service_utility_process_host.h +++ /dev/null
@@ -1,175 +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 CHROME_SERVICE_SERVICE_UTILITY_PROCESS_HOST_H_ -#define CHROME_SERVICE_SERVICE_UTILITY_PROCESS_HOST_H_ - -#include <memory> -#include <string> - -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "chrome/common/cloud_print_utility.mojom.h" -#include "chrome/services/printing/public/mojom/pdf_to_emf_converter.mojom.h" -#include "content/public/common/child_process_host_delegate.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "third_party/abseil-cpp/absl/types/optional.h" - -namespace base { -class CommandLine; -class FilePath; -class SingleThreadTaskRunner; -} // namespace base - -namespace content { -class ChildProcessHost; -} - -namespace printing { -class MetafilePlayer; -struct PdfRenderSettings; -struct PrinterCapsAndDefaults; -struct PrinterSemanticCapsAndDefaults; -} // namespace printing - -// Acts as the service-side host to a utility child process. A -// utility process is a short-lived sandboxed process that is created to run -// a specific task. -// This class is expected to delete itself IFF one of its Start methods has been -// called. -class ServiceUtilityProcessHost : public content::ChildProcessHostDelegate { - public: - // Consumers of ServiceUtilityProcessHost must implement this interface to - // get results back. All functions are called on the thread passed along - // to ServiceUtilityProcessHost. - class Client : public base::RefCountedThreadSafe<Client> { - public: - Client() {} - - Client(const Client&) = delete; - Client& operator=(const Client&) = delete; - - // Called when the child process died before a reply was receieved. - virtual void OnChildDied() {} - - virtual void OnRenderPDFPagesToMetafilePageDone( - float scale_factor, - const printing::MetafilePlayer& emf) {} - - // Called when at all pages in the PDF has been rendered. - virtual void OnRenderPDFPagesToMetafileDone(bool success) {} - - // Called when the printer capabilities and defaults have been - // retrieved successfully or if retrieval failed. - virtual void OnGetPrinterCapsAndDefaults( - bool succedded, - const std::string& printer_name, - const printing::PrinterCapsAndDefaults& caps_and_defaults) {} - - // Called when the printer capabilities and defaults have been - // retrieved successfully or if retrieval failed. - virtual void OnGetPrinterSemanticCapsAndDefaults( - bool succedded, - const std::string& printer_name, - const printing::PrinterSemanticCapsAndDefaults& caps_and_defaults) {} - - protected: - virtual ~Client() {} - - private: - friend class base::RefCountedThreadSafe<Client>; - friend class ServiceUtilityProcessHost; - - // Invoked when a metafile is ready. - // Returns true if metafile successfully loaded from |emf_region|. - bool MetafileAvailable(float scale_factor, - base::ReadOnlySharedMemoryRegion emf_region); - }; - - ServiceUtilityProcessHost(Client* client, - base::SingleThreadTaskRunner* client_task_runner); - - ServiceUtilityProcessHost(const ServiceUtilityProcessHost&) = delete; - ServiceUtilityProcessHost& operator=(const ServiceUtilityProcessHost&) = - delete; - - ~ServiceUtilityProcessHost() override; - - content::ChildProcessHost* GetHost() { return child_process_host_.get(); } - - // Starts a process to render the specified pages in the given PDF file into - // a metafile. Currently only implemented for Windows. If the PDF has fewer - // pages than the specified page ranges, it will render as many as available. - bool StartRenderPDFPagesToMetafile( - const base::FilePath& pdf_path, - const printing::PdfRenderSettings& render_settings); - - // Starts a process to get capabilities and defaults for the specified - // printer. Used on Windows to isolate the service process from printer driver - // crashes by executing this in a separate process. The process does not run - // in a sandbox. - bool StartGetPrinterCapsAndDefaults(const std::string& printer_name); - - // Starts a process to get capabilities and defaults for the specified - // printer. Used on Windows to isolate the service process from printer driver - // crashes by executing this in a separate process. The process does not run - // in a sandbox. Returns result as printing::PrinterSemanticCapsAndDefaults. - bool StartGetPrinterSemanticCapsAndDefaults(const std::string& printer_name); - - protected: - // Allows this method to be overridden for tests. - virtual base::FilePath GetUtilityProcessCmd(); - - // ChildProcessHostDelegate implementation: - void OnChildDisconnected() override; - bool OnMessageReceived(const IPC::Message& message) override; - const base::Process& GetProcess() override; - void BindHostReceiver(mojo::GenericPendingReceiver receiver) override; - - private: - // Starts a process. Returns true iff it succeeded. - bool StartProcess(bool sandbox); - - // Launch the child process synchronously. - bool Launch(base::CommandLine* cmd_line, bool sandbox); - - base::ProcessHandle handle() const { return process_.Handle(); } - - void OnMetafileSpooled(bool success); - void OnPDFToEmfFinished(bool success); - - // PdfToEmfState callbacks: - void OnRenderPDFPagesToMetafilesPageCount( - mojo::PendingRemote<printing::mojom::PdfToEmfConverter> converter, - uint32_t page_count); - void OnRenderPDFPagesToMetafilesPageDone( - base::ReadOnlySharedMemoryRegion emf_region, - float scale_factor); - - // IPC response handlers: - void OnGetPrinterCapsAndDefaults( - const std::string& printer_name, - const absl::optional<printing::PrinterCapsAndDefaults>& - caps_and_defaults); - void OnGetPrinterSemanticCapsAndDefaults( - const std::string& printer_name, - const absl::optional<printing::PrinterSemanticCapsAndDefaults>& - caps_and_defaults); - - std::unique_ptr<content::ChildProcessHost> child_process_host_; - base::Process process_; - mojo::Remote<chrome::mojom::CloudPrintUtility> cloud_print_utility_remote_; - // A pointer to our client interface, who will be informed of progress. - scoped_refptr<Client> client_; - scoped_refptr<base::SingleThreadTaskRunner> client_task_runner_; - bool waiting_for_reply_; - - class PdfToEmfState; - std::unique_ptr<PdfToEmfState> pdf_to_emf_state_; - - base::WeakPtrFactory<ServiceUtilityProcessHost> weak_ptr_factory_{this}; -}; - -#endif // CHROME_SERVICE_SERVICE_UTILITY_PROCESS_HOST_H_
diff --git a/chrome/service/service_utility_process_host_receiver_bindings.cc b/chrome/service/service_utility_process_host_receiver_bindings.cc deleted file mode 100644 index 2959574..0000000 --- a/chrome/service/service_utility_process_host_receiver_bindings.cc +++ /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. - -// This exposes services in the browser to utility processes. - -#include "chrome/service/service_utility_process_host.h" - -#include "content/public/common/font_cache_dispatcher_win.h" -#include "content/public/common/font_cache_win.mojom.h" - -void ServiceUtilityProcessHost::BindHostReceiver( - mojo::GenericPendingReceiver receiver) { - if (auto r = receiver.As<content::mojom::FontCacheWin>()) { - content::FontCacheDispatcher::Create(std::move(r)); - return; - } -}
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 0557efe..c9506949 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -662,10 +662,6 @@ if (enable_plugins) { public_deps += [ "//ppapi/shared_impl" ] } - - if (enable_print_preview && !is_chromeos_ash) { - public_deps += [ "//chrome/service" ] - } } if (is_android) { @@ -2312,8 +2308,6 @@ "../browser/ui/views/frame/browser_non_client_frame_view_mac_browsertest.mm", "../browser/webshare/mac/sharing_service_operation_browsertest.cc", "../common/mac/app_mode_chrome_locator_browsertest.mm", - "../common/mac/mock_launchd.h", - "../common/mac/mock_launchd.mm", "../common/profiler/thread_profiler_browsertest.cc", ] sources -= [ @@ -3973,20 +3967,6 @@ "../browser/printing/test_print_view_manager_for_request_preview.h", "../browser/ui/webui/print_preview/print_preview_ui_browsertest.cc", ] - if (!is_mac && !is_chromeos) { - sources += [ - # This test depends on GetCommandLineForRelaunch, which is not - # available on Mac. It is also not intended to run on ChromeOS. - "../browser/printing/cloud_print/test/cloud_print_policy_browsertest.cc", - ] - } - if (!is_chromeos) { - sources += [ - # Not intended to run on ChromeOS. - "../browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc", - "../browser/service_process/service_process_control_browsertest.cc", - ] - } deps += [ "//printing:test_support" ] } if (enable_paint_preview) { @@ -4663,7 +4643,6 @@ "../browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc", "../browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h", "../browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc", - "../browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc", "../browser/page_load_metrics/observers/protocol_page_load_metrics_observer_unittest.cc", "../browser/page_load_metrics/observers/scheme_page_load_metrics_observer_unittest.cc", "../browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc", @@ -5628,7 +5607,6 @@ "../browser/performance_monitor/resource_coalition_mac_unittest.mm", "../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/ui/cocoa/applescript/apple_event_util_unittest.mm", "../browser/ui/cocoa/bookmarks/bookmark_menu_bridge_unittest.mm", "../browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller_unittest.mm", @@ -5652,8 +5630,6 @@ "../browser/ui/cocoa/window_size_autosaver_unittest.mm", "../browser/ui/content_settings/content_setting_media_image_model_unittest.mm", "../browser/upgrade_detector/directory_monitor_unittest.cc", - "../common/mac/mock_launchd.h", - "../common/mac/mock_launchd.mm", "../utility/importer/safari_importer_unittest.mm", ] @@ -7590,10 +7566,6 @@ sources += [ "../browser/ui/webui/print_preview/pdf_printer_handler_posix_unittest.cc" ] } - if (is_mac) { - sources += [ "../common/service_process_util_mac_unittest.mm" ] - } - if (is_chromeos) { sources += [ "../browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc", @@ -7601,19 +7573,8 @@ ] } else { sources += [ - "../browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc", "../browser/ui/webui/print_preview/local_printer_handler_default_unittest.cc", "../common/cloud_print/cloud_print_helpers_unittest.cc", - "../common/service_process_util_unittest.cc", - "../service/cloud_print/cloud_print_service_helpers_unittest.cc", - "../service/cloud_print/cloud_print_token_store_unittest.cc", - "../service/cloud_print/cloud_print_url_fetcher_unittest.cc", - "../service/cloud_print/connector_settings_unittest.cc", - "../service/cloud_print/printer_job_handler_unittest.cc", - "../service/cloud_print/printer_job_queue_handler_unittest.cc", - "../service/net/in_process_network_connection_tracker_unittest.cc", - "../service/service_ipc_server_unittest.cc", - "../service/service_process_prefs_unittest.cc", ] }
diff --git a/chrome/test/data/client_hints/http_equiv_accept_ch_injection.html b/chrome/test/data/client_hints/http_equiv_accept_ch_injection.html index 0ee88b9..223ff69 100644 --- a/chrome/test/data/client_hints/http_equiv_accept_ch_injection.html +++ b/chrome/test/data/client_hints/http_equiv_accept_ch_injection.html
@@ -7,7 +7,8 @@ <script type="text/javascript"> document.getElementsByTagName('meta')[0].setAttribute("content", "dpr,sec-ch-dpr,device-memory,sec-ch-device-memory,viewport-width,sec-ch-viewport-width,rtt,downlink,ect"); document.head.outerHTML += '<meta http-equiv="Accept-CH" content="sec-ch-ua-arch,sec-ch-ua-platform,sec-ch-ua-model">'; - document.head.innerHTML += '<meta http-equiv="Accept-CH" content="sec-ch-ua-full-version,sec-ch-ua-bitness,sec-ch-ua-full-version-list,sec-ch-ua-platform-version,sec-ch-prefers-color-scheme,sec-ch-viewport-height">'; + document.head.innerHTML += '<meta http-equiv="Accept-CH" content="sec-ch-ua-full-version,sec-ch-ua-bitness,sec-ch-ua-full-version-list">'; + document.write('<meta http-equiv="Accept-CH" content="sec-ch-ua-platform-version,sec-ch-prefers-color-scheme,sec-ch-viewport-height">'); document.body.innerHTML += '<img src="non-existing-image.jpg"></img>'; </script> </body>
diff --git a/chrome/test/data/client_hints/meta_name_accept_ch_injection.html b/chrome/test/data/client_hints/meta_name_accept_ch_injection.html index aac2664a..e8192861 100644 --- a/chrome/test/data/client_hints/meta_name_accept_ch_injection.html +++ b/chrome/test/data/client_hints/meta_name_accept_ch_injection.html
@@ -7,7 +7,8 @@ <script type="text/javascript"> document.getElementsByTagName('meta')[0].setAttribute("content", "dpr,sec-ch-dpr,device-memory,sec-ch-device-memory,viewport-width,sec-ch-viewport-width,rtt,downlink,ect"); document.head.outerHTML += '<meta name="Accept-CH" content="sec-ch-ua-arch,sec-ch-ua-platform,sec-ch-ua-model">'; - document.head.innerHTML += '<meta name="Accept-CH" content="sec-ch-ua-full-version,sec-ch-ua-bitness,sec-ch-ua-full-version-list,sec-ch-ua-platform-version,sec-ch-prefers-color-scheme,sec-ch-viewport-height">'; + document.head.innerHTML += '<meta name="Accept-CH" content="sec-ch-ua-full-version,sec-ch-ua-bitness,sec-ch-ua-full-version-list">'; + document.write('<meta name="Accept-CH" content="sec-ch-ua-platform-version,sec-ch-prefers-color-scheme,sec-ch-viewport-height">'); document.body.innerHTML += '<img src="non-existing-image.jpg"></img>'; </script> </body>
diff --git a/chrome/test/data/webui/chromeos/firmware_update/BUILD.gn b/chrome/test/data/webui/chromeos/firmware_update/BUILD.gn index edc4cd6..6b90edc 100644 --- a/chrome/test/data/webui/chromeos/firmware_update/BUILD.gn +++ b/chrome/test/data/webui/chromeos/firmware_update/BUILD.gn
@@ -49,7 +49,9 @@ "//ash/webui/firmware_update_ui/resources:fake_data", "//ash/webui/firmware_update_ui/resources:firmware_update_dialog", "//ash/webui/firmware_update_ui/resources:firmware_update_types", + "//ash/webui/firmware_update_ui/resources:mojo_utils", "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog.m", + "//ui/webui/resources/js:load_time_data.m", ] externs_list = [ "$externs_path/mocha-2.5.js" ] }
diff --git a/chrome/test/data/webui/chromeos/firmware_update/firmware_update_dialog_test.js b/chrome/test/data/webui/chromeos/firmware_update/firmware_update_dialog_test.js index 6a82ed4..9cf2867 100644 --- a/chrome/test/data/webui/chromeos/firmware_update/firmware_update_dialog_test.js +++ b/chrome/test/data/webui/chromeos/firmware_update/firmware_update_dialog_test.js
@@ -5,6 +5,8 @@ import {fakeFirmwareUpdate} from 'chrome://accessory-update/fake_data.js'; import {FirmwareUpdateDialogElement} from 'chrome://accessory-update/firmware_update_dialog.js'; import {FirmwareUpdate, UpdateState} from 'chrome://accessory-update/firmware_update_types.js'; +import {mojoString16ToString} from 'chrome://accessory-update/mojo_utils.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; import {flushTasks, isVisible} from '../../test_util.js'; @@ -72,4 +74,32 @@ assertFalse( !!updateDialogElement.shadowRoot.querySelector('#updateDialog')); }); + + test('DeviceRestarting', async () => { + // Start update. + await setInstallationProgress(1, UpdateState.kUpdating); + assertTrue( + updateDialogElement.shadowRoot.querySelector('#updateDialog').open); + + // Dialog remains open while the device is restarting. + await setInstallationProgress(70, UpdateState.kRestarting); + assertTrue( + updateDialogElement.shadowRoot.querySelector('#updateDialog').open); + + // Correct text is shown. + assertEquals( + updateDialogElement.shadowRoot.querySelector('#updateDialogTitle') + .textContent.trim(), + loadTimeData.getStringF( + 'restartingTitleText', + mojoString16ToString(updateDialogElement.update.deviceName))); + assertEquals( + updateDialogElement.shadowRoot.querySelector('#updateDialogBody') + .textContent.trim(), + loadTimeData.getString('restartingBodyText')); + assertEquals( + updateDialogElement.shadowRoot.querySelector('#progress') + .textContent.trim(), + loadTimeData.getString('restartingFooterText')); + }); }
diff --git a/chrome/updater/mac/keystone/keystone_main.cc b/chrome/updater/mac/keystone/keystone_main.cc index 3d48e61..dd3d7a14 100644 --- a/chrome/updater/mac/keystone/keystone_main.cc +++ b/chrome/updater/mac/keystone/keystone_main.cc
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/updater/mac/keystone/ksadmin.h" - int main(int argc, char* argv[]) { return 0; }
diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn index 0d3541d..4d1c6381 100644 --- a/chrome/utility/BUILD.gn +++ b/chrome/utility/BUILD.gn
@@ -216,17 +216,6 @@ } } - if (enable_print_preview) { - if (is_win) { - sources += [ - "printing_handler.cc", - "printing_handler.h", - ] - public_deps += [ "//chrome/common:cloud_print_utility_mojom" ] - deps += [ "//printing/backend" ] - } - } - if (safe_browsing_mode == 1) { deps += [ "//chrome/services/file_util" ] if (is_mac) {
diff --git a/chrome/utility/browser_exposed_utility_interfaces.cc b/chrome/utility/browser_exposed_utility_interfaces.cc index 1d80054..9cc657a 100644 --- a/chrome/utility/browser_exposed_utility_interfaces.cc +++ b/chrome/utility/browser_exposed_utility_interfaces.cc
@@ -13,34 +13,9 @@ #include "chrome/services/printing/pdf_to_emf_converter_factory.h" #endif -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && defined(OS_WIN) -#include "chrome/common/cloud_print_utility.mojom.h" -#include "chrome/utility/printing_handler.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/self_owned_receiver.h" -#endif - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && defined(OS_WIN) -namespace { - -void BindCloudPrintUtility( - mojo::PendingReceiver<chrome::mojom::CloudPrintUtility> receiver) { - mojo::MakeSelfOwnedReceiver(std::make_unique<printing::PrintingHandler>(), - std::move(receiver)); -} - -} // namespace -#endif - void ExposeElevatedChromeUtilityInterfacesToBrowser(mojo::BinderMap* binders) { #if BUILDFLAG(ENABLE_PRINTING) && defined(OS_WIN) - // TODO(crbug.com/798782): remove when the Cloud print chrome/service is - // removed. binders->Add(base::BindRepeating(printing::PdfToEmfConverterFactory::Create), base::ThreadTaskRunnerHandle::Get()); #endif -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && defined(OS_WIN) - binders->Add(base::BindRepeating(&BindCloudPrintUtility), - base::ThreadTaskRunnerHandle::Get()); -#endif }
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc index d09b65f0..dc95be0e 100644 --- a/chrome/utility/chrome_content_utility_client.cc +++ b/chrome/utility/chrome_content_utility_client.cc
@@ -22,10 +22,6 @@ #include "sandbox/policy/mojom/sandbox.mojom.h" #include "sandbox/policy/sandbox_type.h" -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) && defined(OS_WIN) -#include "chrome/utility/printing_handler.h" -#endif - namespace { base::LazyInstance<ChromeContentUtilityClient::NetworkBinderCreationCallback>:: @@ -33,9 +29,7 @@ } // namespace -ChromeContentUtilityClient::ChromeContentUtilityClient() - : utility_process_running_elevated_(false) { -} +ChromeContentUtilityClient::ChromeContentUtilityClient() = default; ChromeContentUtilityClient::~ChromeContentUtilityClient() = default;
diff --git a/chrome/utility/chrome_content_utility_client.h b/chrome/utility/chrome_content_utility_client.h index 33746ff7..c9bb0ab 100644 --- a/chrome/utility/chrome_content_utility_client.h +++ b/chrome/utility/chrome_content_utility_client.h
@@ -5,16 +5,8 @@ #ifndef CHROME_UTILITY_CHROME_CONTENT_UTILITY_CLIENT_H_ #define CHROME_UTILITY_CHROME_CONTENT_UTILITY_CLIENT_H_ -#include <memory> -#include <vector> - #include "build/build_config.h" #include "content/public/utility/content_utility_client.h" -#include "printing/buildflags/buildflags.h" - -namespace printing { -class PrintingHandler; -} class ChromeContentUtilityClient : public content::ContentUtilityClient { public: @@ -44,13 +36,8 @@ NetworkBinderCreationCallback callback); private: -#if defined(OS_WIN) && BUILDFLAG(ENABLE_PRINT_PREVIEW) - // Last IPC message handler. - std::unique_ptr<printing::PrintingHandler> printing_handler_; -#endif - // True if the utility process runs with elevated privileges. - bool utility_process_running_elevated_; + bool utility_process_running_elevated_ = false; }; #endif // CHROME_UTILITY_CHROME_CONTENT_UTILITY_CLIENT_H_
diff --git a/chrome/utility/printing_handler.cc b/chrome/utility/printing_handler.cc deleted file mode 100644 index 44752ed..0000000 --- a/chrome/utility/printing_handler.cc +++ /dev/null
@@ -1,67 +0,0 @@ -// Copyright 2014 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/utility/printing_handler.h" - -#include "build/build_config.h" -#include "components/crash/core/common/crash_keys.h" -#include "content/public/utility/utility_thread.h" -#include "printing/backend/print_backend.h" -#include "printing/buildflags/buildflags.h" -#include "printing/mojom/print.mojom.h" -#include "third_party/abseil-cpp/absl/types/optional.h" - -namespace printing { - -namespace { - -void ReleaseProcess() { - content::UtilityThread::Get()->ReleaseProcess(); -} - -} // namespace - -PrintingHandler::PrintingHandler() = default; - -PrintingHandler::~PrintingHandler() = default; - -void PrintingHandler::GetPrinterCapsAndDefaults( - const std::string& printer_name, - GetPrinterCapsAndDefaultsCallback callback) { - scoped_refptr<PrintBackend> print_backend = - PrintBackend::CreateInstance(/*locale=*/std::string()); - PrinterCapsAndDefaults printer_info; - - crash_keys::ScopedPrinterInfo crash_key( - print_backend->GetPrinterDriverInfo(printer_name)); - - if (print_backend->GetPrinterCapsAndDefaults(printer_name, &printer_info) == - mojom::ResultCode::kSuccess) { - std::move(callback).Run(printer_info); - } else { - std::move(callback).Run(absl::nullopt); - } - ReleaseProcess(); -} - -void PrintingHandler::GetPrinterSemanticCapsAndDefaults( - const std::string& printer_name, - GetPrinterSemanticCapsAndDefaultsCallback callback) { - scoped_refptr<PrintBackend> print_backend = - PrintBackend::CreateInstance(/*locale=*/std::string()); - PrinterSemanticCapsAndDefaults printer_info; - - crash_keys::ScopedPrinterInfo crash_key( - print_backend->GetPrinterDriverInfo(printer_name)); - - if (print_backend->GetPrinterSemanticCapsAndDefaults( - printer_name, &printer_info) == mojom::ResultCode::kSuccess) { - std::move(callback).Run(printer_info); - } else { - std::move(callback).Run(absl::nullopt); - } - ReleaseProcess(); -} - -} // namespace printing
diff --git a/chrome/utility/printing_handler.h b/chrome/utility/printing_handler.h deleted file mode 100644 index ba10293..0000000 --- a/chrome/utility/printing_handler.h +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2014 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_UTILITY_PRINTING_HANDLER_H_ -#define CHROME_UTILITY_PRINTING_HANDLER_H_ - -#include <string> - -#include "build/build_config.h" -#include "chrome/common/cloud_print_utility.mojom.h" -#include "printing/buildflags/buildflags.h" - -#if !defined(OS_WIN) || !BUILDFLAG(ENABLE_PRINT_PREVIEW) -#error "Windows printing and print preview must be enabled" -#endif - -namespace printing { - -// Dispatches IPCs for printing. -class PrintingHandler : public chrome::mojom::CloudPrintUtility { - public: - PrintingHandler(); - PrintingHandler(const PrintingHandler&) = delete; - PrintingHandler& operator=(const PrintingHandler&) = delete; - ~PrintingHandler() override; - - private: - // chrome::mojom::CloudPrintUtility: - void GetPrinterCapsAndDefaults( - const std::string& printer_name, - GetPrinterCapsAndDefaultsCallback callback) override; - void GetPrinterSemanticCapsAndDefaults( - const std::string& printer_name, - GetPrinterSemanticCapsAndDefaultsCallback callback) override; -}; - -} // namespace printing - -#endif // CHROME_UTILITY_PRINTING_HANDLER_H_
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd index 860907ac..95825eb 100644 --- a/chromeos/chromeos_strings.grd +++ b/chromeos/chromeos_strings.grd
@@ -2551,6 +2551,16 @@ <message name="IDS_FIRMWARE_VERSION_TEXT" desc="Label for the update's version."> Version <ph name="VERSION">$1<ex>3.0.2</ex></ph> </message> + <!-- TODO(michaelcheco): Update strings after UX review. --> + <message translateable="false" name="IDS_FIRMWARE_RESTARTING_TITLE_TEXT" desc="Label for showing that a device is being restarted."> + Restarting <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> + </message> + <message translateable="false" name="IDS_FIRMWARE_RESTARTING_BODY_TEXT" desc="Label for communicating information about what actions a user can take during a device restart."> + Your device is restarting, you can minimize window but do not unplug your device. This may take a few minutes. + </message> + <message translateable="false" name="IDS_FIRMWARE_RESTARTING_FOOTER_TEXT" desc="Label shown when a device is being restarted."> + Restarting ... + </message> <!-- Quick Answers --> <message name="IDS_ASH_QUICK_ANSWERS_SETTINGS_BUTTON_TOOLTIP_TEXT" desc="Tootip text for the settings-button in Quick-Answers related views.">
diff --git a/chromeos/profiles/atom.afdo.newest.txt b/chromeos/profiles/atom.afdo.newest.txt index fc7780a..182921f 100644 --- a/chromeos/profiles/atom.afdo.newest.txt +++ b/chromeos/profiles/atom.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-atom-99-4758.14-1641211952-benchmark-99.0.4803.0-r1-redacted.afdo.xz +chromeos-chrome-amd64-atom-99-4807.0-1641812761-benchmark-99.0.4824.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt index 933ec60..df63d47 100644 --- a/chromeos/profiles/bigcore.afdo.newest.txt +++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-bigcore-99-4758.14-1641209979-benchmark-99.0.4803.0-r1-redacted.afdo.xz +chromeos-chrome-amd64-bigcore-99-4758.14-1641811130-benchmark-99.0.4824.0-r1-redacted.afdo.xz
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb index 34cd33d..2007f11 100644 --- a/chromeos/strings/chromeos_strings_da.xtb +++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -306,7 +306,7 @@ <translation id="5294769550414936029">version <ph name="MILESTONE_VERSION" /></translation> <translation id="5300814202279832142">Flyt vindue til skrivebord</translation> <translation id="5304899856529773394">EvDo</translation> -<translation id="5308380583665731573">Få forbindelse</translation> +<translation id="5308380583665731573">Opret forbindelse</translation> <translation id="5315873049536339193">Identitet</translation> <translation id="5317780077021120954">Gem</translation> <translation id="5318334351163689047">Mislykkede TCP-anmodninger</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb index 36c66cfa..28f1f23d 100644 --- a/chromeos/strings/chromeos_strings_te.xtb +++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -308,7 +308,7 @@ <translation id="5304899856529773394">EVDO</translation> <translation id="5308380583665731573">కనెక్ట్ చేయండి</translation> <translation id="5315873049536339193">గుర్తింపు</translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5318334351163689047">TCP రిక్వెస్ట్ వైఫల్యాలు</translation> <translation id="5326394068492324457"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="COMPLETION_STATUS" /></translation> <translation id="5332948983412042822">ఇప్పుడే ఒక కొత్త దానిని ఎంచుకోండి</translation> @@ -471,7 +471,7 @@ <translation id="7620771111601174153">సహాయ కేంద్రంలో మరింత తెలుసుకోండి</translation> <translation id="763165478673169849">చివరిగా రీసెట్ చేసిన సమయం</translation> <translation id="7648838807254605802">అధిక HTTPS ప్రతిస్పందన సమయం</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7690294790491645610">కొత్త పాస్వర్డ్ను నిర్ధారించండి</translation> <translation id="7701040980221191251">ఏదీ లేదు</translation> <translation id="7705524343798198388">VPN</translation>
diff --git a/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb b/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb index ddc7423..f6de084 100644 --- a/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb +++ b/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb
@@ -21,7 +21,7 @@ <translation id="6973932557599545801">క్షమించండి నేను సహాయం చేయలేకపోయాను, దయచేసి మీరే స్వంతంగా కొనసాగండి.</translation> <translation id="7135664311366978968">కేవలం కొన్ని సార్లు ట్యాప్ చేయడం ద్వారా\nసినిమా టిక్కెట్లను కొనుగోలు చేయండి</translation> <translation id="7455021968451468078">మీ పాస్వర్డ్ను మార్చడంలో Google Assistantను మీకు సహాయం చేయనివ్వండి</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7953600313732929223">వెబ్సైట్లలో\nవాయిస్ చర్యలను ట్రై చేయండి</translation> <translation id="8253702004019660079">Chromeలో Google అసిస్టెంట్.</translation> <translation id="8500511870202433545">కేవలం కొన్ని సార్లు ట్యాప్ చేయడం ద్వారా \nకారు అద్దెకు తీసుకోండి</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb index 0473bcb8..35b89677 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -161,7 +161,7 @@ <translation id="5300589172476337783">చూపించు</translation> <translation id="5301954838959518834">సరే, అర్థమైంది</translation> <translation id="5313967007315987356">సైట్ను జోడించు</translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5335288049665977812">సైట్లను జావాస్క్రిప్ట్ అమలు చేయడానికి అనుమతిస్తుంది (సిఫార్సు చేయబడింది)</translation> <translation id="534295439873310000">NFC పరికరాలు</translation> <translation id="5354152178998424783">ఇది సైట్ల ద్వారా స్టోర్ చేయబడిన <ph name="DATASIZE" /> డేటాను, కుక్కీలను క్లియర్ చేస్తుంది.</translation> @@ -258,7 +258,7 @@ <translation id="7572498721684305250">మీరు NFC పరికరాలను నొక్కినప్పుడు, సైట్లు సమాచారాన్ని పంపడాన్ని, అలాగే స్వీకరించడాన్ని బ్లాక్ చేస్తుంది (సిఫార్సు చేయబడింది)</translation> <translation id="757524316907819857">రక్షిత కంటెంట్ను ప్లే చేయకుండా సైట్లను బ్లాక్ చేస్తుంది</translation> <translation id="7649070708921625228">సహాయం</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7781829728241885113">నిన్న</translation> <translation id="7791543448312431591">జోడించు</translation> <translation id="780301667611848630">వద్దు , ధన్యవాదాలు</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index d1227c2..47ae86f 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "4.87", - "log_list_timestamp": "2022-01-12T01:33:59Z", + "version": "4.88", + "log_list_timestamp": "2022-01-13T01:34:16Z", "operators": [ { "name": "Google",
diff --git a/components/certificate_transparency/pref_names.h b/components/certificate_transparency/pref_names.h index 75a2c4d8..46ccc67 100644 --- a/components/certificate_transparency/pref_names.h +++ b/components/certificate_transparency/pref_names.h
@@ -17,11 +17,11 @@ COMPONENT_EXPORT(CERTIFICATE_TRANSPARENCY) void RegisterPrefs(PrefRegistrySimple* registry); -// The set of hosts (as URLBlacklist-syntax filters) for which Certificate +// The set of hosts (as URLBlocklist-syntax filters) for which Certificate // Transparency is required to be present. COMPONENT_EXPORT(CERTIFICATE_TRANSPARENCY) extern const char kCTRequiredHosts[]; -// The set of hosts (as URLBlacklist-syntax filters) for which Certificate +// The set of hosts (as URLBlocklist-syntax filters) for which Certificate // Transparency information is allowed to be absent, even if it would // otherwise be required (e.g. as part of security policy). COMPONENT_EXPORT(CERTIFICATE_TRANSPARENCY) extern const char kCTExcludedHosts[];
diff --git a/components/consent_auditor/consent_auditor_impl.cc b/components/consent_auditor/consent_auditor_impl.cc index 650ed2b..c8d50d9 100644 --- a/components/consent_auditor/consent_auditor_impl.cc +++ b/components/consent_auditor/consent_auditor_impl.cc
@@ -145,16 +145,16 @@ const std::string& feature, const std::string& description_text, const std::string& confirmation_text) { - DictionaryPrefUpdateDeprecated consents_update( - pref_service_, prefs::kLocalConsentsDictionary); - base::DictionaryValue* consents = consents_update.Get(); + DictionaryPrefUpdate consents_update(pref_service_, + prefs::kLocalConsentsDictionary); + base::Value* consents = consents_update.Get(); DCHECK(consents); - base::DictionaryValue record; - record.SetKey(kLocalConsentDescriptionKey, base::Value(description_text)); - record.SetKey(kLocalConsentConfirmationKey, base::Value(confirmation_text)); - record.SetKey(kLocalConsentVersionKey, base::Value(app_version_)); - record.SetKey(kLocalConsentLocaleKey, base::Value(app_locale_)); + base::Value record(base::Value::Type::DICTIONARY); + record.SetStringKey(kLocalConsentDescriptionKey, description_text); + record.SetStringKey(kLocalConsentConfirmationKey, confirmation_text); + record.SetStringKey(kLocalConsentVersionKey, app_version_); + record.SetStringKey(kLocalConsentLocaleKey, app_locale_); consents->SetKey(feature, std::move(record)); }
diff --git a/components/embedder_support/android/java/strings/translations/web_contents_delegate_android_strings_te.xtb b/components/embedder_support/android/java/strings/translations/web_contents_delegate_android_strings_te.xtb index ac406795..e3e4220 100644 --- a/components/embedder_support/android/java/strings/translations/web_contents_delegate_android_strings_te.xtb +++ b/components/embedder_support/android/java/strings/translations/web_contents_delegate_android_strings_te.xtb
@@ -12,7 +12,7 @@ <translation id="6727102863431372879">సెట్ చేయి</translation> <translation id="7535087603100972091">విలువ</translation> <translation id="7569983096843329377">నలుపు</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7942349550061667556">ఎరుపు</translation> <translation id="8889402386540077796">వర్ణం</translation> <translation id="9068849894565669697">రంగుని ఎంచుకోండి</translation>
diff --git a/components/flags_ui/pref_service_flags_storage.cc b/components/flags_ui/pref_service_flags_storage.cc index c22acd0d..a42ae1e 100644 --- a/components/flags_ui/pref_service_flags_storage.cc +++ b/components/flags_ui/pref_service_flags_storage.cc
@@ -36,7 +36,7 @@ } bool PrefServiceFlagsStorage::SetFlags(const std::set<std::string>& flags) { - ListPrefUpdateDeprecated update(prefs_, prefs::kAboutFlagsEntries); + ListPrefUpdate update(prefs_, prefs::kAboutFlagsEntries); base::Value* experiments_list = update.Get(); DCHECK(experiments_list->is_list()); @@ -61,8 +61,8 @@ void PrefServiceFlagsStorage::SetOriginListFlag( const std::string& internal_entry_name, const std::string& origin_list_value) { - DictionaryPrefUpdateDeprecated update(prefs_, prefs::kAboutFlagsOriginLists); - update->SetString(internal_entry_name, origin_list_value); + DictionaryPrefUpdate update(prefs_, prefs::kAboutFlagsOriginLists); + update->SetStringPath(internal_entry_name, origin_list_value); } void PrefServiceFlagsStorage::CommitPendingWrites() {
diff --git a/components/password_manager/core/browser/password_store_proxy_backend.cc b/components/password_manager/core/browser/password_store_proxy_backend.cc index 903043e5..5a81990 100644 --- a/components/password_manager/core/browser/password_store_proxy_backend.cc +++ b/components/password_manager/core/browser/password_store_proxy_backend.cc
@@ -51,6 +51,29 @@ using MethodName = base::StrongAlias<struct MethodNameTag, std::string>; +struct LoginsResultImpl { + using ResultType = LoginsResult; + using ElementsType = LoginsResult; + + static LoginsResult* GetElements(LoginsResult& logins) { return &logins; } + + static std::unique_ptr<PasswordForm> Clone( + const std::unique_ptr<PasswordForm>& login) { + return std::make_unique<PasswordForm>(*login); + } + + static bool IsLess(const std::unique_ptr<PasswordForm>& lhs, + const std::unique_ptr<PasswordForm>& rhs) { + return PasswordFormUniqueKey(*lhs) < PasswordFormUniqueKey(*rhs); + } + + static bool HaveInconsistentPasswords( + const std::unique_ptr<PasswordForm>& lhs, + const std::unique_ptr<PasswordForm>& rhs) { + return lhs->password_value != rhs->password_value; + } +}; + struct LoginsResultOrErrorImpl { using ResultType = LoginsResultOrError; using ElementsType = LoginsResult; @@ -323,9 +346,24 @@ LoginsReply callback, bool include_psl, const std::vector<PasswordFormDigest>& forms) { - main_backend_->FillMatchingLoginsAsync(std::move(callback), include_psl, - forms); - // TODO(crbug.com/1229655): Request shadow_backend_ and compare results. + auto handler = + base::MakeRefCounted<ShadowTrafficMetricsRecorder<LoginsResultImpl>>( + MethodName("FillMatchingLoginsAsync")); + main_backend_->FillMatchingLoginsAsync( + base::BindOnce( + &ShadowTrafficMetricsRecorder<LoginsResultImpl>::RecordMainResult, + handler) + .Then(std::move(callback)), + include_psl, forms); + + if (ShouldExecuteReadOperationsOnShadowBackend( + is_syncing_passwords_callback_.Run())) { + shadow_backend_->FillMatchingLoginsAsync( + base::BindOnce( + &ShadowTrafficMetricsRecorder<LoginsResultImpl>::RecordShadowResult, + handler), + include_psl, forms); + } } void PasswordStoreProxyBackend::AddLoginAsync(
diff --git a/components/password_manager/core/browser/password_store_proxy_backend_unittest.cc b/components/password_manager/core/browser/password_store_proxy_backend_unittest.cc index 2a4b551..3540ace 100644 --- a/components/password_manager/core/browser/password_store_proxy_backend_unittest.cc +++ b/components/password_manager/core/browser/password_store_proxy_backend_unittest.cc
@@ -158,10 +158,7 @@ std::move(reply).Run(CreateTestLogins()); }))); EXPECT_CALL(is_syncing_passwords_callback_, Run).WillRepeatedly(Return(true)); - EXPECT_CALL(shadow_backend(), GetAllLoginsAsync) - .WillOnce(WithArg<0>(Invoke([](LoginsOrErrorReply reply) -> void { - std::move(reply).Run(CreateTestLogins()); - }))); + EXPECT_CALL(shadow_backend(), GetAllLoginsAsync); proxy_backend().GetAllLoginsAsync(mock_reply.Get()); } @@ -175,6 +172,8 @@ .WillOnce(WithArg<0>(Invoke([](LoginsOrErrorReply reply) -> void { std::move(reply).Run(CreateTestLogins()); }))); + EXPECT_CALL(is_syncing_passwords_callback_, Run).WillRepeatedly(Return(true)); + EXPECT_CALL(shadow_backend(), GetAutofillableLoginsAsync); proxy_backend().GetAutofillableLoginsAsync(mock_reply.Get()); } @@ -188,6 +187,8 @@ .WillOnce(WithArg<0>(Invoke([](LoginsReply reply) -> void { std::move(reply).Run(CreateTestLogins()); }))); + EXPECT_CALL(is_syncing_passwords_callback_, Run).WillRepeatedly(Return(true)); + EXPECT_CALL(shadow_backend(), FillMatchingLoginsAsync); proxy_backend().FillMatchingLoginsAsync(mock_reply.Get(), /*include_psl=*/false, std::vector<PasswordFormDigest>()); @@ -354,6 +355,18 @@ proxy_backend().GetAutofillableLoginsAsync(/*callback=*/base::DoNothing()); } +TEST_F(PasswordStoreProxyBackendTest, + NoShadowFillMatchingLoginsAsyncWhenSyncDisabled) { + EXPECT_CALL(is_syncing_passwords_callback_, Run) + .WillRepeatedly(Return(false)); + + EXPECT_CALL(main_backend(), FillMatchingLoginsAsync); + EXPECT_CALL(shadow_backend(), FillMatchingLoginsAsync).Times(0); + proxy_backend().FillMatchingLoginsAsync(/*callback=*/base::DoNothing(), + /*include_psl=*/false, + std::vector<PasswordFormDigest>()); +} + TEST_F(PasswordStoreProxyBackendTest, NoShadowAddLoginAsyncWhenSyncEnabled) { EXPECT_CALL(is_syncing_passwords_callback_, Run).WillRepeatedly(Return(true));
diff --git a/components/policy/core/common/cloud/cloud_policy_validator.cc b/components/policy/core/common/cloud/cloud_policy_validator.cc index 25b6eb4d..0ff3f51 100644 --- a/components/policy/core/common/cloud/cloud_policy_validator.cc +++ b/components/policy/core/common/cloud/cloud_policy_validator.cc
@@ -617,7 +617,7 @@ } if (expected != actual) { - LOG(ERROR) << "Invalid user name " << policy_data_->username(); + LOG(ERROR) << "Invalid user name " << actual << ", expected " << expected; UMA_HISTOGRAM_ENUMERATION(kMetricPolicyUserVerification, MetricPolicyUserVerification::kUsernameFailed); return VALIDATION_BAD_USER;
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto index ae7bb13..bda95ee8 100644 --- a/components/policy/proto/device_management_backend.proto +++ b/components/policy/proto/device_management_backend.proto
@@ -1406,7 +1406,7 @@ THUNDERBOLT_CONTROLLER = 5; } -// Hardware component busses. +// Hardware component buses. // Maps to BusInfo types from cros_healthd. enum BusType { BUS_TYPE_UNSPECIFIED = 0;
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index f49eec94..4c71ab72 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -12837,6 +12837,7 @@ 'canvas', 'google_news', 'explore', + 'crosh', ], }, }, @@ -12881,6 +12882,11 @@ 'value': 'explore', 'caption': '''Explore (supported since version 91)''', }, + { + 'name': 'crosh', + 'value': 'crosh', + 'caption': '''Crosh (supported since version 99)''', + }, ], 'supported_on': ['chrome_os:84-'], 'features': { @@ -12890,7 +12896,7 @@ }, 'example_value': ['camera', 'browser_settings', 'os_settings', 'scanning', 'web_store', 'canvas'], 'id': 689, - 'caption': '''Configure the camera, browser settings, os settings, scanning, web store, canvas and explore features to be disabled''', + 'caption': '''Configure the camera, browser settings, os settings, scanning, web store, canvas, explore and crosh features to be disabled''', 'tags': [], 'desc': '''Allows you to set a list of <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> features to be disabled. @@ -13070,7 +13076,7 @@ 'type': 'string', }, }, - 'future_on': ['chrome_os'], + 'supported_on': ['chrome_os:99-'], 'features': { 'dynamic_refresh': True, 'per_profile': False, @@ -29116,7 +29122,7 @@ { 'name': 'ForceDisabled', 'value': 1, - 'caption': '''User Agent reduction diabled, and not enabled by Field-Trials or Origin-Trials.''', + 'caption': '''User Agent reduction disabled, and not enabled by Field-Trials or Origin-Trials.''', }, { 'name': 'ForceEnabled',
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 8128e5d9..d92cad8 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -2562,9 +2562,6 @@ Wird sie nicht konfiguriert, ist die Einfingerbedienung auf dem Anmeldebildschirm anfangs deaktiviert, kann jedoch vom Nutzer jederzeit aktiviert werden.</translation> <translation id="3927291637826333102">Desktop-, Fenster- und Tabaufnahme für diese Ursprünge zulassen</translation> -<translation id="3942041691320538491">Wenn die Richtlinie auf "0" gesetzt ist (Standardeinstellung), kann generell auf die Entwicklertools und die JavaScript-Konsole zugegriffen werden. Für Erweiterungen, die über die Unternehmensrichtlinie installiert wurden, ist der Zugriff aber nicht möglich. Ist die Richtlinie auf "1" gesetzt, können die Entwicklertools und die JavaScript-Konsole in allen Kontexten aufgerufen und verwendet werden, also auch von Erweiterungen, die über die Unternehmensrichtlinie installiert wurden. Wenn die Richtlinie auf "2" gesetzt ist, kann nicht auf die Entwicklertools zugegriffen werden und Websiteelemente können nicht mehr geprüft werden. - - Alle Tastenkombinationen und Einträge im Menü oder Kontextmenü, mit denen die Entwicklertools oder die JavaScript-Konsole aufgerufen werden, werden deaktiviert.</translation> <translation id="3943930334592166130">Diese Richtlinie legt fest, ob Nutzer aufgefordert werden, ein Clientzertifikat auszuwählen, wenn mehrere Zertifikate zu <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> passen. Ist die Richtlinie aktiviert, werden Nutzer aufgefordert, immer dann ein Clientzertifikat auszuwählen, wenn die Richtlinie für die automatische Auswahl zu mehreren Zertifikaten passt. Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, dürfen Nutzer nur dann aufgefordert werden, wenn kein Zertifikat zur automatischen Auswahl passt.</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 5b42eff..45af4ad 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -130,6 +130,7 @@ * ntlm Si no completas esta opción, se usarán los tres esquemas.</translation> <translation id="1153306961094113710">Permitir la depuración remota</translation> +<translation id="115699958189272121">Informar los eventos de <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /></translation> <translation id="1158844608156732189">Configuración de Kerberos (una línea por cada elemento del array), consulta https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html.</translation> <translation id="1160479894929412407">Permitir el protocolo QUIC</translation> <translation id="1160939557934457296">Inhabilita continuar desde la página de advertencia de Navegación segura.</translation> @@ -2576,9 +2577,6 @@ Si no la estableces, inicialmente las teclas especiales estarán inhabilitadas en la pantalla de acceso, pero el usuario podrá habilitarlas en cualquier momento.</translation> <translation id="3927291637826333102">Permitir que estos orígenes capturen pestañas, ventanas y escritorios</translation> -<translation id="3942041691320538491">Si le asignas a la política el valor "0" (la opción predeterminada), podrás acceder a las herramientas para desarrolladores y la Consola de JavaScript, aunque no podrás hacerlo en el contexto de extensiones instaladas por una política empresarial. Si le asignas a la política el valor "1", podrás acceder a las herramientas para desarrolladores y la Consola de JavaScript en todos los contextos, incluido el de extensiones instaladas por una política empresarial. Si le asignas a la política el valor "2", no podrás acceder a las herramientas para desarrolladores ni inspeccionar elementos de sitios web. - - Esta configuración también desactivará las combinaciones de teclas y las entradas del menú contextual o de cualquier menú que permiten abrir las herramientas para desarrolladores o la Consola de JavaScript.</translation> <translation id="3943930334592166130">Esta política controla si se le solicita al usuario que seleccione un certificado de cliente cuando más de un certificado coincide con <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" />. Si habilitas esta política, se le solicitará al usuario que seleccione un certificado de cliente cada vez que la política de selección automática coincida con múltiples certificados. Si inhabilitas esta política o no la estableces, solo se le solicitará al usuario que haga una elección cuando ningún certificado coincida con la selección automática.</translation> @@ -3982,6 +3980,7 @@ Si inhabilitas la política, se abrirán los archivos PDF, a menos que los usuarios desactiven el complemento de PDF. Si estableces esta política, los usuarios no podrán cambiarla en <ph name="PRODUCT_NAME" />. Si no la estableces, los usuarios podrán elegir si desean abrir los archivos PDF de forma externa o no.</translation> +<translation id="5705828032077475554">Informar las sesiones de CRD</translation> <translation id="5708969689202733975">Configurar los modos de desbloqueo rápido permitidos</translation> <translation id="5714563837055244378">Permitir que Android comparta aplicaciones web</translation> <translation id="5715617256528927547">Si estableces la política, se especificará la duración (expresada en horas) de almacenamiento en caché del Objeto de directiva de grupo (GPO). Este valor indica el tiempo máximo en el que pueden reutilizarse los GPO antes de que se vuelvan a descargar. En lugar de volverlos a descargar en cada recuperación de la política, el sistema volverá a utilizar los almacenados en caché, siempre que no cambien de versión. @@ -4579,6 +4578,7 @@ Si la estableces como verdadera o no la estableces, se informará la configuración de red del dispositivo.</translation> <translation id="6401669939808766804">Salir de la cuenta de usuario</translation> <translation id="640244877779556713">Habilita la sugerencia de emojis</translation> +<translation id="6404064917675764807">No informar eventos de sesiones CRD</translation> <translation id="6407093060083181305">Configura la lista de extensiones que se permiten instalar</translation> <translation id="640827304541402854">Inhabilitar el cruce seguro de firewall desde hosts de acceso remoto</translation> <translation id="6412352702230183710">Permitir solo hosts de mensajería nativa a nivel del sistema</translation> @@ -4942,6 +4942,11 @@ Si no la estableces, se desactivará el modo de contraste alto en la pantalla de acceso. Los usuarios podrán activarlo en cualquier momento y su estado para la pantalla de acceso se mantendrá entre los diferentes usuarios. Nota: Si se especifica <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" />, anulará esta política.</translation> +<translation id="6833462729740272863">Configura una lista de direcciones URL que pueden permanecer en modo pantalla completa sin mostrar una notificación cuando el dispositivo sale de la pantalla de bloqueo. + + En general, el modo pantalla completa se desactiva al salir de la pantalla de bloqueo, a fin de reducir el riesgo de una suplantación de la identidad. Esta política permite especificar direcciones URL que se consideran fuentes confiables, las cuales pueden permanecer en modo pantalla completa cuando el dispositivo esté desbloqueado. Se establece al especificar una lista de patrones de URL que cumplen con el siguiente formato ( https://www.chromium.org/administrators/url-blocklist-filter-format ). P. ej., es posible permanecer siempre en modo pantalla completa cuando el dispositivo esté desbloqueado e inhabilitar las notificaciones por completo al especificar el caracter comodín <ph name="WILDCARD_VALUE" /> que coincida con todas las direcciones URL. + + Si estableces esta política como una lista vacía o no la estableces, ninguna URL puede permanecer en modo pantalla completa sin mostrar notificaciones.</translation> <translation id="6833988859168635883">Página de inicio, página principal y página Nueva pestaña</translation> <translation id="6835883744948188639">Mostrar un mensaje recurrente al usuario para indicarle que se recomienda llevar a cabo el reinicio</translation> <translation id="683688607121170501">Esta configuración permite que los usuarios cambien entre Cuentas de Google en el área de contenido de la ventana del navegador y en apps de Android después de acceder en el dispositivo con <ph name="PRODUCT_OS_NAME" />. @@ -6153,6 +6158,7 @@ <translation id="8219813789911069300">Bloquear descargas con contenido malicioso (recomendado)</translation> <translation id="8220023426952118761">Tasa de descarga deseada en kbit/s.</translation> <translation id="8220156281401380422">Configura la lista de mensajería nativa permitida</translation> +<translation id="822055204938220476">Lista de direcciones URL que pueden permanecer en modo pantalla completa sin mostrar una notificación</translation> <translation id="8229912067600517877">Habilitar las Herramientas para desarrolladores</translation> <translation id="8238421250255592181">Función experimental booleana que indica si el teclado en pantalla puede proporcionar la función de autocompletar.</translation> <translation id="8239109177194627162">Inhabilitar Autocompletar para las tarjetas de crédito</translation> @@ -6513,6 +6519,10 @@ <translation id="8544465954173828789">Permite que los mensajes SMS se sincronicen desde el teléfono con la Chromebook</translation> <translation id="8566842294717252664">Ocultar ícono de Web Store en la página Nueva pestaña y el Selector de aplicaciones</translation> <translation id="8571314270766672278">Revierte y restablece el dispositivo en el cambio a una versión inferior del canal (intenta preservar la inscripción)</translation> +<translation id="8571871284943706125">Informa los eventos de sesiones de CRD en los dispositivos inscriptos para los usuarios afiliados. + + Si inhabilitas la política o no la estableces, no se informarán los eventos. + Si la habilitas, los eventos de CRD se informarán, en caso de que el usuario esté afiliado.</translation> <translation id="857369585509260201">Esta política dejó de estar disponible; considera usar la política BrowserSignin en su lugar. Si se establece esta política como verdadera, el usuario deberá acceder a <ph name="PRODUCT_NAME" /> con su perfil antes de usar el navegador. El valor predeterminado de BrowserGuestModeEnabled se establecerá como "false". Debes tener en cuenta que, una vez habilitada esta política, se bloquearán los perfiles a los que no se haya accedido, y no podrás ingresar a ellos. Para obtener más información, consulta el artículo del Centro de ayuda.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 9af3b97..b650a42 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -130,6 +130,7 @@ * ntlm Si dejas esta opción vacía, se podrán usar los tres esquemas.</translation> <translation id="1153306961094113710">Permitir depuración remota</translation> +<translation id="115699958189272121">Informar de los eventos de <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /></translation> <translation id="1158844608156732189">Configuración de Kerberos (una línea por elemento de matriz). Más información: https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html.</translation> <translation id="1160479894929412407">Permitir protocolo QUIC</translation> <translation id="1160939557934457296">Inhabilitar seguir navegando desde la página de advertencia sobre Navegación segura</translation> @@ -2584,9 +2585,6 @@ Si no le asignas ningún valor, las teclas persistentes estarán inhabilitadas inicialmente en la pantalla de inicio de sesión, pero el usuario podrá habilitarlas en cualquier momento.</translation> <translation id="3927291637826333102">Permitir la captura de escritorios, ventanas y pestañas de estos orígenes</translation> -<translation id="3942041691320538491">Si se asigna el valor "0" (predeterminado) a esta política, podrás acceder a las herramientas para desarrolladores y a la consola de JavaScript, pero no en extensiones instaladas por políticas de empresa. Si se le asigna el valor "1", podrás acceder a las herramientas para desarrolladores y a la consola de JavaScript sin excepciones, incluso en extensiones instaladas por políticas de empresa. Si se le asigna el valor "2", no podrás acceder a las herramientas para desarrolladores ni tampoco podrás inspeccionar elementos de sitios web. - - Este ajuste también desactiva las combinaciones de teclas y las entradas de menús o menús contextuales que permiten abrir las herramientas para desarrolladores y la consola de JavaScript.</translation> <translation id="3943930334592166130">Esta política controla si al usuario se le pedirá que seleccione un certificado de cliente cuando haya más de un certificado que coincida con <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" />. Si se habilita esta política, se le pedirá al usuario que seleccione un certificado de cliente cuando la política de selección automática coincida con varios certificados. Si se inhabilita esta política o no se establece, solo se le podrá pedir al usuario que realice una acción cuando no haya ningún certificado que coincida con la selección automática.</translation> @@ -3992,6 +3990,7 @@ Si se inhabilita, se abrirán los archivos PDF, a menos que los usuarios desactiven el complemento de PDF. Si se le asigna un valor a esta política, los usuarios no podrán cambiarlo en <ph name="PRODUCT_NAME" />. Si no se le asigna ningún valor, los usuarios podrán elegir si se abren o no los PDFs de forma externa.</translation> +<translation id="5705828032077475554">Informar de las sesiones de CRD</translation> <translation id="5708969689202733975">Configurar los modos de desbloqueo rápido permitidos</translation> <translation id="5714563837055244378">Habilitar la opción de compartir de Android a aplicación web.</translation> <translation id="5715617256528927547">Si se establece esta política, se especificará en horas el tiempo de vida en caché de Group Policy Object (GPO). La duración máxima durante la cual los GPO pueden reutilizarse antes de que sea necesario volver a descargarlos. En lugar de volver a descargar los GPO cada vez que se recogen datos de políticas, el sistema puede reutilizar los GPO almacenados en caché siempre que su versión no cambie. @@ -4589,6 +4588,7 @@ Si se le asigna el valor true o no se establece, se enviará información sobre la configuración de red del dispositivo.</translation> <translation id="6401669939808766804">Cerrar la sesión del usuario</translation> <translation id="640244877779556713">Habilitar sugerencias de emojis</translation> +<translation id="6404064917675764807">No informar de los eventos de sesiones de CRD</translation> <translation id="6407093060083181305">Configurar lista de bloqueados de instalación de extensiones</translation> <translation id="640827304541402854">Inhabilitar cruce de cortafuegos desde un host de acceso remoto</translation> <translation id="6412352702230183710">Permitir solo hosts de mensajes nativos a nivel de sistema</translation> @@ -4952,6 +4952,11 @@ Si no se le asigna ningún valor, el modo de contraste alto está desactivado en la pantalla de inicio de sesión. Los usuarios pueden activar el modo de contraste alto cuando quieran y su estado en la pantalla de inicio de sesión permanece entre usuarios. Nota: <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" /> anula esta política si se especifica la anterior.</translation> +<translation id="6833462729740272863">Configura una lista de URLs que pueden permanecer en modo de pantalla completa sin que se muestre una notificación cuando el dispositivo sale de la pantalla de bloqueo. + + Normalmente, el modo de pantalla completa está desactivado cuando el dispositivo sale de la pantalla de bloqueo. Así, se reduce el riesgo de ataques de suplantación de identidad (phishing). Esta política permite definir las URLs que se considerarán fuentes de confianza y que podrán continuar en modo de pantalla completa al desbloquear el dispositivo. Se establece definiendo una lista de patrones de URL con este formato: https://www.chromium.org/administrators/url-blocklist-filter-format. Por ejemplo, es posible mantener siempre el modo de pantalla completa al desbloquear el dispositivo e inhabilitar por completo las notificaciones especificando el carácter comodín <ph name="WILDCARD_VALUE" /> para todas las URLs. + + Si esta política se configura con una lista vacía o no se establece, ninguna URL podrá continuar en modo de pantalla completa sin que se muestre una notificación.</translation> <translation id="6833988859168635883">Inicio, Página principal y página Nueva pestaña</translation> <translation id="6835883744948188639">Mostrar un mensaje periódico al usuario indicando que se recomienda reiniciar el navegador</translation> <translation id="683688607121170501">Esta opción permite que los usuarios cambien de una cuenta de Google a otra en el área de contenido de la ventana de su navegador y en las aplicaciones de Android después de haber iniciado sesión en su dispositivo <ph name="PRODUCT_OS_NAME" />. @@ -6174,6 +6179,7 @@ <translation id="8219813789911069300">Bloquea las descargas maliciosas. Recomendado.</translation> <translation id="8220023426952118761">Velocidad de descarga deseada en kilobits por segundo.</translation> <translation id="8220156281401380422">Configurar la lista de permitidos de mensajes nativos</translation> +<translation id="822055204938220476">Lista de URLs que pueden permanecer en modo de pantalla completa sin que se muestre una notificación</translation> <translation id="8229912067600517877">Habilitar herramientas de desarrollo</translation> <translation id="8238421250255592181">Un indicador booleano que especifica si el teclado en pantalla permite usar la función de autocompletar.</translation> <translation id="8239109177194627162">Inhabilitar la función Autocompletar para tarjetas de crédito</translation> @@ -6517,6 +6523,10 @@ <translation id="8544465954173828789">Permite que los SMS del teléfono se sincronicen con Chromebook.</translation> <translation id="8566842294717252664">Oculta tienda web en página Nueva pestaña y en menú de aplicaciones</translation> <translation id="8571314270766672278">Restaurar y restablecer el dispositivo al cambiar a una versión inferior (intentar conservar el registro)</translation> +<translation id="8571871284943706125">Informa de los eventos de sesiones de CRD en dispositivos registrados de usuarios afiliados. + + Si la política se inhabilita o no se establece, no se proporcionará esta información. + Si se habilita, se informará de los eventos de CRD si los usuarios son afiliados.</translation> <translation id="857369585509260201">Esta política está obsoleta, pero puedes utilizar BrowserSignin en su lugar. Si se asigna el valor "True" a esta política, el usuario deberá iniciar sesión en <ph name="PRODUCT_NAME" /> con su perfil antes de usar el navegador. El valor predeterminado que se asignará a BrowserGuestModeEnabled es "False". Ten en cuenta que, después de habilitar esta política, los perfiles con los que no se haya iniciado sesión se bloquearán y no se podrá acceder a ellos. Para obtener más información, consulta el artículo del Centro de Ayuda.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 09c141f3..76f57fc 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -130,6 +130,7 @@ * ntlm Si cette option est laissée vide, ces trois méthodes peuvent être utilisées.</translation> <translation id="1153306961094113710">Autoriser le débogage à distance</translation> +<translation id="115699958189272121">Signaler les événements <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /></translation> <translation id="1158844608156732189">Configuration Kerberos (une ligne par élément du tableau). Voir https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html.</translation> <translation id="1160479894929412407">Autoriser le protocole QUIC</translation> <translation id="1160939557934457296">Désactiver l'accès au site lors de l'affichage de la page d'avertissement par le service de navigation sécurisée</translation> @@ -2563,9 +2564,6 @@ Si cette règle n'est pas configurée, les touches persistantes sont initialement désactivées sur l'écran de connexion, mais les utilisateurs peuvent les activer à tout moment.</translation> <translation id="3927291637826333102">Autoriser les captures d'écran, de fenêtre et d'onglet selon ces origines</translation> -<translation id="3942041691320538491">Si cette règle est définie sur 0 (valeur par défaut), vous pouvez accéder aux outils pour les développeurs et à la Console JavaScript, sauf si des extensions ont été installées dans le cadre des règles de l'entreprise. Si cette règle est définie sur 1, vous pouvez accéder aux outils pour les développeurs et à la Console JavaScript dans tous les cas, y compris si des extensions ont été installées dans le cadre des règles de l'entreprise. Si cette règle est définie sur 2, vous ne pouvez pas accéder aux outils pour les développeurs ni examiner des éléments de sites Web. - - En outre, les raccourcis clavier, ainsi que les options de menu ou de menu contextuel permettant d'ouvrir ces outils ou cette console sont désactivés.</translation> <translation id="3943930334592166130">Cette règle détermine si l'utilisateur est invité ou non à sélectionner un certificat client quand la règle <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> établit une correspondance avec plus d'un certificat. Si cette règle est activée, l'utilisateur est invité à sélectionner un certificat client chaque fois que la règle de sélection automatique établit une correspondance avec plusieurs certificats. Si cette règle est désactivée ou n'est pas configurée, l'utilisateur ne peut être invité que si la règle de sélection automatique n'établit de correspondance avec aucun certificat.</translation> @@ -3970,6 +3968,7 @@ Si cette règle est désactivée, les fichiers PDF sont ouverts, sauf si les utilisateurs ont désactivé le plug-in PDF. Si cette règle est configurée, les utilisateurs ne peuvent pas la modifier dans <ph name="PRODUCT_NAME" />. Si la règle n'est pas configurée, les utilisateurs peuvent choisir d'ouvrir le PDF en externe ou non.</translation> +<translation id="5705828032077475554">Signaler les sessions CRD</translation> <translation id="5708969689202733975">Configurer les modes de déverrouillage rapide autorisés</translation> <translation id="5714563837055244378">Activer le partage des applis Android vers les applis Web.</translation> <translation id="5715617256528927547">Cette règle permet de spécifier la durée de mise en cache (en heures) des GPO, c'est-à-dire la durée maximale pendant laquelle les GPO peuvent être réutilisés avant d'être de nouveau téléchargés. Au lieu de les télécharger de nouveau à chaque récupération de règle, le système peut réutiliser ceux mis en cache tant que leur version ne change pas. @@ -4564,6 +4563,7 @@ Si elle est définie sur "True" ou n'est pas définie, la configuration du réseau de l'appareil sera signalée.</translation> <translation id="6401669939808766804">Déconnecter l'utilisateur</translation> <translation id="640244877779556713">Activer la suggestion d'emoji</translation> +<translation id="6404064917675764807">Ne pas signaler les événements de sessions CRD</translation> <translation id="6407093060083181305">Configurer la liste de blocage concernant l'installation des extensions</translation> <translation id="640827304541402854">Désactiver la traversée de pare-feu depuis l'hôte d'accès à distance</translation> <translation id="6412352702230183710">Autoriser uniquement les hôtes de messagerie natifs au niveau du système</translation> @@ -4927,6 +4927,11 @@ Si cette règle n'est pas définie, le mode Contraste élevé est désactivé sur l'écran de connexion, mais les utilisateurs peuvent l'activer à tout moment. Dans ce cas, il reste activé d'un utilisateur à l'autre. Remarque : <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" /> remplace cette règle si l'ancienne est définie.</translation> +<translation id="6833462729740272863">Configure une liste d'URL autorisées à rester en mode plein écran sans afficher de notification lorsque l'appareil est réactivé après avoir été en mode verrouillage de l'écran. + + Normalement, le mode plein écran est désactivé lors de cette réactivation afin de réduire le risque d'attaques par hameçonnage. Cette règle permet d'indiquer des URL qui seront considérées comme des source fiables et autorisées à conserver le mode plein écran lors du déverrouillage. Pour la définir, vous devez spécifier une liste d'URL au format indiqué sur https://www.chromium.org/administrators/url-blocklist-filter-format. Par exemple, vous pouvez toujours conserver le mode plein écran lors du déverrouillage et désactiver complètement les notifications en spécifiant le caractère générique <ph name="WILDCARD_VALUE" />, qui correspond à toutes les URL. + + Si cette règle est associée à une liste vide ou si elle n'est pas définie, aucune URL n'est autorisée à conserver le mode plein écran sans notification.</translation> <translation id="6833988859168635883">Démarrage, page d'accueil et page Nouvel onglet</translation> <translation id="6835883744948188639">Afficher une invite récurrente indiquant qu'un redémarrage est recommandé</translation> <translation id="683688607121170501">Ce paramètre permet aux utilisateurs de basculer d'un compte Google à l'autre dans la zone de contenu de la fenêtre de leur navigateur et dans les applications Android une fois qu'ils sont connectés sur leur appareil <ph name="PRODUCT_OS_NAME" />. @@ -6149,6 +6154,7 @@ <translation id="8219813789911069300">Bloquer les téléchargements malveillants. Recommandé.</translation> <translation id="8220023426952118761">Débit de téléchargement souhaité en kbit/s.</translation> <translation id="8220156281401380422">Configurer la liste d'autorisation de messagerie native</translation> +<translation id="822055204938220476">Liste des URL autorisées à rester en mode plein écran sans afficher de notification</translation> <translation id="8229912067600517877">Activer les Outils pour les développeurs</translation> <translation id="8238421250255592181">Indicateur booléen spécifiant si la saisie semi-automatique est disponible ou non avec le clavier à l'écran.</translation> <translation id="8239109177194627162">Désactiver la saisie automatique pour les cartes de crédit</translation> @@ -6483,6 +6489,10 @@ <translation id="8544465954173828789">Autoriser la synchronisation des SMS entre le téléphone et le Chromebook</translation> <translation id="8566842294717252664">Masquer le Chrome Web Store sur la page Nouvel onglet et dans le lanceur d'applications</translation> <translation id="8571314270766672278">Effectuer un rollback et réinitialiser l'appareil lors du retour à une version antérieure, en conservant l'enregistrement si possible</translation> +<translation id="8571871284943706125">Signale les événements de sessions CRD sur les appareils enregistrés pour les utilisateurs affiliés. + + Si la règle est désactivée ou si elle n'est pas configurée, ces informations ne seront pas transmises. + Si elle est activée, les événements CRD seront signalés si l'utilisateur est affilié.</translation> <translation id="857369585509260201">Cette règle est obsolète. Veuillez utiliser "BrowserSignin" à la place. Si cette règle est définie sur "True", l'utilisateur doit se connecter à <ph name="PRODUCT_NAME" /> avec son propre profil pour utiliser le navigateur. La valeur par défaut de "BrowserGuestModeEnabled" est définie sur "False". Sachez que les profils existants non signés seront verrouillés et inaccessibles une fois cette règle activée. Pour en savoir plus, consultez l'article correspondant du centre d'aide.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 5a6cd5c..56cab8a 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -2584,9 +2584,6 @@ Jika kebijakan ini tidak ditetapkan, tombol lekat mula-mula akan dinonaktifkan di layar login, tetapi dapat diaktifkan oleh pengguna kapan saja.</translation> <translation id="3927291637826333102">Mengizinkan tangkapan Desktop, Jendela, dan Tab berdasarkan asal berikut</translation> -<translation id="3942041691320538491">Jika kebijakan ditetapkan ke 0 (default), Anda akan dapat mengakses alat developer dan konsol JavaScript, tetapi bukan dalam konteks ekstensi yang diinstal oleh kebijakan perusahaan. Jika kebijakan ditetapkan ke 1, Anda akan dapat mengakses alat developer dan konsol JavaScript di semua konteks, termasuk yang berasal dari ekstensi yang diinstal oleh kebijakan perusahaan. Jika kebijakan ditetapkan ke 2, Anda tidak akan dapat mengakses alat developer, dan Anda tidak dapat memeriksa elemen situs. - - Setelan ini juga menonaktifkan pintasan keyboard dan entri menu atau menu konteks untuk membuka alat developer atau konsol JavaScript.</translation> <translation id="3943930334592166130">Kebijakan ini mengontrol apakah pengguna akan diminta memilih sertifikat klien saat lebih dari satu sertifikat cocok dengan <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" />. Jika kebijakan ini disetel ke Aktif, pengguna akan diminta memilih sertifikat klien setiap kali kebijakan pemilihan otomatis cocok dengan beberapa sertifikat. Jika kebijakan ini disetel ke Nonaktif atau tidak disetel, pengguna mungkin hanya diminta saat tidak ada sertifikat yang cocok dengan pemilihan otomatis.</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 2b18096..ddd37207c 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -2563,9 +2563,6 @@ Se questo criterio non viene impostato, inizialmente i tasti permanenti sono disattivati nella schermata di accesso, ma l'utente può attivarli in qualsiasi momento.</translation> <translation id="3927291637826333102">Consenti acquisizione schermate desktop, schede e finestre in base a queste origini</translation> -<translation id="3942041691320538491">Se il criterio è impostato su 0 (valore predefinito), è possibile accedere agli strumenti per sviluppatori e alla console JavaScript, ma non se ci sono estensioni installate in base alle norme aziendali. Se il criterio è impostato su 1, è possibile accedere agli strumenti per sviluppatori e alla console JavaScript in ogni caso, anche se ci sono estensioni installate in base alle norme aziendali. Se il criterio è impostato su 2, non è possibile accedere agli strumenti per sviluppatori, né esaminare gli elementi del sito web. - - Questa impostazione disattiva anche le scorciatoie da tastiera e le voci dei menu o dei menu contestuali per aprire gli strumenti per sviluppatori o la console JavaScript.</translation> <translation id="3943930334592166130">Questo criterio controlla se all'utente viene richiesto di selezionare un certificato client quando più certificati corrispondono a <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" />. Se il criterio viene impostato su Attivato, all'utente viene richiesto di selezionare un certificato client quando il criterio di selezione automatica corrisponde a più certificati. Se viene impostato su Disattivato o se non viene configurato, all'utente può essere richiesta la selezione solo quando nessun certificato corrisponde alla selezione automatica.</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index 080496b..f4e66cc 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -2503,8 +2503,6 @@ このポリシーを設定しない場合、ログイン画面において固定キーは初期設定で無効になりますが、ユーザーはいつでも設定を有効にできます。</translation> <translation id="3927291637826333102">指定オリジンによるデスクトップ、ウィンドウ、タブのキャプチャを許可する</translation> -<translation id="3942041691320538491">このポリシーを 0(デフォルト)に設定した場合、デベロッパー ツールと JavaScript コンソールにアクセスできますが、企業ポリシーによってインストールされた拡張機能でのアクセスは許可されません。このポリシーを 1 に設定した場合、あらゆる状況でデベロッパー ツールと JavaScript コンソールにアクセスできます。企業ポリシーによってインストールされた拡張機能でのアクセスも許可されます。このポリシーを 2 に設定した場合、デベロッパー ツールにアクセスできず、ウェブサイト要素も検査できなくなります。 - この設定では、デベロッパー ツールや JavaScript コンソールを開くためのキーボード ショートカット、メニューのエントリ、コンテキスト メニューのエントリも無効になります。</translation> <translation id="3943930334592166130">このポリシーで、複数の証明書が <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> と一致した場合にクライアント証明書を選択するよう求めるメッセージをユーザーに表示するかどうかを管理します。 このポリシーを有効に設定した場合は、自動選択ポリシーが複数の証明書と一致した場合に常にクライアント証明書を選択するよう求めるメッセージがユーザーに表示されます。 このポリシーを無効に設定するか未設定のままにした場合は、自動選択と一致する証明書がない場合のみユーザーにメッセージが表示されます。</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 5bf7bfb..97228b33 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -2572,9 +2572,6 @@ 정책이 설정되지 않으면 처음에는 로그인 화면에서 고정키가 사용되지 않지만 나중에 사용자가 언제든지 사용 설정할 수 있습니다.</translation> <translation id="3927291637826333102">출처의 바탕화면, 창, 탭 캡처 허용</translation> -<translation id="3942041691320538491">정책을 0(기본값)으로 설정하면 개발자 도구 및 자바스크립트 콘솔에 액세스할 수 있지만 기업 정책으로 설치한 확장 프로그램에서는 액세스할 수 없습니다. 정책을 1로 설정하면 기업 정책으로 설치한 확장 프로그램을 비롯하여 모든 상황에서 개발자 도구 및 자바스크립트 콘솔에 액세스할 수 있습니다. 정책을 2로 설정하면 개발자 도구에 액세스할 수 없으며 웹사이트 요소를 검사할 수 없습니다. - - 또한 이 설정은 개발자 도구 또는 자바스크립트 콘솔을 여는 단축키, 메뉴 항목, 컨텍스트 메뉴 항목의 사용을 중지합니다.</translation> <translation id="3943930334592166130">이 정책은 <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" />와 일치하는 인증서가 여러 개일 때 사용자에게 클라이언트 인증서를 선택하라는 메시지를 표시할지 제어합니다. 정책을 사용으로 설정하면 자동 선택 정책과 일치하는 인증서가 여러 개 있을 때마다 사용자에게 클라이언트 인증서를 선택하라는 메시지가 표시됩니다. 정책을 사용 안함으로 설정하거나 설정하지 않으면 자동 선택과 일치하는 인증서가 없을 때만 사용자에게 메시지가 표시됩니다.</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 30eb65a..a2bc69a 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -2546,9 +2546,6 @@ Als dit beleid niet is ingesteld, staan de plaktoetsen in eerste instantie uit op het inlogscherm. De gebruiker kan deze functie op elk gewenst moment aanzetten.</translation> <translation id="3927291637826333102">Bureaublad-, venster- en tabbladopname door deze oorsprongen toestaan</translation> -<translation id="3942041691320538491">Als je het beleid instelt op 0 (standaardinstelling), heb je toegang tot de tools voor ontwikkelaars en de JavaScript-console, maar niet in de context van extensies die via het organisatiebeleid zijn geïnstalleerd. Als je het beleid instelt op 1, heb je toegang tot de tools voor ontwikkelaars en de JavaScript-console in alle contexten, waaronder die van extensies die via het organisatiebeleid zijn geïnstalleerd. Als je het beleid instelt op 2, heb je geen toegang tot de tools voor ontwikkelaars en kun je website-elementen niet inspecteren. - - Met deze instelling worden sneltoetsen en menu- en contextmenu-opties uitgezet waarmee tools voor ontwikkelaars of de JavaScript-console kunnen worden geopend.</translation> <translation id="3943930334592166130">Met dit beleid bepaal je of de gebruiker wordt gevraagd een clientcertificaat te selecteren als meerdere certificaten overeenkomen met <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" />. Als je dit beleid toepast, wordt de gebruiker gevraagd een clientcertificaat te selecteren als het beleid voor automatisch selecteren overeenkomt met meerdere certificaten. Als je dit beleid niet toepast of niet instelt, wordt de gebruiker misschien alleen gevraagd een clientcertificaat te selecteren als geen enkel certificaat overeenkomt met de automatische selectie.</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index c8925f92..38eea84 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -2574,9 +2574,6 @@ Se esta política não for definida, as teclas de aderência ficarão inicialmente desativadas na tela de login, mas poderão ser ativadas pelo usuário a qualquer momento.</translation> <translation id="3927291637826333102">Permitir captura de área de trabalho, janela e guia por estas origens</translation> -<translation id="3942041691320538491">Se a política for definida como 0 (o padrão), você poderá acessar as ferramentas para desenvolvedores e o Console JavaScript, mas não no contexto de extensões instaladas pela política da empresa. Se ela for definida como 1, você poderá acessar as ferramentas para desenvolvedores e o Console JavaScript em todos os contextos, inclusive o das extensões instaladas pela política da empresa. Se ela for definida como 2, não será possível acessar as ferramentas para desenvolvedores nem inspecionar elementos de sites. - - Essa definição também desativa atalhos de teclado e entradas do menu de contexto ou do menu para abrir as ferramentas para desenvolvedores e o Console JavaScript.</translation> <translation id="3943930334592166130">Esta política controla se o usuário receberá uma solicitação para selecionar um certificado de cliente quando a <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> corresponder a mais de um certificado. Se esta política for definida como "Ativada", o usuário receberá uma solicitação para selecionar um certificado de cliente sempre que a política de seleção automática corresponder a vários certificados. Se esta política for definida como "Desativada" ou deixada sem definição, o usuário só receberá a solicitação quando nenhum certificado corresponder à seleção automática.</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 7e921085..99dee59d 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -2554,9 +2554,6 @@ Если значение не задано, залипание клавиш на экране входа будет по умолчанию отключено, но пользователь сможет включить его в любой момент.</translation> <translation id="3927291637826333102">Разрешить захват рабочего стола, окна и вкладки этими источниками</translation> -<translation id="3942041691320538491">Если для правила задано значение 0 (оно выбрано по умолчанию), то доступ к инструментам разработчика и консоли JavaScript будет разрешен, кроме расширений, установленных в соответствии с корпоративными правилами. Если задано значение 1, доступ к инструментам разработчика и консоли JavaScript будет разрешен всегда, в том числе для расширений, установленных в соответствии с корпоративными правилами. Если задано значение 2, доступ к инструментам разработчика будет запрещен и их нельзя будет использовать для просмотра кода элементов сайтов. - - Кроме того, будут отключены быстрые клавиши, а также пункты меню и контекстного меню, открывающие инструменты разработчика или консоль JavaScript.</translation> <translation id="3943930334592166130">Это правило определяет, запрашивать ли выбор сертификата клиента, если <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> соответствует несколько сертификатов. Если правило включено, пользователю предлагается выбрать один из сертификатов клиента, соответствующих правилу автоматического выбора. Если правило отключено или не настроено, пользователю предлагается указать сертификат, только когда нет сертификатов, соответствующих правилу автоматического выбора.</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 89e358d..d82c57b 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -2546,9 +2546,6 @@ หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะปิดใช้คีย์ติดหนึบในหน้าจอการเข้าสู่ระบบในขั้นต้น แต่ผู้ใช้จะเปิดใช้ได้ทุกเมื่อ</translation> <translation id="3927291637826333102">อนุญาตให้ต้นทางเหล่านี้จับภาพเดสก์ท็อป หน้าต่าง และแท็บ</translation> -<translation id="3942041691320538491">การตั้งค่านโยบายเป็น 0 (ค่าเริ่มต้น) หมายความว่าคุณจะเข้าถึงเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์และคอนโซล JavaScript ได้ แต่ไม่ใช่ในบริบทของส่วนขยายที่ติดตั้งโดยนโยบายระดับองค์กร การตั้งค่านโยบายเป็น 1 หมายความว่าคุณจะเข้าถึงเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์และคอนโซล JavaScript ได้ในทุกบริบท ซึ่งรวมถึงส่วนขยายที่ติดตั้งโดยนโยบายระดับองค์กร การตั้งค่านโยบายเป็น 2 หมายความว่าคุณจะเข้าถึงเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ไม่ได้และตรวจสอบองค์ประกอบของเว็บไซต์ไม่ได้ - - การตั้งค่านี้ยังปิดแป้นพิมพ์ลัดและเมนูหรือรายการในเมนูตามบริบทเพื่อเปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์หรือคอนโซล JavaScript ด้วย</translation> <translation id="3943930334592166130">นโยบายนี้ควบคุมว่าระบบจะแสดงข้อความแจ้งให้ผู้ใช้เลือกใบรับรองไคลเอ็นต์หรือไม่เมื่อมีใบรับรองที่ตรงกันมากกว่า 1 รายการ <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> หากตั้งค่านโยบายนี้เป็น "เปิดใช้" ระบบจะแสดงข้อความแจ้งให้ผู้ใช้เลือกใบรับรองไคลเอ็นต์เมื่อนโยบายการเลือกอัตโนมัติพบใบรับรองที่ตรงกันหลายรายการ หากตั้งค่านโยบายนี้เป็น "ปิดใช้" หรือไม่ได้ตั้งค่า ระบบอาจแสดงข้อความแจ้งผู้ใช้เฉพาะในกรณีที่ไม่มีใบรับรองตรงกับการเลือกอัตโนมัติ</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index eee383ae..f283348 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -130,6 +130,7 @@ * ntlm Bu seçenek boş bırakılırsa üç şema da kullanılabilir.</translation> <translation id="1153306961094113710">Uzaktan hata ayıklamaya izin ver</translation> +<translation id="115699958189272121"><ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> etkinliklerini raporla</translation> <translation id="1158844608156732189">Kerberos yapılandırması (dizi öğesi başına bir satır). https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html adresine bakın.</translation> <translation id="1160479894929412407">QUIC protokolüne izin verin</translation> <translation id="1160939557934457296">Güvenli Tarama uyarı sayfasından ilerlemeyi devre dışı bırak</translation> @@ -2567,9 +2568,6 @@ Bu politika ayarlanmadan bırakılırsa giriş ekranında yapışkan tuşlar devre dışı bırakılır, ancak kullanıcılar istedikleri zaman etkinleştirebilirler.</translation> <translation id="3927291637826333102">Bu kaynakların Masaüstü, Pencere ve Sekme yakalamasına izin ver</translation> -<translation id="3942041691320538491">Politika 0 (varsayılan) değerine ayarlanırsa geliştirici araçlarına ve JavaScript konsoluna erişebilirsiniz. Ancak kurumsal politikaya göre yüklenen uzantıların bağlamında bu erişimi sağlayamazsınız. Politika 1 değerine ayarlanırsa kurumsal politikaya göre yüklenen uzantıların bağlamı dahil tüm bağlamlarda geliştirici araçlarına ve JavaScript konsoluna erişebilirsiniz. Politika 2 değerine ayarlanırsa geliştirici araçlarına erişemezsiniz ve web sitesi öğelerini inceleyemezsiniz. - - Bu ayar, geliştirici araçlarını veya JavaScript konsolunu açmak için klavye kısayollarını ve menü veya içerik menüsü girişlerini de kapatır.</translation> <translation id="3943930334592166130">Bu politika, <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> ile eşleşen birden fazla sertifika olduğunda kullanıcıdan bir istemci sertifikası seçmesinin istenip istenmeyeceğini kontrol eder. Bu politika Etkin değerine ayarlanırsa, otomatik seçim politikası birden fazla sertifikayla eşleştiğinde kullanıcıdan bir istemci sertifikası seçmesi istenir. Bu politika Devre Dışı değerine ayarlanırsa veya ayarlanmadan bırakılırsa kullanıcıdan yalnızca otomatik seçimle eşleşen sertifika olmadığında seçim yapması istenebilir.</translation> @@ -3972,6 +3970,7 @@ Politika Devre Dışı değerine ayarlanırsa PDF eklentisi, kullanıcılar tarafından kapatılmadığı sürece PDF dosyalarını açar. Bu politikayı ayarlarsanız kullanıcılar <ph name="PRODUCT_NAME" /> ürününde değiştiremez. Politika ayarlanmadan bırakılırsa kullanıcılar PDF dosyalarının haricen açılıp açılmayacağını seçebilir.</translation> +<translation id="5705828032077475554">CRD oturumlarını raporla</translation> <translation id="5708969689202733975">İzin verilen hızlı kilit açma modlarını yapılandır</translation> <translation id="5714563837055244378">Android'den Web Uygulamasına paylaşımı etkinleştirin.</translation> <translation id="5715617256528927547">Politikanın ayarlanması, Grup Politika Nesnesi (GPO) önbellek ömrünü saat cinsinden belirtir. Önbellek ömrü, GPO'ların tekrar indirilene kadar yeniden kullanılabileceği maksimum süredir. Sistem, her politika getirildiğinde GPO'ları tekrar indirmek yerine, önbelleğe alınmış GPO'ları sürümleri aynı kaldığı sürece yeniden kullanabilir. @@ -4543,6 +4542,7 @@ Doğru değerine ayarlanır veya ayarlanmadan bırakılırsa cihazınızın ağ yapılandırması raporlanır.</translation> <translation id="6401669939808766804">Kullanıcının oturumunu kapat</translation> <translation id="640244877779556713">Emoji Önerilerini Etkinleştir</translation> +<translation id="6404064917675764807">CRD oturum etkinliklerini raporlama</translation> <translation id="6407093060083181305">Uzantı yükleme engellenenler listesini yapılandır</translation> <translation id="640827304541402854">Uzaktan erişim ana makinesinden güvenlik duvarı geçişini devre dışı bırak</translation> <translation id="6412352702230183710">Yalnızca sistem düzeyinde yerel mesajlaşma ana makinelerine izin ver</translation> @@ -4906,6 +4906,11 @@ Ayarlanmazsa oturum açma ekranında Yüksek kontrast modu kapalıdır. Kullanıcılar, özelliği istedikleri zaman açabilir ve özelliğin oturum açma ekranındaki durumu tüm kullanıcılar için aynı kalır. Not: <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" /> belirtilmişse bu politikayı geçersiz kılar.</translation> +<translation id="6833462729740272863">Cihaz kilit ekranından döndüğünde bildirim göstermeden tam ekran modunda kalmasına izin verilen URL'lerin listesini yapılandırın. + + Normalde kimlik avı saldırısı riskini azaltmak için kilit ekranından dönerken tam ekran modu kapatılır. Bu politika sayesinde kilit açma sırasında tam ekran moduna devam etmesine izin verilen ve güvenilir kaynak olarak kabul edilecek belirli URL'lerin belirtilmesi sağlanır. Politika bu biçime (https://www.chromium.org/administrators/url-blocklist-filter-format) göre biçimlendirilmiş bir URL kalıpları listesi belirtilerek ayarlanır. Örneğin, tüm URL'lerle eşleşen <ph name="WILDCARD_VALUE" /> joker karakterini belirterek kilit açma sırasında her zaman tam ekran modunu korumak ve bildirimleri tamamen devre dışı bırakmak mümkündür. + + Bu politikanın boş bir listeye ayarlanması veya ayarlamadan bırakılması hiçbir URL'nin bildirim olmadan tam ekran moduna devam etmesine izin verilmeyeceği anlamına gelir.</translation> <translation id="6833988859168635883">Başlangıç, Ana sayfa ve Yeni Sekme sayfası</translation> <translation id="6835883744948188639">Kullanıcıya yeniden başlatmanın önerildiğini belirten yinelenen bir istem gösterme</translation> <translation id="683688607121170501">Bu ayar, kullanıcıların <ph name="PRODUCT_OS_NAME" /> cihazlarında oturum açtıktan sonra tarayıcı pencerelerinin içerik alanındaki Google Hesapları arasında geçiş yapmalarına olanak tanır. @@ -6128,6 +6133,7 @@ <translation id="8219813789911069300">Kötü amaçlı indirmeleri engelle. Önerilen.</translation> <translation id="8220023426952118761">İstenen indirme hızı (kbit/sn. olarak).</translation> <translation id="8220156281401380422">Yerel mesajlaşma izin verilenler listesini yapılandırma</translation> +<translation id="822055204938220476">Bildirim göstermeden tam ekran modunda kalmasına izin verilen URL'lerin listesi</translation> <translation id="8229912067600517877">Geliştirici Araçları'nı etkinleştir</translation> <translation id="8238421250255592181">Dokunmatik klavyede otomatik tamamlama özelliği sunulup sunulamayacağını gösteren bir boole flag'i.</translation> <translation id="8239109177194627162">Kredi kartlarını otomatik doldurmayı devre dışı bırak</translation> @@ -6456,6 +6462,10 @@ <translation id="8544465954173828789">SMS Mesajlarının telefondan Chromebook'a senkronize edilmesine izin ver</translation> <translation id="8566842294717252664">Yeni sekme sayfasında ve uygulama başlatıcıda web mağazasını gizle</translation> <translation id="8571314270766672278">Kanal sürümü değiştiğinde cihazı geri çekip sıfırla, kaydı korumaya çalış</translation> +<translation id="8571871284943706125">İlişkili kullanıcılar için kayıtlı cihazlardaki CRD oturum etkinliklerini raporlayın. + + Bu politika devre dışıysa veya ayarlanmadan bırakılırsa bilgi raporlanmaz. + Politika etkinse ve kullanıcı ilişkiliyse CRD etkinlikleri raporlanır</translation> <translation id="857369585509260201">Bu politika kullanımdan kaldırılmıştır. Bunun yerine BrowserSignin'i kullanabilirsiniz. Bu politika "true" (doğru) olarak ayarlanırsa kullanıcının tarayıcıyı kullanmadan önce <ph name="PRODUCT_NAME" /> ürününde kendi profiliyle oturum açması gerekir. BrowserGuestModeEnabled varsayılan değeri "false" (yanlış) olarak ayarlanır. Bu politika etkinleştirildikten sonra mevcut imzasız profillerin kilitleneceğini ve erişilemez hale geleceğini unutmayın. Daha fazla bilgi edinmek için yardım merkezi makalesine bakabilirsiniz.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 08381f69..d7a09fed 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -2583,9 +2583,6 @@ Якщо це правило не налаштовано, залипання клавіш на екрані входу буде вимкнено, але користувачі зможуть будь-коли ввімкнути його.</translation> <translation id="3927291637826333102">Дозволити цим джерелам записувати робочий стіл, вікна та вкладки</translation> -<translation id="3942041691320538491">Якщо для цього правила вибрано значення 0 (значення за умовчанням), ви матимете доступ до інструментів розробника та Консолі JavaScript, але не до розширень, установлених згідно з корпоративними правилами. Якщо для нього вибрано значення 1, ви отримуєте повний доступ до інструментів розробника й консолі JavaScript, зокрема до розширень, установлених згідно з корпоративними правилами. Якщо для цього правила вибрано значення 2, ви не матимете доступу до інструментів розробника та не зможете перевіряти елементи веб-сайту. - - Це налаштування також вимикає комбінації клавіш і пункти меню або контекстного меню, які відкривають інструменти розробника чи Консоль JavaScript.</translation> <translation id="3943930334592166130">Це правило дає змогу вибрати, чи показувати користувачам запит на вибір сертифіката клієнта, коли правилу <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> відповідає декілька сертифікатів. Якщо це правило ввімкнути, користувача просять вибрати сертифікат клієнта, коли правилу автоматичного вибору відповідає декілька сертифікатів. Якщо його вимкнути або не налаштувати, користувач бачитиме такий запит, лише якщо жоден сертифікат не відповідатиме автоматичному вибору.</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 6dcda6b9..1d97f09 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -2573,9 +2573,6 @@ Nếu bạn không đặt chính sách này, thì ban đầu, phím cố định sẽ tắt trên màn hình đăng nhập nhưng người dùng có thể bật bất cứ lúc nào.</translation> <translation id="3927291637826333102">Cho phép chụp Màn hình, Cửa sổ và Thẻ theo các nguồn gốc này</translation> -<translation id="3942041691320538491">Nếu đặt chính sách này thành 0 (giá trị mặc định), thì bạn có thể truy cập vào công cụ cho nhà phát triển và Bảng điều khiển JavaScript. Tuy nhiên, bạn sẽ không truy cập được trong trường hợp đã cài đặt tiện ích theo chính sách doanh nghiệp. Nếu đặt chính sách này thành 1, thì bạn có thể truy cập vào công cụ cho nhà phát triển và Bảng điều khiển JavaScript trong mọi trường hợp, bao gồm cả trường hợp đã cài đặt tiện ích theo chính sách doanh nghiệp. Nếu đặt chính sách này thành 2, thì bạn không thể truy cập vào công cụ cho nhà phát triển cũng như không thể kiểm tra các thành phần của trang web. - - Tùy chọn cài đặt này cũng tắt các phím tắt và mục truy cập trên trình đơn hoặc trình đơn ngữ cảnh để mở công cụ cho nhà phát triển hoặc Bảng điều khiển JavaScript.</translation> <translation id="3943930334592166130">Chính sách này kiểm soát việc người dùng có được nhắc chọn chứng chỉ máy khách hay không khi nhiều chứng chỉ khớp <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" />. Nếu bạn bật chính sách này, thì người dùng sẽ được nhắc chọn chứng chỉ máy khách mỗi khi chính sách tự động chọn khớp với nhiều chứng chỉ. Nếu bạn tắt hoặc không đặt chính sách này, thì người dùng chỉ có thể được nhắc khi không có chứng chỉ nào khớp với chính sách tự động chọn.</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 779564b..2c87873 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -130,6 +130,7 @@ * ntlm 如果您将此选项留空,上述三种方案都可以使用。</translation> <translation id="1153306961094113710">允许进行远程调试</translation> +<translation id="115699958189272121">报告 <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" />事件</translation> <translation id="1158844608156732189">Kerberos 配置(每个数组项各占 1 行),请参阅 https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html。</translation> <translation id="1160479894929412407">允许使用 QUIC 协议</translation> <translation id="1160939557934457296">禁止从安全浏览警告页面继续访问</translation> @@ -2539,9 +2540,6 @@ 如果您未设置此政策,粘滞键在登录屏幕上最初会处于停用状态,但用户可随时启用它。</translation> <translation id="3927291637826333102">允许这些来源使用桌面、窗口和标签页截取功能</translation> -<translation id="3942041691320538491">如果此政策设为 0(默认值),您可以访问开发者工具和 JavaScript 控制台,但无法在由企业政策安装的扩展程序中访问。如果此政策设为 1,无论在什么情境下(包括在由企业政策安装的扩展程序中),您都可以访问开发者工具和 JavaScript 控制台。如果此政策设为 2,您既无法访问开发者工具,也无法检查网站元素。 - - 此设置还可关闭用于打开开发者工具或 JavaScript 控制台的键盘快捷键及菜单(或上下文菜单)条目。</translation> <translation id="3943930334592166130">此政策旨在控制是否让系统在有多个证书与 <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> 匹配时提示用户选择客户端证书。 如果此政策已启用,每当自动选择政策与多个证书匹配时,系统都会提示用户选择客户端证书。 如果此政策已停用或未设置,只有当无任何证书与自动选择政策匹配时,系统才会提示用户。</translation> @@ -3942,6 +3940,7 @@ 如果此政策已停用,则意味着系统会使用 PDF 插件打开 PDF 文件,除非用户已关闭该插件。 如果您设置了此政策,用户将无法在 <ph name="PRODUCT_NAME" /> 中更改它。如果您未设置此政策,用户便可选择是否要在外部打开 PDF。</translation> +<translation id="5705828032077475554">报告 CRD 会话</translation> <translation id="5708969689202733975">配置所允许的“快速解锁”模式</translation> <translation id="5714563837055244378">启用 Android 应用至 Web 应用分享功能。</translation> <translation id="5715617256528927547">通过设置此政策,您可以指定群组政策对象 (GPO) 缓存期限(以小时为单位),即 GPO 在不必重新下载的情况下可被重复使用的时长上限。只要 GPO 的版本未变,系统便会重复使用已缓存的 GPO,而不是在每次提取政策时都重新下载 GPO。 @@ -4511,6 +4510,7 @@ 如果此政策设为 true 或未设置,系统将会报告设备的网络配置。</translation> <translation id="6401669939808766804">使用户退出</translation> <translation id="640244877779556713">启用表情符号建议</translation> +<translation id="6404064917675764807">不报告 CRD 会话事件</translation> <translation id="6407093060083181305">配置扩展程序安装屏蔽名单</translation> <translation id="640827304541402854">禁止从远程访问主机穿越防火墙</translation> <translation id="6412352702230183710">仅允许使用系统级原生消息传递主机</translation> @@ -4873,6 +4873,11 @@ 如果您未设置此政策,高对比度模式会在登录屏幕上处于关闭状态。用户可以随时开启该功能,并且它在登录屏幕上的状态对所有用户都一致。 注意:<ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" />(若已指定)会覆盖此政策。</translation> +<translation id="6833462729740272863">以列表形式配置一系列网址,从而指定当设备从锁屏状态恢复后哪些网址可在不显示通知的情况下保持全屏模式。 + + 通常,当设备从锁屏状态恢复后,系统会关闭全屏模式以降低遭遇钓鱼式攻击的风险。此政策允许指定哪些网址会被视为可信来源且能在屏幕解锁后继续处于全屏模式。设置此政策时,必须按照这种格式 ( https://www.chromium.org/administrators/url-blocklist-filter-format ) 指定网址格式列表。例如,可通过指定与所有网址都匹配的通配符 <ph name="WILDCARD_VALUE" /> 来允许始终在屏幕解锁后保持全屏模式并彻底停用通知功能。 + + 如果此政策设为空列表或未设置,任何网址都无法在不显示通知的情况下继续处于全屏模式。</translation> <translation id="6833988859168635883">启动页、主页和新标签页</translation> <translation id="6835883744948188639">显示建议用户重新启动浏览器的周期性提示</translation> <translation id="683688607121170501">通过此设置,您可允许用户在登录其 <ph name="PRODUCT_OS_NAME" />设备后从浏览器窗口的内容区域和 Android 应用中切换 Google 帐号。 @@ -6085,6 +6090,7 @@ <translation id="8219813789911069300">拦截恶意下载内容。推荐。</translation> <translation id="8220023426952118761">所需的下载速率,以 kb/s 为单位。</translation> <translation id="8220156281401380422">配置本地消息传递主机许可名单</translation> +<translation id="822055204938220476">可在不显示通知的情况下保持全屏模式的网址的列表</translation> <translation id="8229912067600517877">启用开发者工具</translation> <translation id="8238421250255592181">一个布尔值标记,用于表明屏幕键盘能否提供自动填充功能。</translation> <translation id="8239109177194627162">禁止使用“自动填充”功能填写信用卡信息</translation> @@ -6413,6 +6419,10 @@ <translation id="8544465954173828789">允许将短信从手机同步到 Chromebook。</translation> <translation id="8566842294717252664">在“打开新的标签页”页面和应用启动器中不显示网上应用店</translation> <translation id="8571314270766672278">版本降级过程中,回滚并重置设备,在这一过程中让设备保留已注册状态</translation> +<translation id="8571871284943706125">报告已注册的设备上的 CRD 会话事件(仅限已关联的用户)。 + + 如果此政策已停用或未设置,系统将不会报告这些信息。 + 如果此政策已启用,系统将会报告 CRD 事件(倘若用户已被关联)</translation> <translation id="857369585509260201">此政策已弃用,请考虑改用 BrowserSignin。 如果此政策设为 true,用户必须先使用其个人资料登录 <ph name="PRODUCT_NAME" />,然后才能使用该浏览器。此外,BrowserGuestModeEnabled 的默认值会设为 false。请注意,启用此政策后,现有的未登录个人资料将处于锁定且不可访问的状态。有关详情,请参阅帮助中心文章。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index c54de1f0..ce5b3f9 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -130,6 +130,7 @@ * ntlm 如果將這個選項留空,就表示上述三種機制皆可使用。</translation> <translation id="1153306961094113710">允許遠端偵錯</translation> +<translation id="115699958189272121">回報 <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" />事件</translation> <translation id="1158844608156732189">Kerberos 設定 (每個陣列項目各占一行),詳情請參閱 https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html。</translation> <translation id="1160479894929412407">允許 QUIC 通訊協定</translation> <translation id="1160939557934457296">停用略過安全瀏覽警告網頁繼續進行</translation> @@ -2535,9 +2536,6 @@ 如果不設定這項政策,系統會在初次顯示登入畫面時停用相黏鍵功能,但使用者隨時可以啟用。</translation> <translation id="3927291637826333102">依這些來源允許執行螢幕畫面、視窗和分頁擷取功能</translation> -<translation id="3942041691320538491">如果將這項政策設為 0 (預設值),你將可存取開發人員工具和 JavaScript 控制台,但無法在由企業政策安裝的擴充功能中進行存取。如果將這項政策設為 1,你將可在所有情況下存取開發人員工具和 JavaScript 控制台,在由企業政策安裝的擴充功能中也能進行存取。如果將這項政策設為 2,你將無法存取開發人員工具,也無法檢查網站元素。 - - 此外,用來開啟開發人員工具或 JavaScript 控制台的鍵盤快速鍵、選單項目或內容選單項目也會停用。</translation> <translation id="3943930334592166130">當多個憑證與 <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_POLICY_NAME" /> 相符時,這項政策可控管是否要提示使用者選取用戶端憑證。 如果將這項政策設為 Enabled,每當自動選取政策與多個憑證相符時,系統會提示使用者選取用戶端憑證。 如果將這項政策設為 Disabled 或不予設定,則只有在沒有任何符合自動選取政策的憑證時,系統才會提示使用者。</translation> @@ -3933,6 +3931,7 @@ 如果將這項政策設為 Disabled,則表示除非使用者停用 PDF 外掛程式,否則系統一律會使用 PDF 外掛程式開啟 PDF 檔案。 如果設定這項政策,使用者將無法在 <ph name="PRODUCT_NAME" /> 中進行變更。如果不設定這項政策,使用者可以選擇是否要從外部開啟 PDF。</translation> +<translation id="5705828032077475554">回報 CRD 工作階段</translation> <translation id="5708969689202733975">設定允許的快速解鎖模式</translation> <translation id="5714563837055244378">允許從 Android 分享內容到網頁應用程式。</translation> <translation id="5715617256528927547">你可以透過這項政策,指定群組政策物件 (GPO) 快取的效期 (以小時為單位),也就是 GPO 在重新下載前可供重複使用的時間長度上限。只要快取 GPO 的版本沒有改變,系統就能重複使用這些快取 GPO,不必在每次擷取政策時重新下載 GPO。如果將這項政策設為 0,將會關閉 GPO 快取功能。在這種情況下,系統於每次擷取政策時都必須重新下載 GPO,即使 GPO 沒有更動也一樣,因此伺服器負載會增加。 @@ -4493,6 +4492,7 @@ 如果設為 True 或未設定,則系統會回報裝置的網路設定。</translation> <translation id="6401669939808766804">登出使用者</translation> <translation id="640244877779556713">啟用表情符號建議功能</translation> +<translation id="6404064917675764807">不回報 CRD 工作階段事件</translation> <translation id="6407093060083181305">設定擴充功能安裝封鎖清單</translation> <translation id="640827304541402854">禁止遠端存取主機穿越防火牆</translation> <translation id="6412352702230183710">僅允許系統層級的原生訊息傳遞主機</translation> @@ -4852,6 +4852,11 @@ 如果未設定,系統會在登入畫面停用高對比模式。使用者隨時可以啟用高對比模式,而且所有使用者在登入畫面上的高對比模式狀態會保持一致。 注意:如果指定 <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" />,這項政策會遭到覆寫。</translation> +<translation id="6833462729740272863">設定當裝置從螢幕鎖定狀態返回一般使用狀態時,可保持全螢幕模式且不顯示通知的網址清單。 + + 一般來說,裝置從螢幕鎖定狀態返回一般使用狀態時,會關閉全螢幕模式,藉此降低受到網路詐騙攻擊的風險。這項政策可讓你指定要將哪些網址視為信任來源,以便在解鎖裝置時保持全螢幕模式。設定方式為根據這個格式 (https://www.chromium.org/administrators/url-blocklist-filter-format) 指定網址模式格式的清單。例如,可以透過指定萬用字元 <ph name="WILDCARD_VALUE" /> 比對所有網址,在解鎖裝置時一律保持全螢幕模式且關閉通知。 + + 將這項政策設為空白清單或不設定,則表示沒有任何網址可保持全螢幕模式且不顯示通知。</translation> <translation id="6833988859168635883">起始頁面、首頁和新分頁</translation> <translation id="6835883744948188639">顯示週期性提示,建議使用者重新啟動瀏覽器</translation> <translation id="683688607121170501">如果啟用這項設定,當使用者登入 <ph name="PRODUCT_OS_NAME" />裝置後,將可在瀏覽器視窗的內容區域和 Android 應用程式中切換 Google 帳戶。 @@ -6060,6 +6065,7 @@ <translation id="8219813789911069300">封鎖惡意下載作業。這是建議採用的設定。</translation> <translation id="8220023426952118761">理想的下載速率 (kbit/秒)。</translation> <translation id="8220156281401380422">設定內建訊息傳遞許可清單</translation> +<translation id="822055204938220476">允許保持全螢幕模式且不顯示通知的網址清單</translation> <translation id="8229912067600517877">啟用開發人員工具</translation> <translation id="8238421250255592181">布林值標記,表示螢幕小鍵盤是否能提供自動完成功能。</translation> <translation id="8239109177194627162">停用信用卡的自動填入功能</translation> @@ -6389,6 +6395,10 @@ <translation id="8544465954173828789">允許將簡訊從手機同步至 Chromebook。</translation> <translation id="8566842294717252664">在新分頁和應用程式啟動畫面中隱藏線上應用程式商店</translation> <translation id="8571314270766672278">在版本降級時復原和重設裝置,並嘗試保留註冊狀態</translation> +<translation id="8571871284943706125">在已註冊的裝置上為關聯使用者回報 CRD 工作階段。 + + 如果將這項政策設為停用或未設定,系統不會回報這項資訊。 + 如果啟用這項政策,系統會為相關聯的使用者回報 CRD 事件</translation> <translation id="857369585509260201">這項政策已被淘汰,請考慮改用 BrowserSignin。 如果將這項政策設為 True,使用者必須以自己的設定檔登入 <ph name="PRODUCT_NAME" />,才能使用瀏覽器。此外,BrowserGuestModeEnabled 的預設值將設為 False。請注意,啟用這項政策後,未經簽署的現有設定檔會遭到鎖定無法再使用。詳情請參閱說明中心文章。
diff --git a/components/policy/test_support/policy_storage.cc b/components/policy/test_support/policy_storage.cc index 0d8381e..5fd2615 100644 --- a/components/policy/test_support/policy_storage.cc +++ b/components/policy/test_support/policy_storage.cc
@@ -4,10 +4,25 @@ #include "components/policy/test_support/policy_storage.h" #include "base/big_endian.h" +#include "base/strings/strcat.h" +#include "base/strings/string_util.h" #include "crypto/sha2.h" namespace policy { +namespace { + +const char kPolicyKeySeparator[] = "/"; + +std::string GetPolicyKey(const std::string& policy_type, + const std::string& entity_id) { + if (entity_id.empty()) + return policy_type; + return base::StrCat({policy_type, kPolicyKeySeparator, entity_id}); +} + +} // namespace + PolicyStorage::PolicyStorage() : signature_provider_(std::make_unique<SignatureProvider>()) {} @@ -19,14 +34,33 @@ PolicyStorage::~PolicyStorage() = default; std::string PolicyStorage::GetPolicyPayload( - const std::string& policy_type) const { - auto it = policy_payloads_.find(policy_type); + const std::string& policy_type, + const std::string& entity_id) const { + auto it = policy_payloads_.find(GetPolicyKey(policy_type, entity_id)); return it == policy_payloads_.end() ? std::string() : it->second; } +std::vector<std::string> PolicyStorage::GetEntityIdsForType( + const std::string& policy_type) { + std::string prefix = base::StrCat({policy_type, kPolicyKeySeparator}); + std::vector<std::string> ids; + const size_t prefix_length = prefix.length(); + for (const auto& [policy_key, payload] : policy_payloads_) { + if (base::StartsWith(policy_key, prefix)) + ids.push_back(policy_key.substr(prefix_length)); + } + return ids; +} + void PolicyStorage::SetPolicyPayload(const std::string& policy_type, const std::string& policy_payload) { - policy_payloads_[policy_type] = policy_payload; + SetPolicyPayload(policy_type, std::string(), policy_payload); +} + +void PolicyStorage::SetPolicyPayload(const std::string& policy_type, + const std::string& entity_id, + const std::string& policy_payload) { + policy_payloads_[GetPolicyKey(policy_type, entity_id)] = policy_payload; } void PolicyStorage::SetPsmEntry(const std::string& brand_serial_id,
diff --git a/components/policy/test_support/policy_storage.h b/components/policy/test_support/policy_storage.h index e8a840a6..952363d 100644 --- a/components/policy/test_support/policy_storage.h +++ b/components/policy/test_support/policy_storage.h
@@ -29,13 +29,20 @@ PolicyStorage& operator=(PolicyStorage&& policy_storage); virtual ~PolicyStorage(); - // Returns the serialized proto associated with |policy_type|. Returns empty - // string if there is no such association. - std::string GetPolicyPayload(const std::string& policy_type) const; + // Returns the serialized proto associated with |policy_type| and optional + // |entity_id|. Returns empty string if there is no such association. + std::string GetPolicyPayload( + const std::string& policy_type, + const std::string& entity_id = std::string()) const; + std::vector<std::string> GetEntityIdsForType(const std::string& policy_type); + // Associates the serialized proto stored in |policy_payload| with - // |policy_type|. + // |policy_type| and optional |entity_id|. void SetPolicyPayload(const std::string& policy_type, const std::string& policy_payload); + void SetPolicyPayload(const std::string& policy_type, + const std::string& entity_id, + const std::string& policy_payload); SignatureProvider* signature_provider() const { return signature_provider_.get();
diff --git a/components/policy/test_support/request_handler_for_policy.cc b/components/policy/test_support/request_handler_for_policy.cc index bfbe346..e27e98a 100644 --- a/components/policy/test_support/request_handler_for_policy.cc +++ b/components/policy/test_support/request_handler_for_policy.cc
@@ -4,9 +4,12 @@ #include "components/policy/test_support/request_handler_for_policy.h" +#include "base/containers/contains.h" +#include "base/containers/flat_set.h" #include "base/strings/stringprintf.h" #include "base/time/time.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" +#include "components/policy/proto/device_management_backend.pb.h" #include "components/policy/test_support/policy_storage.h" #include "components/policy/test_support/signature_provider.h" #include "components/policy/test_support/test_server_helpers.h" @@ -36,7 +39,7 @@ std::unique_ptr<HttpResponse> RequestHandlerForPolicy::HandleRequest( const HttpRequest& request) { - const std::set<std::string> kCloudPolicyTypes{ + const base::flat_set<std::string> kCloudPolicyTypes{ dm_protocol::kChromeDevicePolicyType, dm_protocol::kChromeExtensionPolicyType, dm_protocol::kChromeMachineLevelUserCloudPolicyType, @@ -46,6 +49,11 @@ dm_protocol::kChromeSigninExtensionPolicyType, dm_protocol::kChromeUserPolicyType, }; + const base::flat_set<std::string> kExtensionPolicyTypes{ + dm_protocol::kChromeExtensionPolicyType, + dm_protocol::kChromeMachineLevelExtensionCloudPolicyType, + dm_protocol::kChromeSigninExtensionPolicyType, + }; std::string request_device_token; if (!GetDeviceTokenFromRequest(request, &request_device_token)) @@ -60,23 +68,44 @@ em::DeviceManagementRequest device_management_request; device_management_request.ParseFromString(request.content); + // If this is a public account request, use the |settings_entity_id| from the + // request as the |username|. This is required to validate policy for + // extensions in device-local accounts. + ClientStorage::ClientInfo modified_client_info(*client_info); + for (const auto& fetch_request : + device_management_request.policy_request().requests()) { + if (fetch_request.policy_type() == + dm_protocol::kChromePublicAccountPolicyType) { + modified_client_info.username = fetch_request.settings_entity_id(); + client_info = &modified_client_info; + break; + } + } + em::DeviceManagementResponse device_management_response; for (const auto& fetch_request : device_management_request.policy_request().requests()) { const std::string& policy_type = fetch_request.policy_type(); // TODO(crbug.com/1221328): Add other policy types as needed. - if (kCloudPolicyTypes.find(policy_type) == kCloudPolicyTypes.end()) { + if (!base::Contains(kCloudPolicyTypes, policy_type)) { return CreateHttpResponse( net::HTTP_BAD_REQUEST, base::StringPrintf("Invalid policy_type: %s", policy_type.c_str())); } std::string error_msg; - if (!ProcessCloudPolicy( - fetch_request, *client_info, - device_management_response.mutable_policy_response() - ->add_responses(), - &error_msg)) { + if (base::Contains(kExtensionPolicyTypes, policy_type)) { + if (!ProcessCloudPolicyForExtensions( + fetch_request, *client_info, + device_management_response.mutable_policy_response(), + &error_msg)) { + return CreateHttpResponse(net::HTTP_BAD_REQUEST, error_msg); + } + } else if (!ProcessCloudPolicy( + fetch_request, *client_info, + device_management_response.mutable_policy_response() + ->add_responses(), + &error_msg)) { return CreateHttpResponse(net::HTTP_BAD_REQUEST, error_msg); } } @@ -100,10 +129,11 @@ // Determine the current key on the client. const SignatureProvider::SigningKey* client_key = nullptr; + const SignatureProvider* signature_provider = + policy_storage()->signature_provider(); + int public_key_version = fetch_request.public_key_version(); if (fetch_request.has_public_key_version()) { - int public_key_version = fetch_request.public_key_version(); - client_key = policy_storage()->signature_provider()->GetKeyByVersion( - public_key_version); + client_key = signature_provider->GetKeyByVersion(public_key_version); if (!client_key) { error_msg->assign(base::StringPrintf("Invalid public key version: %d", public_key_version)); @@ -112,12 +142,16 @@ } // Choose the key for signing the policy. + int signing_key_version = signature_provider->current_key_version(); + if (fetch_request.has_public_key_version() && + signature_provider->rotate_keys()) { + signing_key_version = public_key_version + 1; + } const SignatureProvider::SigningKey* signing_key = - policy_storage()->signature_provider()->GetCurrentKey(); + signature_provider->GetKeyByVersion(signing_key_version); if (!signing_key) { error_msg->assign(base::StringPrintf( - "Can't find signin key for version: %d", - policy_storage()->signature_provider()->current_key_version())); + "Can't find signin key for version: %d", signing_key_version)); return false; } @@ -127,7 +161,9 @@ ? base::Time::Now().ToJavaTime() : policy_storage()->timestamp().ToJavaTime()); policy_data.set_request_token(client_info.device_token); - policy_data.set_policy_value(policy_storage()->GetPolicyPayload(policy_type)); + policy_data.set_policy_value(policy_storage()->GetPolicyPayload( + policy_type, fetch_request.settings_entity_id())); + policy_data.set_settings_entity_id(fetch_request.settings_entity_id()); policy_data.set_machine_name(client_info.machine_name); policy_data.set_service_account_identity( policy_storage()->service_account_identity().empty() @@ -141,10 +177,8 @@ policy_data.set_policy_invalidation_topic( policy_storage()->policy_invalidation_topic()); - if (fetch_request.signature_type() != em::PolicyFetchRequest::NONE) { - policy_data.set_public_key_version( - policy_storage()->signature_provider()->current_key_version()); - } + if (fetch_request.signature_type() != em::PolicyFetchRequest::NONE) + policy_data.set_public_key_version(signing_key_version); policy_data.SerializeToString(fetch_response->mutable_policy_data()); @@ -156,15 +190,16 @@ return false; } - if (fetch_request.public_key_version() != - policy_storage()->signature_provider()->current_key_version()) { + if (!fetch_request.has_public_key_version() || + public_key_version != signing_key_version) { fetch_response->set_new_public_key(signing_key->public_key()); } // Set the verification signature appropriate for the policy domain. // TODO(http://crbug.com/328038): Use the enrollment domain for public // accounts when we add key validation for ChromeOS. - std::string domain = gaia::ExtractDomainName(policy_data.username()); + std::string domain = + gaia::ExtractDomainName(gaia::SanitizeEmail(policy_data.username())); if (!signing_key->GetSignatureForDomain( domain, fetch_response @@ -185,4 +220,27 @@ return true; } +bool RequestHandlerForPolicy::ProcessCloudPolicyForExtensions( + const em::PolicyFetchRequest& fetch_request, + const ClientStorage::ClientInfo& client_info, + em::DevicePolicyResponse* response, + std::string* error_msg) { + // Send one PolicyFetchResponse for each extension configured on the server as + // the client does not actually tell us which extensions it has installed to + // protect user privacy. + std::vector<std::string> ids = + policy_storage()->GetEntityIdsForType(fetch_request.policy_type()); + for (const std::string& id : ids) { + em::PolicyFetchRequest fetch_request_with_id; + fetch_request_with_id.CopyFrom(fetch_request); + fetch_request_with_id.set_settings_entity_id(id); + if (!ProcessCloudPolicy(fetch_request_with_id, client_info, + response->add_responses(), error_msg)) { + return false; + } + } + + return true; +} + } // namespace policy
diff --git a/components/policy/test_support/request_handler_for_policy.h b/components/policy/test_support/request_handler_for_policy.h index beabb9d..e8b2594 100644 --- a/components/policy/test_support/request_handler_for_policy.h +++ b/components/policy/test_support/request_handler_for_policy.h
@@ -5,13 +5,14 @@ #ifndef COMPONENTS_POLICY_TEST_SUPPORT_REQUEST_HANDLER_FOR_POLICY_H_ #define COMPONENTS_POLICY_TEST_SUPPORT_REQUEST_HANDLER_FOR_POLICY_H_ -#include "components/policy/test_support/embedded_policy_test_server.h" - #include <string> #include "components/policy/test_support/client_storage.h" +#include "components/policy/test_support/embedded_policy_test_server.h" namespace enterprise_management { +class DevicePolicyResponse; +class PolicyFetchRequest; class PolicyFetchResponse; } // namespace enterprise_management @@ -42,6 +43,16 @@ const ClientStorage::ClientInfo& client, enterprise_management::PolicyFetchResponse* fetch_response, std::string* error_msg); + + // Add to |response| the policies associated with |client_info| for extension + // policy type in |fetch_request|. Returns true is request is well-formed, or + // false otherwise (in which case, |error_msg| is set with the corresponding + // error message). + bool ProcessCloudPolicyForExtensions( + const enterprise_management::PolicyFetchRequest& fetch_request, + const ClientStorage::ClientInfo& client_info, + enterprise_management::DevicePolicyResponse* response, + std::string* error_msg); }; } // namespace policy
diff --git a/components/policy/test_support/request_handler_for_policy_unittest.cc b/components/policy/test_support/request_handler_for_policy_unittest.cc index bdbf9f35..e6d58ec2 100644 --- a/components/policy/test_support/request_handler_for_policy_unittest.cc +++ b/components/policy/test_support/request_handler_for_policy_unittest.cc
@@ -7,7 +7,9 @@ #include <utility> #include "components/policy/core/common/cloud/cloud_policy_constants.h" +#include "components/policy/core/common/cloud/test/policy_builder.h" #include "components/policy/proto/cloud_policy.pb.h" +#include "components/policy/proto/device_management_backend.pb.h" #include "components/policy/test_support/client_storage.h" #include "components/policy/test_support/embedded_policy_test_server_test_base.h" #include "components/policy/test_support/policy_storage.h" @@ -25,6 +27,10 @@ constexpr char kMachineName[] = "machine_name"; constexpr char kPolicyInvalidationTopic[] = "policy_invalidation_topic"; constexpr char kUsername[] = "user-for-policy@example.com"; +#if !BUILDFLAG(IS_ANDROID) +constexpr char kPublicAccountEntityId[] = "test_user"; +constexpr char kExtensionId[] = "extension_id"; +#endif // !BUILDFLAG(IS_ANDROID) } // namespace @@ -96,15 +102,13 @@ client_info.device_token = kDeviceToken; client_info.device_id = kDeviceId; client_info.machine_name = kMachineName; - client_info.allowed_policy_types.insert( - dm_protocol::kChromeMachineLevelUserCloudPolicyType); + client_info.allowed_policy_types.insert(dm_protocol::kChromeDevicePolicyType); client_storage()->RegisterClient(std::move(client_info)); em::DeviceManagementRequest device_management_request; em::PolicyFetchRequest* fetch_request = device_management_request.mutable_policy_request()->add_requests(); - fetch_request->set_policy_type( - dm_protocol::kChromeMachineLevelExtensionCloudPolicyType); + fetch_request->set_policy_type(dm_protocol::kChromeRemoteCommandPolicyType); SetDeviceTokenHeader(kDeviceToken); SetPayload(device_management_request); @@ -286,4 +290,146 @@ EXPECT_FALSE(fetch_response.new_public_key_signature().empty()); } +#if !BUILDFLAG(IS_ANDROID) +TEST_F(RequestHandlerForPolicyTest, HandleRequest_Success_ExtensionPolicies) { + ClientStorage::ClientInfo client_info; + client_info.device_token = kDeviceToken; + client_info.device_id = kDeviceId; + client_info.username = kUsername; + client_info.allowed_policy_types.insert( + dm_protocol::kChromeExtensionPolicyType); + client_storage()->RegisterClient(client_info); + + em::CloudPolicySettings settings; + settings.mutable_extensionsettings()->mutable_value()->assign( + "extension-policy"); + policy_storage()->SetPolicyPayload(dm_protocol::kChromeExtensionPolicyType, + kExtensionId, + settings.SerializeAsString()); + + em::DeviceManagementRequest device_management_request; + device_management_request.mutable_policy_request() + ->add_requests() + ->set_policy_type(dm_protocol::kChromeExtensionPolicyType); + + SetDeviceTokenHeader(kDeviceToken); + SetPayload(device_management_request); + + StartRequestAndWait(); + + EXPECT_EQ(GetResponseCode(), net::HTTP_OK); + + ASSERT_TRUE(HasResponseBody()); + em::DeviceManagementResponse device_management_response = + GetDeviceManagementResponse(); + + ASSERT_EQ(device_management_response.policy_response().responses_size(), 1); + const em::PolicyFetchResponse& fetch_response = + device_management_response.policy_response().responses(0); + em::PolicyData policy_data; + policy_data.ParseFromString(fetch_response.policy_data()); + EXPECT_EQ(policy_data.policy_type(), dm_protocol::kChromeExtensionPolicyType); + EXPECT_EQ(policy_data.policy_value(), + policy_storage()->GetPolicyPayload( + dm_protocol::kChromeExtensionPolicyType, kExtensionId)); +} + +TEST_F(RequestHandlerForPolicyTest, + HandleRequest_ExtensionPoliciesWithMissingSigningKey) { + ClientStorage::ClientInfo client_info; + client_info.device_token = kDeviceToken; + client_info.device_id = kDeviceId; + client_info.username = kUsername; + client_info.allowed_policy_types.insert( + dm_protocol::kChromeMachineLevelExtensionCloudPolicyType); + client_storage()->RegisterClient(client_info); + + em::CloudPolicySettings settings; + settings.mutable_extensionsettings()->mutable_value()->assign( + "extension-policy"); + policy_storage()->SetPolicyPayload( + dm_protocol::kChromeMachineLevelExtensionCloudPolicyType, kExtensionId, + settings.SerializeAsString()); + policy_storage()->signature_provider()->set_current_key_version(-1); + + em::DeviceManagementRequest device_management_request; + device_management_request.mutable_policy_request() + ->add_requests() + ->set_policy_type( + dm_protocol::kChromeMachineLevelExtensionCloudPolicyType); + + SetDeviceTokenHeader(kDeviceToken); + SetPayload(device_management_request); + + StartRequestAndWait(); + + EXPECT_EQ(GetResponseCode(), net::HTTP_BAD_REQUEST); +} + +TEST_F(RequestHandlerForPolicyTest, + HandleRequest_ExtensionsInPublicAccounts_SetCorrectPolicyDataUsername) { + ClientStorage::ClientInfo client_info; + client_info.device_token = kDeviceToken; + client_info.device_id = kDeviceId; + client_info.username = kUsername; + client_info.allowed_policy_types.insert( + {dm_protocol::kChromeExtensionPolicyType, + dm_protocol::kChromePublicAccountPolicyType}); + client_storage()->RegisterClient(client_info); + + em::CloudPolicySettings settings; + settings.mutable_extensionsettings()->mutable_value()->assign( + "extension-policy"); + policy_storage()->SetPolicyPayload(dm_protocol::kChromeExtensionPolicyType, + kExtensionId, + settings.SerializeAsString()); + + std::vector<policy::SignatureProvider::SigningKey> universal_signing_keys; + universal_signing_keys.push_back(policy::SignatureProvider::SigningKey( + policy::PolicyBuilder::CreateTestSigningKey(), + {{"*", policy::PolicyBuilder::GetTestSigningKeySignature()}})); + policy_storage()->signature_provider()->set_signing_keys( + std::move(universal_signing_keys)); + + em::DeviceManagementRequest device_management_request; + em::PolicyFetchRequest* extension_request = + device_management_request.mutable_policy_request()->add_requests(); + extension_request->set_policy_type(dm_protocol::kChromeExtensionPolicyType); + extension_request->set_signature_type( + enterprise_management::PolicyFetchRequest::SHA1_RSA); + em::PolicyFetchRequest* public_account_request = + device_management_request.mutable_policy_request()->add_requests(); + public_account_request->set_policy_type( + dm_protocol::kChromePublicAccountPolicyType); + public_account_request->set_settings_entity_id(kPublicAccountEntityId); + public_account_request->set_signature_type( + enterprise_management::PolicyFetchRequest::SHA1_RSA); + + SetDeviceTokenHeader(kDeviceToken); + SetPayload(device_management_request); + + StartRequestAndWait(); + + EXPECT_EQ(GetResponseCode(), net::HTTP_OK); + + ASSERT_TRUE(HasResponseBody()); + em::DeviceManagementResponse device_management_response = + GetDeviceManagementResponse(); + + ASSERT_EQ(device_management_response.policy_response().responses_size(), 2); + const em::PolicyFetchResponse& extension_fetch_response = + device_management_response.policy_response().responses(0); + em::PolicyData extension_policy_data; + extension_policy_data.ParseFromString(extension_fetch_response.policy_data()); + EXPECT_EQ(extension_policy_data.username(), kPublicAccountEntityId); + + const em::PolicyFetchResponse& public_account_fetch_response = + device_management_response.policy_response().responses(0); + em::PolicyData public_account_policy_data; + public_account_policy_data.ParseFromString( + public_account_fetch_response.policy_data()); + EXPECT_EQ(public_account_policy_data.username(), kPublicAccountEntityId); +} +#endif // !BUILDFLAG(IS_ANDROID) + } // namespace policy
diff --git a/components/policy/test_support/signature_provider.cc b/components/policy/test_support/signature_provider.cc index 31cf722..7cd6787 100644 --- a/components/policy/test_support/signature_provider.cc +++ b/components/policy/test_support/signature_provider.cc
@@ -199,10 +199,15 @@ const SignatureProvider::SigningKey* SignatureProvider::GetKeyByVersion( int key_version) const { // |key_version| is 1-based. - return key_version > 0 && - static_cast<size_t>(key_version) <= signing_keys_.size() - ? &signing_keys_[key_version - 1] - : nullptr; + if (key_version < 1) + return nullptr; + size_t key_index = static_cast<size_t>(key_version) - 1; + if (key_index >= signing_keys_.size()) { + if (!rotate_keys()) + return nullptr; + key_index %= signing_keys_.size(); + } + return &signing_keys_[key_index]; } const SignatureProvider::SigningKey* SignatureProvider::GetCurrentKey() const {
diff --git a/components/policy/test_support/signature_provider.h b/components/policy/test_support/signature_provider.h index 4d595db..327cb705 100644 --- a/components/policy/test_support/signature_provider.h +++ b/components/policy/test_support/signature_provider.h
@@ -79,11 +79,20 @@ current_key_version_ = current_key_version; } + bool rotate_keys() const { return rotate_keys_; } + void set_rotate_keys(bool rotate_keys) { rotate_keys_ = rotate_keys; } + private: std::vector<SigningKey> signing_keys_; // The key version to be used if no key version is defined by the client. int current_key_version_ = 1; + + // Whether to rotate signing keys or to fail when last key is reached. The + // policy keys will be rotated in a round-robin fashion for each policy + // request (by default, the |current_key_version_| will be used for all + // requests). + bool rotate_keys_ = false; }; } // namespace policy
diff --git a/components/quirks/quirks_manager.cc b/components/quirks/quirks_manager.cc index 57acd27..027cc7fe 100644 --- a/components/quirks/quirks_manager.cc +++ b/components/quirks/quirks_manager.cc
@@ -206,9 +206,8 @@ void QuirksManager::SetLastServerCheck(int64_t product_id, const base::Time& last_check) { DCHECK(thread_checker_.CalledOnValidThread()); - DictionaryPrefUpdateDeprecated dict(local_state_, - prefs::kQuirksClientLastServerCheck); - dict->SetDouble(IdToHexString(product_id), last_check.ToDoubleT()); + DictionaryPrefUpdate dict(local_state_, prefs::kQuirksClientLastServerCheck); + dict->SetDoubleKey(IdToHexString(product_id), last_check.ToDoubleT()); } } // namespace quirks
diff --git a/components/reporting/proto/synced/metric_data.proto b/components/reporting/proto/synced/metric_data.proto index 3108fdc3..244eb0b 100644 --- a/components/reporting/proto/synced/metric_data.proto +++ b/components/reporting/proto/synced/metric_data.proto
@@ -87,8 +87,9 @@ optional string gateway = 6; // Network connection type. optional NetworkType type = 7; - // Access point address. - optional string access_point_address = 8; + + reserved 8; + // Transmission bit rate measured in Mbps. optional int64 tx_bit_rate_mbps = 9; // Receiving bit rate measured in Mbps.
diff --git a/components/signin/public/base/account_consistency_method.cc b/components/signin/public/base/account_consistency_method.cc index dbd69e5..e22b3bb5 100644 --- a/components/signin/public/base/account_consistency_method.cc +++ b/components/signin/public/base/account_consistency_method.cc
@@ -7,12 +7,7 @@ namespace signin { -// Do not merge the two feature flags. -// Experiments for MICE will be run independently per platform (Android, iOS). #if defined(OS_ANDROID) -// Feature flag for FRE related changes as part of MICE. -const base::Feature kMobileIdentityConsistencyFRE{ - "MobileIdentityConsistencyFRE", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kMobileIdentityConsistencyPromos{ "MobileIdentityConsistencyPromos", base::FEATURE_ENABLED_BY_DEFAULT}; #endif
diff --git a/components/signin/public/base/account_consistency_method.h b/components/signin/public/base/account_consistency_method.h index b5b7935..333b145 100644 --- a/components/signin/public/base/account_consistency_method.h +++ b/components/signin/public/base/account_consistency_method.h
@@ -15,9 +15,6 @@ namespace signin { #if defined(OS_ANDROID) -// Feature flag for FRE related changes as part of MICE. -extern const base::Feature kMobileIdentityConsistencyFRE; - // Feature flag for promo-related changes of `kMobileIdentityConsistency`. extern const base::Feature kMobileIdentityConsistencyPromos; #endif // defined(OS_ANDROID)
diff --git a/components/soda/soda_installer.cc b/components/soda/soda_installer.cc index 76162aa..07bebcf 100644 --- a/components/soda/soda_installer.cc +++ b/components/soda/soda_installer.cc
@@ -261,16 +261,14 @@ void SodaInstaller::RegisterLanguage(const std::string& language, PrefService* global_prefs) { - ListPrefUpdateDeprecated update(global_prefs, - prefs::kSodaRegisteredLanguagePacks); + ListPrefUpdate update(global_prefs, prefs::kSodaRegisteredLanguagePacks); if (!base::Contains(update->GetList(), base::Value(language))) { update->Append(language); } } void SodaInstaller::UnregisterLanguages(PrefService* global_prefs) { - ListPrefUpdateDeprecated update(global_prefs, - prefs::kSodaRegisteredLanguagePacks); + ListPrefUpdate update(global_prefs, prefs::kSodaRegisteredLanguagePacks); update->ClearList(); }
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb index fabffbc..c62a667c 100644 --- a/components/strings/components_strings_af.xtb +++ b/components/strings/components_strings_af.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Geen}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" />-soektog</translation> <translation id="4879491255372875719">Outomaties (verstek)</translation> -<translation id="4879725228911483934">Maak vensters oop en plaas hulle op jou skerms</translation> <translation id="4880827082731008257">Soekgeskiedenis</translation> <translation id="4881695831933465202">Maak oop</translation> <translation id="4885256590493466218">Betaal met <ph name="CARD_DETAIL" /> by betaalpunt</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Jy kan nou privaat blaai en ander mense wat hierdie toestel gebruik sal nie jou aktiwiteit sien nie. Aflaaie en boekmerke sal egter gestoor word.</translation> <translation id="6177128806592000436">Jou verbinding aan hierdie werf is nie veilig nie</translation> <translation id="6180316780098470077">Herprobeer-interval</translation> -<translation id="619448280891863779">Kan vra om vensters op jou skerms oop te maak en te plaas</translation> <translation id="6196640612572343990">Blokkeer derdeparty-webkoekies</translation> <translation id="6203231073485539293">Gaan jou internetverbinding na</translation> <translation id="6218753634732582820">Verwyder adres uit Chromium?</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index 238ee85..7968014 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -1232,7 +1232,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{ምንም}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />፣ <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />፣ <ph name="EXAMPLE_DOMAIN_2" />፣ <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />፣ <ph name="EXAMPLE_DOMAIN_2" />፣ <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">የ<ph name="TEXT" /> ፍለጋ</translation> <translation id="4879491255372875719">ራስ-ሰር (ነባሪ)</translation> -<translation id="4879725228911483934">በእርስዎ ማያ ገጾች ላይ መስኮቶችን ይክፈቱ እና ይመድቡ</translation> <translation id="4880827082731008257">የፍለጋ ታሪክ</translation> <translation id="4881695831933465202">ክፍት የሚሆንባቸው</translation> <translation id="4885256590493466218">ከፍሎ መውጫው ላይ በ<ph name="CARD_DETAIL" /> ይክፈሉ</translation> @@ -1621,7 +1620,6 @@ <translation id="6169916984152623906">አሁን በግል ማሰስ ይችላሉ፣ እና ይህን መሣሪያ የሚጠቀሙ ሰዎች የእርስዎን እንቅስቃሴ አይመለከቱም። ይሁንና፣ ውርዶች እና ዕልባቶች ይቀመጣሉ።</translation> <translation id="6177128806592000436">ወደዚህ ጣቢያ ያልዎት ግንኙነት ደህንነቱ አስተማማኝ አይደለም</translation> <translation id="6180316780098470077">የዳግም መሞከር ክፍተት</translation> -<translation id="619448280891863779">በማያ ገጾችዎ ላይ መስኮቶችን ለመክፈት እና ለማስቀመጥ መጠየቅ ይችላል</translation> <translation id="6196640612572343990">የሦስተኛ ወገን ኩኪዎችን አግድ</translation> <translation id="6203231073485539293">የበይነመረብ ግኑኝነትዎን ያረጋግጡ</translation> <translation id="6218753634732582820">ከChromium ላይ አድራሻ ይወገድ?</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 1739f421..3e1dfdca 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">عذرًا!</translation> <translation id="3041612393474885105">معلومات الشهادة</translation> <translation id="3044034790304486808">استئناف عملية البحث</translation> +<translation id="305162504811187366">سجلّ الوصول إلى الكمبيوتر المكتبي عن بُعد من Chrome، بما في ذلك الطوابع الزمنية والمضيفين وأرقام تعريف جلسات العملاء</translation> <translation id="3060227939791841287">C9 (مغلف)</translation> <translation id="3061707000357573562">خدمة رمز التصحيح</translation> <translation id="306573536155379004">بدأت اللعبة.</translation> @@ -1239,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{ما من أسماء نطاقات.}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" /> و<ph name="EXAMPLE_DOMAIN_2" />}few{<ph name="EXAMPLE_DOMAIN_1" /> و<ph name="EXAMPLE_DOMAIN_2" /> و<ph name="AND_MORE" /> نطاقات أخرى}many{<ph name="EXAMPLE_DOMAIN_1" /> و<ph name="EXAMPLE_DOMAIN_2" /> و<ph name="AND_MORE" /> نطاقًا آخر}other{<ph name="EXAMPLE_DOMAIN_1" /> و<ph name="EXAMPLE_DOMAIN_2" /> و<ph name="AND_MORE" /> نطاق آخر}}</translation> <translation id="4877422487531841831">البحث عن <ph name="TEXT" /></translation> <translation id="4879491255372875719">الإعداد التلقائي (تلقائي)</translation> -<translation id="4879725228911483934">يمكنك فتح النوافذ ووضعها على شاشتك.</translation> <translation id="4880827082731008257">سجلّ البحث</translation> <translation id="4881695831933465202">فتح</translation> <translation id="4885256590493466218">الدفع باستخدام <ph name="CARD_DETAIL" />.</translation> @@ -1628,7 +1628,6 @@ <translation id="6169916984152623906">يمكنك الآن التصفّح بخصوصية تامّة، ولن يتمكّن الأشخاص الآخرون الذين يستخدمون هذا الجهاز من مشاهدة نشاطك. ولكن، سيتم حفظ عمليات التنزيل والإشارات المرجعيّة.</translation> <translation id="6177128806592000436">إن اتصالك بهذا الموقع غير آمن</translation> <translation id="6180316780098470077">الفاصل الزمني لإعادة المحاولة</translation> -<translation id="619448280891863779">السماح للموقع الإلكتروني بطلب فتح النوافذ ووضعها على شاشاتك</translation> <translation id="6196640612572343990">حظر ملفات تعريف الارتباط للجهات الخارجية</translation> <translation id="6203231073485539293">التحقق من اتصالك بالإنترنت</translation> <translation id="6218753634732582820">هل تريد إزالة العنوان من Chromium؟</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index 2933894..e8599ca 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -1235,7 +1235,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{এটাও নাই}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" />ৰ সন্ধান</translation> <translation id="4879491255372875719">স্বয়ংক্ৰিয় (ডিফ'ল্ট)</translation> -<translation id="4879725228911483934">ৱিণ্ড’সমূহ খোলক আৰু আপোনাৰ স্ক্ৰীনসমূহত ৰাখক</translation> <translation id="4880827082731008257">সন্ধানৰ ইতিহাস</translation> <translation id="4881695831933465202">খোলক</translation> <translation id="4885256590493466218">চেকআউট কৰাৰ সময়ত <ph name="CARD_DETAIL" />ৰ জৰিয়তে পৰিশোধ কৰক</translation> @@ -1623,7 +1622,6 @@ <translation id="6169916984152623906">বর্তমান আপুনি ব্যক্তিগতভাৱে ব্ৰাজিং কৰিব পাৰিব আৰু এই ডিভাইচটো ব্যৱহাৰ কৰা অন্য লোকসকলে আপোনাৰ কার্যকলাপ দেখা নাপাব। তথাপিও, ডাউনল’ড আৰু বুকমার্কসমূহ ছেভ কৰা হ’ব।</translation> <translation id="6177128806592000436">এই ছাইটলৈ থকা আপোনাৰ সংযোগটো সুৰক্ষিত নহয়</translation> <translation id="6180316780098470077">পুনঃচেষ্টাৰ অন্তৰাল</translation> -<translation id="619448280891863779">আপোনাৰ স্ক্ৰীনসমূহত ৱিণ্ড’ খুলিবলৈ আৰু থ’বলৈ বিচাৰিব পাৰে</translation> <translation id="6196640612572343990">তৃতীয়-পক্ষৰ কুকিসমূহ অৱৰোধ কৰক</translation> <translation id="6203231073485539293">আপোনাৰ ইণ্টাৰনেট সংযোগ পৰীক্ষা কৰক</translation> <translation id="6218753634732582820">Chromiumৰ পৰা ঠিকনা আঁতৰাবনে?</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index ba1cd5b7..85892ef 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb
@@ -1235,7 +1235,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Heç biri}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> axtarışı</translation> <translation id="4879491255372875719">Avtomatik (defolt)</translation> -<translation id="4879725228911483934">Ekranlarınızda pəncərələri açın və yerləşdirin</translation> <translation id="4880827082731008257">Axtarış tarixçəsi</translation> <translation id="4881695831933465202">Açın</translation> <translation id="4885256590493466218">Ödəniş zamanı <ph name="CARD_DETAIL" /> ilə ödəyin</translation> @@ -1624,7 +1623,6 @@ <translation id="6169916984152623906">İndi şəxsi axtarış edə bilərsiniz və bu cihazı istifadə edən digər şəxslər fəaliyyətinizi görməyəcək. Lakin endirmələr və əlfəcinlər yadda saxlanacaq.</translation> <translation id="6177128806592000436">Bu sayta olan bağlantınız güvənli deyil</translation> <translation id="6180316780098470077">Təkrar cəhd intervalı</translation> -<translation id="619448280891863779">Saytlar ekranlarınızda pəncərələr açmaq və yerləşdirmək üçün icazə istəyə bilər</translation> <translation id="6196640612572343990">Üçüncü tərəf kukiləri blok edin</translation> <translation id="6203231073485539293">İnternet bağlantısını yoxlayın</translation> <translation id="6218753634732582820">Ünvan Chromium'dan silinsin?</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index 771ba585..44a490e 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -1238,7 +1238,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Няма}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}many{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Пошук па запыце "<ph name="TEXT" />"</translation> <translation id="4879491255372875719">Аўтаматычна (стандартна)</translation> -<translation id="4879725228911483934">Адкрываць і размяшчаць вокны на экранах.</translation> <translation id="4880827082731008257">Гісторыя пошуку</translation> <translation id="4881695831933465202">Адкрыць</translation> <translation id="4885256590493466218">Аплаціць карткай <ph name="CARD_DETAIL" /> пры афармленні заказу</translation> @@ -1627,7 +1626,6 @@ <translation id="6169916984152623906">Цяпер вы можаце праглядаць вэб-старонкі ў прыватным рэжыме, іншыя карыстальнікі гэтай прылады не будуць бачыць вашы дзеянні. Аднак спампоўкі і закладкі будуць захоўвацца.</translation> <translation id="6177128806592000436">Ваша падключэнне да гэтага сайта небяспечнае</translation> <translation id="6180316780098470077">Інтэрвал паміж спробамі</translation> -<translation id="619448280891863779">Сайт можа запытваць дазвол адкрываць і размяшчаць вокны на экранах</translation> <translation id="6196640612572343990">Блакіраваць староннія файлы cookie</translation> <translation id="6203231073485539293">Праверце падключэнне да інтэрнэту</translation> <translation id="6218753634732582820">Выдаліць адрас з Chromium?</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index bfa2058..4e36c04 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -1238,7 +1238,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Няма}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Търсене на „<ph name="TEXT" />“</translation> <translation id="4879491255372875719">Автоматично (стандартно)</translation> -<translation id="4879725228911483934">да отваря прозорци и да ги разполага на екраните ви</translation> <translation id="4880827082731008257">Търсене в историята</translation> <translation id="4881695831933465202">Отваряне</translation> <translation id="4885256590493466218">Плащане с <ph name="CARD_DETAIL" /></translation> @@ -1627,7 +1626,6 @@ <translation id="6169916984152623906">Вече можете да сърфирате частно. Така другите хора, които използват това устройство, няма да виждат активността ви. Изтеглянията и отметките обаче ще се запазват.</translation> <translation id="6177128806592000436">Връзката ви с този сайт не е защитена</translation> <translation id="6180316780098470077">Интервал за повторен опит</translation> -<translation id="619448280891863779">Може да поиска разрешение да отваря и разполага прозорци на екраните ви</translation> <translation id="6196640612572343990">Блокиране на „бисквитките“ на трети страни</translation> <translation id="6203231073485539293">Проверете връзката си с интернет</translation> <translation id="6218753634732582820">Адресът да се премахне ли от Chromium?</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 5b44e91..81836cc8 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -527,6 +527,7 @@ <translation id="2609632851001447353">বৈচিত্রতা</translation> <translation id="2610561535971892504">কপি করতে ক্লিক করুন</translation> <translation id="2618023639789766142">C10 (Envelope)</translation> +<translation id="2623663032199728144">আপনার স্ক্রিন সম্পর্কে তথ্য ব্যবহার করতে চাইতে পারেন</translation> <translation id="2625385379895617796">আপনার ঘড়ির সময় অনেকটা এগিয়ে</translation> <translation id="262745152991669301">USB ডিভাইসের সাথে কানেক্ট করতে, অনুমতি চাইতে পারে</translation> <translation id="2629325967560697240">Chrome-এ সবচেয়ে বেশি সুরক্ষা পেতে, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />উন্নত সুরক্ষা চালু করুন<ph name="END_ENHANCED_PROTECTION_LINK" />।</translation> @@ -1241,7 +1242,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{একটিও নয়}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> সার্চ</translation> <translation id="4879491255372875719">অটোমেটিক (ডিফল্ট)</translation> -<translation id="4879725228911483934">উইন্ডো খুলে আপনার স্ক্রিনে রাখুন</translation> <translation id="4880827082731008257">সার্চের ইতিহাস</translation> <translation id="4881695831933465202">খুলুন</translation> <translation id="4885256590493466218">চেক-আউট করার সময় <ph name="CARD_DETAIL" /> দিয়ে পেমেন্ট করুন</translation> @@ -1629,7 +1629,6 @@ <translation id="6169916984152623906">এখন আপনি গোপনভাবে ব্রাউজ করতে পারেন এবং অন্য যেসব বক্তি এই ডিভাইস ব্যবহার করেন তারা আপনার অ্যাক্টিভিটি দেখতে পাবেন না। তবে, আপনার ডাউনলোড এবং বুকমার্কগুলি সেভ করা হবে।</translation> <translation id="6177128806592000436">এই সাইটে আপনার সংযোগ নিরাপদ নয়</translation> <translation id="6180316780098470077">কতক্ষণ পর আবার চেষ্টা করা যাবে</translation> -<translation id="619448280891863779">স্ক্রিনে উইন্ডো খুলতে এবং রাখতে চাইলে অনুমতি চাইতে পারে</translation> <translation id="6196640612572343990">তৃতীয় পক্ষের কুকিজ অবরুদ্ধ করুন</translation> <translation id="6203231073485539293">আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন</translation> <translation id="6218753634732582820">Chromium থেকে ঠিকানা সরাবেন?</translation> @@ -2362,6 +2361,7 @@ <translation id="865032292777205197">মোশন সেন্সর</translation> <translation id="8663226718884576429">অর্ডারের সারসংক্ষেপ, <ph name="TOTAL_LABEL" />, আরও বিবরণ</translation> <translation id="8666678546361132282">ইংরাজি</translation> +<translation id="8669306706049782872">উইন্ডো খুলে রাখার জন্য আপনার স্ক্রিনের বিষয়ে তথ্য ব্যবহার করুন</translation> <translation id="867224526087042813">স্বাক্ষর</translation> <translation id="8676424191133491403">কোনও দেরি হয়নি</translation> <translation id="8680536109547170164"><ph name="QUERY" />, উত্তর, <ph name="ANSWER" /></translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb index 7a4fe8e..c85f4cba 100644 --- a/components/strings/components_strings_bs.xtb +++ b/components/strings/components_strings_bs.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ništa}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Pretraživanje <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatski (zadano)</translation> -<translation id="4879725228911483934">Otvarati i postavljati prozore na ekranima</translation> <translation id="4880827082731008257">Pretraži povijest</translation> <translation id="4881695831933465202">Otvori</translation> <translation id="4885256590493466218">Platite karticom <ph name="CARD_DETAIL" /></translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Sada može pregledati privatno, a drugi korisnici ovog uređaja neće vidjeti vašu aktivnost. Međutim, preuzimanja i oznake će se sačuvati.</translation> <translation id="6177128806592000436">Vaša veza s ovom web lokacijom nije sigurna</translation> <translation id="6180316780098470077">Interval ponovnih pokušaja</translation> -<translation id="619448280891863779">Može tražiti da otvori i postavi prozore na vašim ekranima</translation> <translation id="6196640612572343990">Blokiraj kolačiće trećih strana</translation> <translation id="6203231073485539293">Provjerite internetsku vezu</translation> <translation id="6218753634732582820">Ukloniti adresu iz Chromiuma?</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index af94a21..492b3ac 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">Vaja!</translation> <translation id="3041612393474885105">Informació del certificat</translation> <translation id="3044034790304486808">Reprèn la cerca</translation> +<translation id="305162504811187366">Historial de l'Escriptori remot de Chrome, inclosos els amfitrions, les marques de temps i els identificadors de sessió de client</translation> <translation id="3060227939791841287">C9 (sobre)</translation> <translation id="3061707000357573562">Servei de pedaç</translation> <translation id="306573536155379004">S'ha iniciat el joc.</translation> @@ -1230,7 +1231,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Cap}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" /> i <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Cerca: <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automàtic (opció predeterminada)</translation> -<translation id="4879725228911483934">Obrir i col·locar finestres a les teves pantalles</translation> <translation id="4880827082731008257">Cerca a l'historial</translation> <translation id="4881695831933465202">Obre</translation> <translation id="4885256590493466218">Paga amb <ph name="CARD_DETAIL" /> en tramitar la compra.</translation> @@ -1619,7 +1619,6 @@ <translation id="6169916984152623906">Ara pots navegar de manera privada i les altres persones que utilitzin aquest dispositiu no veuran la teva activitat. Tanmateix, les baixades i les adreces d'interès sí que es desaran.</translation> <translation id="6177128806592000436">La connexió amb aquest lloc web no és segura</translation> <translation id="6180316780098470077">Interval d'intents</translation> -<translation id="619448280891863779">Pot demanar permís per obrir i col·locar finestres a les pantalles</translation> <translation id="6196640612572343990">Bloqueja les galetes de tercers</translation> <translation id="6203231073485539293">Comprovació de la connexió a Internet</translation> <translation id="6218753634732582820">Voleu suprimir l'adreça de Chromium?</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index eae9586..eab7fe18 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -1227,7 +1227,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Žádné}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}many{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Vyhledávání dotazu <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatické (výchozí)</translation> -<translation id="4879725228911483934">Otevírat a umisťovat okna na obrazovkách</translation> <translation id="4880827082731008257">Hledat v historii</translation> <translation id="4881695831933465202">Otevřít</translation> <translation id="4885256590493466218">U pokladny zaplaťte kartou <ph name="CARD_DETAIL" /></translation> @@ -1615,7 +1614,6 @@ <translation id="6169916984152623906">Nyní můžete procházet internet v soukromí a ostatní uživatelé tohoto zařízení vaši aktivitu neuvidí. Stažené soubory a záložky budou uloženy.</translation> <translation id="6177128806592000436">Spojení s tímto webem není bezpečné</translation> <translation id="6180316780098470077">Interval opakování</translation> -<translation id="619448280891863779">Může žádat o otevírání a umísťování oken na obrazovkách</translation> <translation id="6196640612572343990">Blokovat soubory cookie třetích stran</translation> <translation id="6203231073485539293">Zkontrolujte připojení k internetu</translation> <translation id="6218753634732582820">Odstranit adresu z prohlížeče Chromium?</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 22589a0c..ecf70cfc 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -1239,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ingen}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" />-søgning</translation> <translation id="4879491255372875719">Automatisk (standard)</translation> -<translation id="4879725228911483934">Åbne og placere vinduer på dine skærme</translation> <translation id="4880827082731008257">Søg i historikken</translation> <translation id="4881695831933465202">Åbn</translation> <translation id="4885256590493466218">Betal med <ph name="CARD_DETAIL" /> ved kassen</translation> @@ -1383,7 +1382,7 @@ <translation id="5300589172476337783">Vis</translation> <translation id="5306593769196050043">Begge ark</translation> <translation id="5307166000025436103">OK</translation> -<translation id="5308380583665731573">Få forbindelse</translation> +<translation id="5308380583665731573">Opret forbindelse</translation> <translation id="5308689395849655368">Rapportering af nedbrud er deaktiveret.</translation> <translation id="5314967030527622926">Brochureværktøj</translation> <translation id="5316812925700871227">Rotér mod uret</translation> @@ -1628,7 +1627,6 @@ <translation id="6169916984152623906">Nu kan du gå på nettet privat, og andre brugere på denne enhed kan ikke se din aktivitet. Downloads og bogmærker gemmes dog stadig.</translation> <translation id="6177128806592000436">Din forbindelse til dette website er ikke sikker.</translation> <translation id="6180316780098470077">Interval for gentagelse af forsøg</translation> -<translation id="619448280891863779">Websitet kan anmode om tilladelse til at åbne og placere vinduer på dine skærme</translation> <translation id="6196640612572343990">Bloker cookies fra tredjeparter</translation> <translation id="6203231073485539293">Kontrollér din internetforbindelse</translation> <translation id="6218753634732582820">Vil du fjerne adressen fra Chromium?</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 6cfa987..333cd154e 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">Oh nein!</translation> <translation id="3041612393474885105">Zertifikatinformationen</translation> <translation id="3044034790304486808">Weiter stöbern</translation> +<translation id="305162504811187366">Chrome Remote Desktop-Verlauf, einschließlich Zeitstempeln, Hosts und Client-Sitzungs-IDs</translation> <translation id="3060227939791841287">C9 (Umschlag)</translation> <translation id="3061707000357573562">Patchdienst</translation> <translation id="306573536155379004">Spiel gestartet.</translation> @@ -1228,7 +1229,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Keine}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">"<ph name="TEXT" />" suchen</translation> <translation id="4879491255372875719">Automatisch (Standard)</translation> -<translation id="4879725228911483934">Fenster auf Ihren Bildschirmen öffnen und positionieren</translation> <translation id="4880827082731008257">Im Verlauf suchen</translation> <translation id="4881695831933465202">Öffnen</translation> <translation id="4885256590493466218">An der Kasse mit <ph name="CARD_DETAIL" /> zahlen</translation> @@ -1617,7 +1617,6 @@ <translation id="6169916984152623906">Sie können jetzt privat surfen. Für andere Personen, die dieses Gerät nutzen, sind Ihre Aktivitäten nicht sichtbar. Ihre Downloads und Lesezeichen werden jedoch gespeichert.</translation> <translation id="6177128806592000436">Die Verbindung zu dieser Website ist nicht sicher</translation> <translation id="6180316780098470077">Wiederholungsintervall</translation> -<translation id="619448280891863779">Darf nachfragen, wenn sie Fenster auf ihren Bildschirmen öffnen und platzieren möchte</translation> <translation id="6196640612572343990">Drittanbieter-Cookies blockieren</translation> <translation id="6203231073485539293">Bitte überprüfen Sie Ihre Internetverbindung.</translation> <translation id="6218753634732582820">Adresse aus Chromium entfernen?</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index be4540b3..a47d6900 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -1242,7 +1242,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Κανένας}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Αναζήτηση <ph name="TEXT" /></translation> <translation id="4879491255372875719">Αυτόματο (προεπιλογή)</translation> -<translation id="4879725228911483934">Άνοιγμα και τοποθέτηση παραθύρων στις οθόνες σας</translation> <translation id="4880827082731008257">Αναζήτηση ιστορικού</translation> <translation id="4881695831933465202">Άνοιγμα</translation> <translation id="4885256590493466218">Πληρωμή με την κάρτα <ph name="CARD_DETAIL" /> κατά την ολοκλήρωση της αγοράς</translation> @@ -1632,7 +1631,6 @@ <translation id="6169916984152623906">Στο εξής μπορείτε να περιηγηθείτε ιδιωτικά και η δραστηριότητά σας δεν θα είναι ορατή στα άλλα άτομα που χρησιμοποιούν αυτήν τη συσκευή. Ωστόσο, οι λήψεις και οι σελιδοδείκτες θα αποθηκεύονται</translation> <translation id="6177128806592000436">Η σύνδεσή σας σε αυτόν τον ιστότοπο δεν είναι ασφαλής</translation> <translation id="6180316780098470077">Διάστημα επανάληψης</translation> -<translation id="619448280891863779">Μπορεί να ζητά να ανοίγει και να τοποθετεί παράθυρα στις οθόνες σας.</translation> <translation id="6196640612572343990">Αποκλεισμός cookie τρίτων</translation> <translation id="6203231073485539293">Ελέγξτε τη σύνδεσή σας στο Internet</translation> <translation id="6218753634732582820">Να καταργηθεί η διεύθυνση από το Chromium;</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index 9c64d301..6cbe861 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -1239,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{None}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> search</translation> <translation id="4879491255372875719">Automatic (default)</translation> -<translation id="4879725228911483934">Open and place windows on your screens</translation> <translation id="4880827082731008257">Search history</translation> <translation id="4881695831933465202">Open</translation> <translation id="4885256590493466218">Pay with <ph name="CARD_DETAIL" /> at checkout</translation> @@ -1628,7 +1627,6 @@ <translation id="6169916984152623906">Now you can browse privately, and other people who use this device won’t see your activity. However, downloads and bookmarks will be saved.</translation> <translation id="6177128806592000436">Your connection to this site is not secure</translation> <translation id="6180316780098470077">Retry interval</translation> -<translation id="619448280891863779">Can ask to open and place windows on your screens</translation> <translation id="6196640612572343990">Block third-party cookies</translation> <translation id="6203231073485539293">Check your Internet connection</translation> <translation id="6218753634732582820">Remove address from Chromium?</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 8c3120c..5fd95fa 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -1231,7 +1231,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ninguna}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Búsqueda de <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automático (predeterminado)</translation> -<translation id="4879725228911483934">Abrir y ubicar ventanas en tus pantallas</translation> <translation id="4880827082731008257">Buscar historial</translation> <translation id="4881695831933465202">Abrir</translation> <translation id="4885256590493466218">Pagar con <ph name="CARD_DETAIL" /> en la confirmación de la compra</translation> @@ -1620,7 +1619,6 @@ <translation id="6169916984152623906">Ahora puedes navegar con privacidad. Si otras personas usan este dispositivo, no verán tu actividad. Sin embargo, se guardarán las descargas y los favoritos.</translation> <translation id="6177128806592000436">Tu conexión con este sitio no es segura</translation> <translation id="6180316780098470077">Intervalo entre reintentos</translation> -<translation id="619448280891863779">Puede solicitar permiso para abrir ventanas y colocarlas en tus pantallas</translation> <translation id="6196640612572343990">Bloquear cookies de terceros</translation> <translation id="6203231073485539293">Comprueba tu conexión a Internet.</translation> <translation id="6218753634732582820">¿Confirmas que quieres quitar la dirección de Chromium?</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 1c1d6fc..8a17c48 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">¡Vaya!</translation> <translation id="3041612393474885105">Datos del certificado</translation> <translation id="3044034790304486808">Reanudar búsqueda</translation> +<translation id="305162504811187366">Historial de Escritorio Remoto de Chrome, incluidas las marcas de tiempo, los hosts y los IDs de sesión del cliente</translation> <translation id="3060227939791841287">C9 (sobre)</translation> <translation id="3061707000357573562">Aplicar parche a servicio</translation> <translation id="306573536155379004">Juego iniciado.</translation> @@ -1239,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{No hay}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" /> y <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Búsqueda de <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automático (predeterminado)</translation> -<translation id="4879725228911483934">Abrir y colocar ventanas en tus pantallas</translation> <translation id="4880827082731008257">Buscar en el historial</translation> <translation id="4881695831933465202">Abrir</translation> <translation id="4885256590493466218">Paga con <ph name="CARD_DETAIL" /> al tramitar la compra.</translation> @@ -1628,7 +1628,6 @@ <translation id="6169916984152623906">Ahora puedes navegar de forma privada; las otras personas que usen este dispositivo no verán tu actividad. No obstante, se guardarán las descargas y los marcadores.</translation> <translation id="6177128806592000436">La conexión con este sitio web no es segura</translation> <translation id="6180316780098470077">Intervalo de reintentos</translation> -<translation id="619448280891863779">Puede pedir permiso para abrir y colocar ventanas en tus pantallas</translation> <translation id="6196640612572343990">Bloquear cookies de terceros</translation> <translation id="6203231073485539293">Comprueba tu conexión a Internet</translation> <translation id="6218753634732582820">¿Quitar dirección de Chromium?</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 2f52307..b4d6a3d 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -644,6 +644,7 @@ <translation id="3037605927509011580">Ups, ebaõnn!</translation> <translation id="3041612393474885105">Sertifikaadi andmed</translation> <translation id="3044034790304486808">Jätkake uurimist</translation> +<translation id="305162504811187366">Chrome Remote Desktopi ajalugu, sh ajatemplid, hostid ja kliendiseansside ID-d</translation> <translation id="3060227939791841287">C9 (ümbrik)</translation> <translation id="3061707000357573562">Teenuse paikamine</translation> <translation id="306573536155379004">Mäng algas.</translation> @@ -1238,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Puudub}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Otsing <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automaatne (vaikimisi)</translation> -<translation id="4879725228911483934">Avada ja paigutada aknaid teie ekraanikuvadel</translation> <translation id="4880827082731008257">Otsi ajaloost</translation> <translation id="4881695831933465202">Ava</translation> <translation id="4885256590493466218">Makske kassas kaardiga <ph name="CARD_DETAIL" /></translation> @@ -1627,7 +1627,6 @@ <translation id="6169916984152623906">Nüüd saate sirvida privaatselt ja teised seadme kasutajad ei näe teie tegevusi. Allalaaditud failid ja järjehoidjad siiski salvestatakse.</translation> <translation id="6177128806592000436">Teie ühendus selle saidiga pole turvaline</translation> <translation id="6180316780098470077">Uuesti proovimise intervall</translation> -<translation id="619448280891863779">Saab küsida luba aknaid teie ekraanikuvadel avada ja paigutada</translation> <translation id="6196640612572343990">Blokeeri kolmanda osapoole küpsisefailid</translation> <translation id="6203231073485539293">Kontrollige Interneti-ühendust</translation> <translation id="6218753634732582820">Kas eemaldada Chromiumist aadress?</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index 57d729bb..7caf6f7 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -1227,7 +1227,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Bat ere ez}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Bilatu <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatikoa (lehenetsia)</translation> -<translation id="4879725228911483934">Ireki eta kokatu leihoak pantailetan</translation> <translation id="4880827082731008257">Bilatu historian</translation> <translation id="4881695831933465202">Ireki</translation> <translation id="4885256590493466218">Ordaintzerakoan, erabili <ph name="CARD_DETAIL" /> txartela</translation> @@ -1615,7 +1614,6 @@ <translation id="6169916984152623906">Modu pribatuan arakatu ahal izango duzu sarea, gailua erabiltzen duten gainerakoek zure jardueren berririk izan ez dezaten. Hala ere, deskargak eta laster-markak gordeta geratuko dira.</translation> <translation id="6177128806592000436">Webgune honetarako konexioa ez da guztiz segurua</translation> <translation id="6180316780098470077">Saiakeren arteko tartea</translation> -<translation id="619448280891863779">Pantailetan leihoak ireki eta kokatzea eska dezake</translation> <translation id="6196640612572343990">Blokeatu hirugarrenen cookieak</translation> <translation id="6203231073485539293">Egiaztatu Internetera konektatuta zaudela</translation> <translation id="6218753634732582820">Helbidea Chromium-etik kendu nahi duzu?</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 9599ecb6..f27efc8 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">اوه، نه!</translation> <translation id="3041612393474885105">اطلاعات گواهی</translation> <translation id="3044034790304486808">ازسر گرفتن کاوش</translation> +<translation id="305162504811187366">سابقه «رایانه ازدور Chrome»، ازجمله مُهرهای زمان، میزبانها، و شناسههای جلسه کارخواه</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">سرویس وصله</translation> <translation id="306573536155379004">بازی شروع شد.</translation> @@ -1239,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{هیچکدام}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />، <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />، <ph name="EXAMPLE_DOMAIN_2" />، <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />، <ph name="EXAMPLE_DOMAIN_2" />، <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">جستجوی <ph name="TEXT" /></translation> <translation id="4879491255372875719">خودکار (پیشفرض)</translation> -<translation id="4879725228911483934">پنجرهها در صفحههای نمایش باز و جایگذاری شوند</translation> <translation id="4880827082731008257">سابقه جستجو</translation> <translation id="4881695831933465202">باز کردن</translation> <translation id="4885256590493466218">هنگام تصفیه حساب، با <ph name="CARD_DETAIL" /> پرداخت کنید</translation> @@ -1628,7 +1628,6 @@ <translation id="6169916984152623906">اکنون میتوانید بهطور خصوصی مرور کنید و سایر افرادی که از این دستگاه استفاده میکنند فعالیت شما را نخواهند دید. بااینوجود بارگیریها و نشانکها ذخیره خواهند شد.</translation> <translation id="6177128806592000436">اتصال شما به این سایت امن نیست</translation> <translation id="6180316780098470077">فاصله زمانی امتحان مجدد</translation> -<translation id="619448280891863779">میتواند برای باز کردن و قرار دادن پنجره در صفحهها درخواست دهد</translation> <translation id="6196640612572343990">مسدود کردن کوکیهای شخص ثالث</translation> <translation id="6203231073485539293">اتصال اینترنتتان را بررسی کنید</translation> <translation id="6218753634732582820">آدرس از Chromium پاک شود؟</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 72c9527..c6e48562 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">Harmin paikka!</translation> <translation id="3041612393474885105">Varmenteen tiedot</translation> <translation id="3044034790304486808">Jatka tiedonhakua</translation> +<translation id="305162504811187366">Chrome-etäkäytön historia, mukaan lukien aikaleimat, isännät ja käyttökertojen tunnukset</translation> <translation id="3060227939791841287">C9 (kirjekuori)</translation> <translation id="3061707000357573562">Virheenkorjauspalvelu</translation> <translation id="306573536155379004">Peli aloitettu</translation> @@ -1240,7 +1241,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ei mitään}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Haku <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automaattinen (oletus)</translation> -<translation id="4879725228911483934">Avaa ikkunat ja sijoittele ne näytöille</translation> <translation id="4880827082731008257">Haku historiasta</translation> <translation id="4881695831933465202">Avaa</translation> <translation id="4885256590493466218">Käytä <ph name="CARD_DETAIL" /> ‑maksutapaa kassalla.</translation> @@ -1629,7 +1629,6 @@ <translation id="6169916984152623906">Nyt voit selata verkkoa yksityisesti. Laitteen muut käyttäjät eivät näe selaushistoriaasi. Lataukset ja kirjanmerkit kuitenkin tallennetaan.</translation> <translation id="6177128806592000436">Sivustoon ei ole muodostettu turvallista yhteyttä.</translation> <translation id="6180316780098470077">Uudelleenyritysten aikaväli</translation> -<translation id="619448280891863779">Saa pyytää lupaa avata ikkunoita ja sijoittaa niitä näytöillesi</translation> <translation id="6196640612572343990">Estä kolmannen osapuolen evästeet</translation> <translation id="6203231073485539293">Tarkista internetyhteytesi</translation> <translation id="6218753634732582820">Poistetaanko osoite Chromiumista?</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index 49d981e5..9afb022 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">Ay, Naku!</translation> <translation id="3041612393474885105">Impormasyon sa Certificate</translation> <translation id="3044034790304486808">Ipagpatuloy ang iyong pananaliksik</translation> +<translation id="305162504811187366">History ng Remote na Desktop ng Chrome, kabilang ang mga timestamp, host, at client session id</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">Serbisyo sa Pag-patch</translation> <translation id="306573536155379004">Nagsimula na ang laro.</translation> @@ -1239,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Wala}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">paghahanap para sa <ph name="TEXT" /></translation> <translation id="4879491255372875719">Awtomatiko (default)</translation> -<translation id="4879725228911483934">Magbukas at maglagay ng mga window sa iyong mga screen</translation> <translation id="4880827082731008257">History ng paghahanap</translation> <translation id="4881695831933465202">Buksan</translation> <translation id="4885256590493466218">Magbayad gamit ang <ph name="CARD_DETAIL" /> sa pag-checkout</translation> @@ -1628,7 +1628,6 @@ <translation id="6169916984152623906">Makakapag-browse ka na ngayon nang pribado, at hindi makikita ng ibang taong gumagamit sa device na ito ang iyong aktibidad. Gayunpaman, mase-save ang mga download at bookmark.</translation> <translation id="6177128806592000436">Hindi ligtas ang iyong koneksyon sa site na ito</translation> <translation id="6180316780098470077">Interval ng pag-retry</translation> -<translation id="619448280891863779">Puwedeng hilinging magbukas at maglagay ng mga window sa iyong mga screen</translation> <translation id="6196640612572343990">I-block ang mga third-party na cookie</translation> <translation id="6203231073485539293">Suriin ang iyong koneksyon sa Internet</translation> <translation id="6218753634732582820">Gusto mo bang alisin ang address sa Chromium?</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index a6ded3e..444aef2 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -1230,7 +1230,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Aucun}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Rechercher <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatique (par défaut)</translation> -<translation id="4879725228911483934">Ouvrir et placer des fenêtres sur vos écrans</translation> <translation id="4880827082731008257">Rechercher dans l'historique</translation> <translation id="4881695831933465202">Ouvrir</translation> <translation id="4885256590493466218">Payez avec <ph name="CARD_DETAIL" /> au moment d'effectuer le paiement</translation> @@ -1619,7 +1618,6 @@ <translation id="6169916984152623906">Vous pouvez maintenant naviguer de façon privée, et les autres personnes qui utilisent cet appareil ne verront pas votre activité. Cependant, les téléchargements et les favoris seront sauvegardés.</translation> <translation id="6177128806592000436">Votre connexion à ce site n'est pas sécurisée</translation> <translation id="6180316780098470077">Intervalle entre les nouveaux essais</translation> -<translation id="619448280891863779">Les sites peuvent demander à ouvrir et à placer des fenêtres sur vos écrans</translation> <translation id="6196640612572343990">Bloquer les témoins de tiers</translation> <translation id="6203231073485539293">Vérifiez votre connexion Internet</translation> <translation id="6218753634732582820">Supprimer l'adresse de Chromium?</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 4010c13..f1202fd 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Aucun}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Recherche sur "<ph name="TEXT" />"</translation> <translation id="4879491255372875719">Automatique (par défaut)</translation> -<translation id="4879725228911483934">Ouvrir et positionner des fenêtres sur vos écrans</translation> <translation id="4880827082731008257">Rechercher dans l'historique</translation> <translation id="4881695831933465202">Ouvrir</translation> <translation id="4885256590493466218">Vous paierez avec "<ph name="CARD_DETAIL" />".</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Vous pouvez désormais naviguer de façon privée. Les autres utilisateurs de cet appareil ne verront pas votre activité. Les téléchargements et les favoris seront cependant enregistrés.</translation> <translation id="6177128806592000436">Votre connexion à ce site n'est pas sécurisée</translation> <translation id="6180316780098470077">Intervalle entre les tentatives</translation> -<translation id="619448280891863779">Peut demander à ouvrir et placer des fenêtres sur vos écrans</translation> <translation id="6196640612572343990">Bloquer les cookies tiers</translation> <translation id="6203231073485539293">Vérifiez votre connexion Internet</translation> <translation id="6218753634732582820">Supprimer l'adresse de Chromium ?</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index 8b5eb15f..6d1ee84 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb
@@ -1238,7 +1238,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ningún}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" /> e <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Busca de "<ph name="TEXT" />"</translation> <translation id="4879491255372875719">Automático (opción predeterminada)</translation> -<translation id="4879725228911483934">Abrir e colocar ventás nas túas pantallas</translation> <translation id="4880827082731008257">Historial de busca</translation> <translation id="4881695831933465202">Abrir</translation> <translation id="4885256590493466218">Paga con <ph name="CARD_DETAIL" /> ao procesar a compra</translation> @@ -1627,7 +1626,6 @@ <translation id="6169916984152623906">Agora podes navegar de forma privada, sen que os demais usuarios deste dispositivo vexan a túa actividade. Non obstante, gardaranse as descargas e os marcadores.</translation> <translation id="6177128806592000436">A túa conexión a este sitio non é segura</translation> <translation id="6180316780098470077">Intervalo de reintentos</translation> -<translation id="619448280891863779">Pode pedirche permiso para abrir e colocar ventás nas túas pantallas</translation> <translation id="6196640612572343990">Bloquear cookies de terceiros</translation> <translation id="6203231073485539293">Comproba a túa conexión a Internet</translation> <translation id="6218753634732582820">Queres eliminar o enderezo de Chromium?</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index a2f23315..3f66dcd 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -526,6 +526,7 @@ <translation id="2609632851001447353">વૈવિધ્ય</translation> <translation id="2610561535971892504">કૉપિ કરવા માટે ક્લિક</translation> <translation id="2618023639789766142">C10 (એન્વલપ)</translation> +<translation id="2623663032199728144">તમારી સ્ક્રીન વિશેની માહિતીનો ઉપયોગ કરવા પરવાનગી માગી શકે છે</translation> <translation id="2625385379895617796">તમારી ઘડિયાળ આગળ છે</translation> <translation id="262745152991669301">USB ડિવાઇસ સાથે કનેક્ટ કરવાનું પૂછી શકે છે</translation> <translation id="2629325967560697240">Chromeની સૌથી ઉચ્ચ લેવલની સુરક્ષા મેળવવા માટે, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />વધારેલી સુરક્ષા ચાલુ કરો<ph name="END_ENHANCED_PROTECTION_LINK" /></translation> @@ -645,6 +646,7 @@ <translation id="3037605927509011580">અરર કંઇક ભુલ થઇ!</translation> <translation id="3041612393474885105">પ્રમાણપત્ર માહિતી</translation> <translation id="3044034790304486808">તમારી શોધ ફરી શરૂ કરો</translation> +<translation id="305162504811187366">ટાઇમસ્ટેમ્પ, હોસ્ટ અને ક્લાયન્ટ સત્ર ids સહિત Chrome રીમોટ ડેસ્કટૉપનો ઇતિહાસ</translation> <translation id="3060227939791841287">C9 (એન્વલપ)</translation> <translation id="3061707000357573562">પૅચ સેવા</translation> <translation id="306573536155379004">ગેમ શરૂ થઈ ગઈ છે.</translation> @@ -1238,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{એકેય નહીં}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> શોધ</translation> <translation id="4879491255372875719">ઑટોમૅટિક (ડિફૉલ્ટ)</translation> -<translation id="4879725228911483934">ખોલો અને તમારી સ્ક્રીન પર વિંડોનું સ્થાન નિયોજન કરો</translation> <translation id="4880827082731008257">શોધ ઇતિહાસ</translation> <translation id="4881695831933465202">ખોલો</translation> <translation id="4885256590493466218">ચેકઆઉટ કરતી વખતે <ph name="CARD_DETAIL" /> વડે ચુકવણી કરો</translation> @@ -1627,7 +1628,6 @@ <translation id="6169916984152623906">હવે તમે ખાનગીમાં બ્રાઉઝ કરી શકો છો અને અન્ય લોકો જે આ ડિવાઇસનો ઉપયોગ કરે છે તે પણ તમારી પ્રવૃત્તિ જોઈ શકશે નહીં. જોકે ડાઉનલોડ અને બુકમાર્ક સાચવવામાં આવશે.</translation> <translation id="6177128806592000436">આ સાઇટ પરનું તમારું કનેક્શન સુરક્ષિત નથી</translation> <translation id="6180316780098470077">ફરી પ્રયાસ કરવા માટેનો અંતરાલ</translation> -<translation id="619448280891863779">વિન્ડો ખોલીને તમારી સ્ક્રીન પર મૂકવા માટે પૂછી શકે છે</translation> <translation id="6196640612572343990">ત્રીજા પક્ષની કુકીને બ્લૉક કરો</translation> <translation id="6203231073485539293">તમારું ઇન્ટરનેટ કનેક્શન તપાસો</translation> <translation id="6218753634732582820">Chromium માંથી સરનામું દૂર કરીએ?</translation> @@ -2360,6 +2360,7 @@ <translation id="865032292777205197">મોશન સેન્સર</translation> <translation id="8663226718884576429">ઑર્ડરનો સારાંશ, <ph name="TOTAL_LABEL" />, વધુ વિગતો</translation> <translation id="8666678546361132282">અંગ્રેજી</translation> +<translation id="8669306706049782872">વિન્ડો ખોલવા અને મૂકવા માટે, તમારી સ્ક્રીન વિશેની માહિતીનો ઉપયોગ કરવા માગે છે</translation> <translation id="867224526087042813">સહી</translation> <translation id="8676424191133491403">કોઈ વિલંબ વિના</translation> <translation id="8680536109547170164"><ph name="QUERY" />, જવાબ, <ph name="ANSWER" /></translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index e31694e2..d5610b5 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{कोई नहीं}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> खोज</translation> <translation id="4879491255372875719">अपने आप (डिफ़ॉल्ट)</translation> -<translation id="4879725228911483934">यह साइट, विंडो को खोलकर आपकी स्क्रीन पर लगाना चाहती है</translation> <translation id="4880827082731008257">खोज इतिहास</translation> <translation id="4881695831933465202">खोलें</translation> <translation id="4885256590493466218">चेकआउट के दौरान <ph name="CARD_DETAIL" /> से पैसे चुकाएं</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">अब आप निजी रूप से ब्राउज़ कर सकते हैं और इस डिवाइस का उपयोग करने वाले दूसरे लोगों को आपकी गतिविधि दिखाई नहीं देगी. लेकिन डाउनलोड और बुकमार्क सेव होंगे.</translation> <translation id="6177128806592000436">इस साइट से आपका कनेक्शन सुरक्षित नहीं है</translation> <translation id="6180316780098470077">बार-बार कोशिश किए जाने के बीच का समय</translation> -<translation id="619448280891863779">साइट, विंडो को खोलकर आपकी स्क्रीन पर लगाने के लिए पूछ सकती है</translation> <translation id="6196640612572343990">तीसरे पक्ष की कुकी ब्लॉक करें</translation> <translation id="6203231073485539293">अपना इंटरनेट कनेक्शन जांचे</translation> <translation id="6218753634732582820">क्रोमियम से पता निकालें?</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index d4ce3a1..4032f2e 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ništa}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Pretraživanje <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatski (zadano)</translation> -<translation id="4879725228911483934">otvarati i postavljati prozore na vašim zaslonima</translation> <translation id="4880827082731008257">Pretraži povijest</translation> <translation id="4881695831933465202">Otvori</translation> <translation id="4885256590493466218">Platite karticom <ph name="CARD_DETAIL" /> prilikom naplate</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Sada možete pregledavati privatno i ostali korisnici ovog uređaja neće vidjeti vaše aktivnosti. No spremit će se preuzimanja i oznake.</translation> <translation id="6177128806592000436">Veza s web-lokacijom nije sigurna</translation> <translation id="6180316780098470077">Interval između ponovnih pokušaja</translation> -<translation id="619448280891863779">Može tražiti dopuštenje za otvaranje i postavljanje prozora na zaslone</translation> <translation id="6196640612572343990">Blokiraj kolačiće trećih strana</translation> <translation id="6203231073485539293">Provjerite internetsku vezu</translation> <translation id="6218753634732582820">Želite li ukloniti adresu iz Chromiuma?</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 69f48c4..f52a08b 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -1238,7 +1238,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Nincs}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> keresése</translation> <translation id="4879491255372875719">Automatikus (alapértelmezett)</translation> -<translation id="4879725228911483934">Megnyitni az ablakokat és elhelyezni őket a képernyőkön</translation> <translation id="4880827082731008257">Keresés az előzmények között</translation> <translation id="4881695831933465202">Megnyitás</translation> <translation id="4885256590493466218">Fizetés a(z) <ph name="CARD_DETAIL" /> kártyával</translation> @@ -1627,7 +1626,6 @@ <translation id="6169916984152623906">Most privát módon böngészhet, így az eszközt használó többi személy nem láthatja az Ön tevékenységeit. A letöltéseket és a könyvjelzőket azonban menti a rendszer.</translation> <translation id="6177128806592000436">Kapcsolata a webhellyel nem biztonságos</translation> <translation id="6180316780098470077">Újrapróbálkozások közötti idő</translation> -<translation id="619448280891863779">Engedélyt kérhet ablakok megnyitására és elhelyezésére a képernyőn</translation> <translation id="6196640612572343990">Harmadik féltől származó cookie-k letiltása</translation> <translation id="6203231073485539293">Ellenőrizze az internetkapcsolatot</translation> <translation id="6218753634732582820">Eltávolítja a címet a Chromiumból?</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index 4e2deabe..0bf6d766 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb
@@ -1239,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Չկա}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Որոնել «<ph name="TEXT" />»</translation> <translation id="4879491255372875719">Ավտոմատ (կանխադրված)</translation> -<translation id="4879725228911483934">Բացել և տեղակայել պատուհանները ձեր էկրաններին</translation> <translation id="4880827082731008257">Որոնել պատմությունում</translation> <translation id="4881695831933465202">Բացել</translation> <translation id="4885256590493466218">Վճարեք <ph name="CARD_DETAIL" /> քարտի միջոցով</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Ինկոգնիտո ռեժիմում ձեր գործողությունները տեսանելի չեն լինի այս սարքի մյուս օգտատերերին: Սակայն ներբեռնումներն ու էջանիշները կպահվեն։</translation> <translation id="6177128806592000436">Կայքին կապակցումը պաշտպանված չէ</translation> <translation id="6180316780098470077">Կրկնության միջակայք</translation> -<translation id="619448280891863779">Կարող է հայցել էկրաններին պատուհաններ բացելու և տեղադրելու թույլտվություն</translation> <translation id="6196640612572343990">Արգելափակել երրորդ կողմի քուքիները</translation> <translation id="6203231073485539293">Ստուգեք համացանցի կապակցումը</translation> <translation id="6218753634732582820">Հեռացնե՞լ հասցեն Chromium-ից:</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index eb0df05..94ed5ad 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">Yah!</translation> <translation id="3041612393474885105">Informasi Sertifikat</translation> <translation id="3044034790304486808">Lanjutkan pencarian Anda</translation> +<translation id="305162504811187366">Histori Chrome Desktop Jarak Jauh, termasuk stempel waktu, host, dan ID sesi klien</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">Layanan Patch</translation> <translation id="306573536155379004">Game dimulai.</translation> @@ -1229,7 +1230,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Tidak ada}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Penelusuran <ph name="TEXT" /></translation> <translation id="4879491255372875719">Otomatis (default)</translation> -<translation id="4879725228911483934">Membuka dan menempatkan jendela di layar Anda</translation> <translation id="4880827082731008257">Telusuri histori</translation> <translation id="4881695831933465202">Buka</translation> <translation id="4885256590493466218">Bayar dengan <ph name="CARD_DETAIL" /> saat checkout</translation> @@ -1618,7 +1618,6 @@ <translation id="6169916984152623906">Anda kini dapat mengakses secara rahasia, dan orang lain yang menggunakan perangkat ini tidak akan melihat aktivitas Anda. Namun, hasil download dan bookmark akan disimpan.</translation> <translation id="6177128806592000436">Sambungan Anda ke situs ini tidak aman</translation> <translation id="6180316780098470077">Interval percobaan ulang</translation> -<translation id="619448280891863779">Dapat meminta untuk membuka dan menempatkan jendela di layar Anda</translation> <translation id="6196640612572343990">Blokir cookie pihak ketiga</translation> <translation id="6203231073485539293">Periksa koneksi internet Anda</translation> <translation id="6218753634732582820">Hapus alamat dari Chromium?</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index 3361ea8..efcb0c5f 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -1239,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ekkert}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" />-leit</translation> <translation id="4879491255372875719">Sjálfvirkt (sjálfgildi)</translation> -<translation id="4879725228911483934">Opna og setja glugga á skjáinn</translation> <translation id="4880827082731008257">Leitarferill</translation> <translation id="4881695831933465202">Opna</translation> <translation id="4885256590493466218">Greiddu með <ph name="CARD_DETAIL" /> þegar þú gengur frá kaupunum</translation> @@ -1628,7 +1627,6 @@ <translation id="6169916984152623906">Nú geturðu vafrað í næði og aðrir notendur tækisins geta ekki séð það sem þú gerir. Niðurhal og bókamerki eru hinsvegar vistuð.</translation> <translation id="6177128806592000436">Tenging þín við þetta vefsvæði er ekki örugg</translation> <translation id="6180316780098470077">Tími milli tilrauna</translation> -<translation id="619448280891863779">Geta beðið um að opna og koma gluggum fyrir á skjánum</translation> <translation id="6196640612572343990">Loka á fótspor frá þriðja aðila</translation> <translation id="6203231073485539293">Athugaðu internettenginguna</translation> <translation id="6218753634732582820">Fjarlægja netfang úr Chromium?</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index eba041c5..d725611 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -1237,7 +1237,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Nessuna}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Ricerca di <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatica (impostazione predefinita)</translation> -<translation id="4879725228911483934">Aprire finestre e posizionarle sugli schermi</translation> <translation id="4880827082731008257">Cerca nella cronologia</translation> <translation id="4881695831933465202">Apri</translation> <translation id="4885256590493466218">Paga con <ph name="CARD_DETAIL" /> al momento del pagamento</translation> @@ -1625,7 +1624,6 @@ <translation id="6169916984152623906">Ora puoi navigare in privato. Le altre persone che usano questo dispositivo non vedranno le tue attività, ma i download e i preferiti verranno salvati.</translation> <translation id="6177128806592000436">La tua connessione a questo sito non è sicura</translation> <translation id="6180316780098470077">Intervallo tra tentativi</translation> -<translation id="619448280891863779">Può chiedere di aprire e posizionare le finestre sugli schermi</translation> <translation id="6196640612572343990">Blocca cookie di terze parti</translation> <translation id="6203231073485539293">Controlla la connessione a Internet</translation> <translation id="6218753634732582820">Rimuovere l'indirizzo da Chromium?</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index b949f1ff..2b54842 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">אוי, לא!</translation> <translation id="3041612393474885105">פרטי אישור</translation> <translation id="3044034790304486808">המשך החקירה</translation> +<translation id="305162504811187366">ההיסטוריה של Chrome Remote Desktop, כולל חותמות זמן, מארחים ומזהי סשנים של לקוחות</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">שירות תיקון</translation> <translation id="306573536155379004">המשחק התחיל.</translation> @@ -1241,7 +1242,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{אין}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}many{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> - חיפוש</translation> <translation id="4879491255372875719">אוטומטי (ברירת מחדל)</translation> -<translation id="4879725228911483934">לפתוח ולמקם חלונות במסכים שלך</translation> <translation id="4880827082731008257">חיפוש בהיסטוריה</translation> <translation id="4881695831933465202">פתיחה</translation> <translation id="4885256590493466218">תשלום בקופה עם <ph name="CARD_DETAIL" /></translation> @@ -1631,7 +1631,6 @@ <translation id="6169916984152623906">עכשיו באפשרותך לגלוש באופן פרטי, ואנשים אחרים שמשתמשים במכשיר הזה לא יראו את הפעילות שלך. עם זאת, עדיין תתבצע שמירה של הורדות וסימניות.</translation> <translation id="6177128806592000436">החיבור שלך לאתר הזה לא מאובטח</translation> <translation id="6180316780098470077">מרווח בין ניסיונות חוזרים</translation> -<translation id="619448280891863779">האתר יכול לבקש הרשאה לפתוח ולמקם חלונות במסכים שלך</translation> <translation id="6196640612572343990">חסימת קובצי Cookie של צד שלישי</translation> <translation id="6203231073485539293">בדיקת חיבור האינטרנט</translation> <translation id="6218753634732582820">האם להסיר מ-Chromium את הכתובת?</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index ee3185d..838d5a5 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -1231,7 +1231,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{なし}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" />、<ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> を検索</translation> <translation id="4879491255372875719">自動(デフォルト)</translation> -<translation id="4879725228911483934">画面上にウィンドウを開いて配置する</translation> <translation id="4880827082731008257">履歴を検索</translation> <translation id="4881695831933465202">開く</translation> <translation id="4885256590493466218">ご購入手続きの際に <ph name="CARD_DETAIL" /> で支払います</translation> @@ -1620,7 +1619,6 @@ <translation id="6169916984152623906">現在、シークレット モードで閲覧しています。あなたのアクティビティは、このデバイスを利用する他のユーザーには表示されません。ただし、ダウンロードしたファイルとブックマークは通常どおり保存されます。</translation> <translation id="6177128806592000436">このサイトへの接続は保護されていません</translation> <translation id="6180316780098470077">再試行の間隔</translation> -<translation id="619448280891863779">画面上にウィンドウを開いて配置するよう要求できる</translation> <translation id="6196640612572343990">サードパーティの Cookie をブロックする</translation> <translation id="6203231073485539293">インターネット接続を確認してください</translation> <translation id="6218753634732582820">Chromium からアドレスを削除してもよろしいですか?</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index d1a9bdd7..a68ce0a8 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb
@@ -1231,7 +1231,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{არცერთი}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">„<ph name="TEXT" />“-ის ძიება</translation> <translation id="4879491255372875719">ავტომატური (ნაგულისხმევი)</translation> -<translation id="4879725228911483934">თქვენს ეკრანებზე ფანჯრების გახსნა და განლაგება</translation> <translation id="4880827082731008257">ძიების ისტორია</translation> <translation id="4881695831933465202">გახსნა</translation> <translation id="4885256590493466218">ანგარიშსწორებისას გადაიხადეთ <ph name="CARD_DETAIL" />-ით</translation> @@ -1620,7 +1619,6 @@ <translation id="6169916984152623906">ახლა ვების დათვალიერება კონფიდენციალურად შეგიძლიათ, რაც ნიშნავს, რომ ამ მოწყობილობის სხვა მომხმარებლები თქვენს აქტივობას ვერ იხილავენ. მიუხედავად ამისა, ჩამოტვირთული ფაილები და სანიშნეები მაინც შეინახება.</translation> <translation id="6177128806592000436">თქვენი კავშირი ამ საიტთან დაცული არ არის</translation> <translation id="6180316780098470077">ხელახლა მცდელობის ინტერვალი</translation> -<translation id="619448280891863779">შეუძლია თქვენს ეკრანებზე ფანჯრების გახსნისა და განლაგების თხოვნა</translation> <translation id="6196640612572343990">მესამე მხარის ქუქი-ჩანაწერების დაბლოკვა</translation> <translation id="6203231073485539293">შეამოწმეთ თქვენი ინტერნეტ კავშირი</translation> <translation id="6218753634732582820">ამოიშალოს მისამართი Chromium-იდან?</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index 0a00344a..fe88271d 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">Қап!</translation> <translation id="3041612393474885105">Сертификат ақпараты</translation> <translation id="3044034790304486808">Іздеуді жалғастыру</translation> +<translation id="305162504811187366">Chrome Remote Desktop тарихы, соның ішінде уақыт белгілері, хостар мен клиент сеансының идентификаторлары</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">Қызметті түзету</translation> <translation id="306573536155379004">Ойын басталды.</translation> @@ -1238,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Жоқ}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> іздеу</translation> <translation id="4879491255372875719">Автоматты (әдепкі)</translation> -<translation id="4879725228911483934">Терезелерді ашу және экрандарда орналастыру</translation> <translation id="4880827082731008257">Тарихтан іздеу</translation> <translation id="4881695831933465202">Ашу</translation> <translation id="4885256590493466218">Тапсырысты рәсімдегенде, <ph name="CARD_DETAIL" /> картасымен төлеңіз.</translation> @@ -1627,7 +1627,6 @@ <translation id="6169916984152623906">Қазір инкогнито режимінде қарап шығуыңызға болады, ал осы құрылғыны пайдаланатын басқа адамдар әрекетіңізді көрмейді. Бірақ жүктеп алынған материалдар мен бетбелгілер сақталады.</translation> <translation id="6177128806592000436">Бұл сайтпен байланысыңыз қауіпсіз емес</translation> <translation id="6180316780098470077">Қайталау аралығы</translation> -<translation id="619448280891863779">Терезелерді ашуды және экрандарға орналастыруды сұрай алады</translation> <translation id="6196640612572343990">Үшінші тарап cookie файлдарын бөгеу</translation> <translation id="6203231073485539293">Интернет байланысын тексеріңіз</translation> <translation id="6218753634732582820">Мекенжайды Chromium жүйесінен алып тастау керек пе?</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index 3b97af0..ea63a656 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -529,6 +529,7 @@ <translation id="2609632851001447353">បំរែបម្រួល</translation> <translation id="2610561535971892504">ចុចដើម្បីចម្លង</translation> <translation id="2618023639789766142">C10 (ស្រោមសំបុត្រ)</translation> +<translation id="2623663032199728144">អាចស្នើសុំប្រើព័ត៌មានអំពីអេក្រង់របស់អ្នក</translation> <translation id="2625385379895617796">ម៉ោងរបស់អ្នកដើរលឿន</translation> <translation id="262745152991669301">អាចស្នើសុំភ្ជាប់ជាមួយឧបករណ៍ USB</translation> <translation id="2629325967560697240">ដើម្បីទទួលបានកម្រិតសុវត្ថិភាពខ្ពស់បំផុតរបស់ Chrome <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />សូមបើកការការពារដែលប្រសើរជាងមុន<ph name="END_ENHANCED_PROTECTION_LINK" /></translation> @@ -1244,7 +1245,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{គ្មាន}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">ការស្វែងរក <ph name="TEXT" /></translation> <translation id="4879491255372875719">ស្វ័យប្រវត្តិ (លំនាំដើម)</translation> -<translation id="4879725228911483934">បើក និងដាក់វិនដូនៅលើអេក្រង់របស់អ្នក</translation> <translation id="4880827082731008257">ប្រវត្តិស្វែងរក</translation> <translation id="4881695831933465202">បើក</translation> <translation id="4885256590493466218">បង់ប្រាក់ដោយប្រើ <ph name="CARD_DETAIL" /> នៅពេលបង់ប្រាក់ចេញ</translation> @@ -1633,7 +1633,6 @@ <translation id="6169916984152623906">ឥឡូវនេះ អ្នកអាចធ្វើការរុករកជាលក្ខណៈឯកជនបានហើយ ដូច្នេះអ្នកផ្សេងទៀតដែលប្រើឧបករណ៍នេះនឹងមើលមិនឃើញសកម្មភាពរបស់អ្នកទេ។ ទោះជាយ៉ាងណាក្តី ឯកសារទាញយក និងចំណាំនឹងត្រូវបានរក្សាទុក។</translation> <translation id="6177128806592000436">ការតភ្ជាប់របស់អ្នកទៅគេហទំព័រនេះមិនមានសុវត្ថិភាពទេ</translation> <translation id="6180316780098470077">ចន្លោះពេលនៃការព្យាយាមម្ដងទៀត</translation> -<translation id="619448280891863779">អាចស្នើសុំបើក និងដាក់វិនដូនៅលើអេក្រង់របស់អ្នក</translation> <translation id="6196640612572343990">រារាំងខូគីភាគីទីបី</translation> <translation id="6203231073485539293">ពិនិត្យការភ្ជាប់អ៊ីនធឺណិតរបស់អ្នក</translation> <translation id="6218753634732582820">យកអាសយដ្ឋានចេញពី Chromium ឬ?</translation> @@ -2368,6 +2367,7 @@ <translation id="865032292777205197">ឧបករណ៍ចាប់ចលនា</translation> <translation id="8663226718884576429">ការសង្ខេបអំពីការបញ្ជាទិញ, <ph name="TOTAL_LABEL" />, ព័ត៌មានលម្អិតបន្ថែម</translation> <translation id="8666678546361132282">ភាសាអង់គ្លេស</translation> +<translation id="8669306706049782872">ប្រើព័ត៌មានអំពីអេក្រង់របស់អ្នកដើម្បីបើក និងដាក់វិនដូ</translation> <translation id="867224526087042813">ហត្ថលេខា</translation> <translation id="8676424191133491403">គ្មានការពន្យារពេល</translation> <translation id="8680536109547170164"><ph name="QUERY" />, ចមើ្លយ៖ <ph name="ANSWER" /></translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index 5020358..a0f04bc 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -643,6 +643,7 @@ <translation id="3037605927509011580">ಓಹ್, ಹೋಯ್ತು!</translation> <translation id="3041612393474885105">ಪ್ರಮಾಣಪತ್ರ ಮಾಹಿತಿ</translation> <translation id="3044034790304486808">ನಿಮ್ಮ ಸಂಶೋಧನೆಯನ್ನು ಪುನರಾರಂಭಿಸಿ</translation> +<translation id="305162504811187366">ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ಗಳು, ಹೋಸ್ಟ್ಗಳು ಮತ್ತು ಕ್ಲೈಂಟ್ ಸೆಷನ್ ಐಡಿಗಳು ಸೇರಿದಂತೆ Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್ಟಾಪ್ ಇತಿಹಾಸ</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">ಪ್ಯಾಚ್ ಸೇವೆ</translation> <translation id="306573536155379004">ಗೇಮ್ ಪ್ರಾರಂಭವಾಗಿದೆ.</translation> @@ -1229,7 +1230,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{ಒಂದೂ ಇಲ್ಲ}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> ಹುಡುಕಾಟ</translation> <translation id="4879491255372875719">ಸ್ವಯಂಚಾಲಿತ (ಡಿಫಾಲ್ಟ್)</translation> -<translation id="4879725228911483934">ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಿರಿ ಮತ್ತು ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ಗಳ ಮೇಲೆ ಇರಿಸಿ</translation> <translation id="4880827082731008257">ಹುಡುಕಾಟ ಇತಿಹಾಸ</translation> <translation id="4881695831933465202">ತೆರೆ</translation> <translation id="4885256590493466218">ಚೆಕ್ಔಟ್ನಲ್ಲಿ <ph name="CARD_DETAIL" /> ಮೂಲಕ ಪಾವತಿಸಿ</translation> @@ -1617,7 +1617,6 @@ <translation id="6169916984152623906">ನೀವೀಗ ಖಾಸಗಿಯಾಗಿ ಬ್ರೌಸ್ ಮಾಡಬಹುದು. ಈ ಸಾಧನವನ್ನು ಬಳಸುವ ಬೇರೆ ಯಾರಿಗೂ ನಿಮ್ಮ ಚಟುವಟಿಕೆ ಕಾಣಿಸುವುದಿಲ್ಲ. ಆದರೂ, ಡೌನ್ಲೋಡ್ಗಳು ಮತ್ತು ಬುಕ್ಮಾರ್ಕ್ಗಳು ಉಳಿದಿರುತ್ತವೆ.</translation> <translation id="6177128806592000436">ಈ ಸೈಟ್ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕವು ಸುರಕ್ಷಿತವಾಗಿಲ್ಲ</translation> <translation id="6180316780098470077">ಮರುಪ್ರಯತ್ನದ ಮಧ್ಯಂತರ</translation> -<translation id="619448280891863779">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ಗಳಲ್ಲಿ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಇರಿಸಲು ಕೇಳಬಹುದು</translation> <translation id="6196640612572343990">ಥರ್ಡ್ ಪಾರ್ಟಿ ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation> <translation id="6203231073485539293">ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ</translation> <translation id="6218753634732582820">Chromium ನಿಂದ ವಿಳಾಸವನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index cd45c10..c95a0c1 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">앗, 이런!</translation> <translation id="3041612393474885105">인증서 정보</translation> <translation id="3044034790304486808">검색 계속</translation> +<translation id="305162504811187366">타임스탬프, 호스트, 클라이언트 세션 ID를 포함한 Chrome 원격 데스크톱 기록</translation> <translation id="3060227939791841287">C9(봉투)</translation> <translation id="3061707000357573562">서비스 패치</translation> <translation id="306573536155379004">게임이 시작되었습니다.</translation> @@ -1230,7 +1231,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{없음}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> 검색</translation> <translation id="4879491255372875719">자동(기본값)</translation> -<translation id="4879725228911483934">화면에서 창을 열고 배치합니다.</translation> <translation id="4880827082731008257">기록 검색</translation> <translation id="4881695831933465202">열기</translation> <translation id="4885256590493466218">결제 시 <ph name="CARD_DETAIL" /> 사용</translation> @@ -1619,7 +1619,6 @@ <translation id="6169916984152623906">이제 비공개로 인터넷을 사용할 수 있으며, 이 기기를 사용하는 다른 사용자가 내 활동을 볼 수 없습니다. 하지만 다운로드한 항목과 북마크는 저장됩니다.</translation> <translation id="6177128806592000436">이 사이트는 보안 연결(HTTPS)이 사용되지 않았습니다.</translation> <translation id="6180316780098470077">재시도 간격</translation> -<translation id="619448280891863779">화면에서 창을 열어 화면에 배치하도록 요청할 수 있음</translation> <translation id="6196640612572343990">타사 쿠키 차단</translation> <translation id="6203231073485539293">인터넷 연결을 확인하세요.</translation> <translation id="6218753634732582820">Chromium에서 주소를 삭제하시겠습니까?</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index d097d7e..3128fb8 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -1239,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Жок}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> деп издөө</translation> <translation id="4879491255372875719">Автоматтык (демейки)</translation> -<translation id="4879725228911483934">Терезелерди ачып, экрандарыңызга жайгаштырыңыз</translation> <translation id="4880827082731008257">Издөө таржымалы</translation> <translation id="4881695831933465202">Ачуу</translation> <translation id="4885256590493466218"><ph name="CARD_DETAIL" /> картасы менен төлөңүз</translation> @@ -1628,7 +1627,6 @@ <translation id="6169916984152623906">Жашыруун режимдеги аракеттериңиз ушул түзмөктүн башка колдонуучуларына көрүнбөйт. Бирок жүктөп алынган файлдар жана кыстармалар сакталып кала берет.</translation> <translation id="6177128806592000436">Бул сайтка туташуу коопсуз эмес</translation> <translation id="6180316780098470077">Кайталоолордун интервалы</translation> -<translation id="619448280891863779">Терезени ачып, экрандарыңызга жайгаштырууга уруксат сурай алат</translation> <translation id="6196640612572343990">Үчүнчү жактын кукилери бөгөттөлсүн</translation> <translation id="6203231073485539293">Интернет туташууңузду текшериңиз</translation> <translation id="6218753634732582820">Дарек Chromium'дан алынып салынсынбы?</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb index 1f982e28..9d2960b 100644 --- a/components/strings/components_strings_lo.xtb +++ b/components/strings/components_strings_lo.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{ບໍ່ມີ}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">ຊອກຫາ <ph name="TEXT" /></translation> <translation id="4879491255372875719">ອັດຕະໂນມັດ (ຄ່າເລີ່ມຕົ້ນ)</translation> -<translation id="4879725228911483934">ເປີດ ແລະ ວາງໜ້າຈໍໄວ້ໃສ່ໃນໜ້າຈໍຂອງທ່ານ</translation> <translation id="4880827082731008257">ຄົ້ນຫາປະຫວັດ</translation> <translation id="4881695831933465202">ເປີດ</translation> <translation id="4885256590493466218">ຈ່າຍດ້ວຍ <ph name="CARD_DETAIL" /> ຢູ່ຈຸດຈ່າຍເງິນ</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">ຕອນນີ້ທ່ານສາມາດທ່ອງເວັບແບບສ່ວນຕົວໄດ້ແລ້ວ ແລະ ຄົນອື່ນທີ່ໃຊ້ອຸປະກອນນີ້ຈະບໍ່ເຫັນການເຄື່ອນໄຫວຂອງທ່ານ. ແນວໃດກໍຕາມ, ການດາວໂຫຼດ ແລະ ບຸກມາກຈະຖືກບັນທຶກໄວ້.</translation> <translation id="6177128806592000436">ການເຊື່ອມຕໍ່ຂອງທ່ານກັບເວັບໄຊນີ້ບໍ່ປອດໄພ</translation> <translation id="6180316780098470077">ຊ່ວງຫ່າງລະຫວ່າງການລອງໃໝ່ແຕ່ລະຄັ້ງ</translation> -<translation id="619448280891863779">ສາມາດຈໍເປີດ ແລະ ວາງໜ້າຈໍຕ່າງໆຢູ່ໜ້າຈໍຂອງທ່ານໄດ້</translation> <translation id="6196640612572343990">ບລັອກຄຸກກີ້ພາກສ່ວນທີສາມ</translation> <translation id="6203231073485539293">ກວດເບິ່ງການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານ.</translation> <translation id="6218753634732582820">ເອົາທີ່ຢູ່ອອກຈາກ Chromium ບໍ?</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 56b2001b..59b19dc 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Nėra}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}many{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">„<ph name="TEXT" />“ paieška</translation> <translation id="4879491255372875719">Automatinis (numatytasis)</translation> -<translation id="4879725228911483934">Atidaryti ir nustatyti langus ekranuose</translation> <translation id="4880827082731008257">Ieškoti istorijoje</translation> <translation id="4881695831933465202">Atidaryti</translation> <translation id="4885256590493466218">Mokėti naudojant <ph name="CARD_DETAIL" /> atsiskaitant</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Dabar galite naršyti privačiai, o kiti šį įrenginį naudojantys žmonės nematys jūsų veiklos. Tačiau atsisiuntimai ir žymės bus išsaugoti.</translation> <translation id="6177128806592000436">Ryšys su šia svetaine nėra saugus</translation> <translation id="6180316780098470077">Pakartotinio bandymo intervalas</translation> -<translation id="619448280891863779">Gali būti prašoma atidaryti ir įdėti langų jūsų ekranuose</translation> <translation id="6196640612572343990">Blokuoti trečiosios šalies slapukus</translation> <translation id="6203231073485539293">Patikrinkite interneto ryšį</translation> <translation id="6218753634732582820">Pašalinti adresą iš „Chromium“?</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index aa98b629..c51f1c2d 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -1238,7 +1238,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Nav}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}zero{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Teksta “<ph name="TEXT" />” meklēšana</translation> <translation id="4879491255372875719">Automātiski (noklusējums)</translation> -<translation id="4879725228911483934">Atvērt un izvietot logus jūsu ekrānos</translation> <translation id="4880827082731008257">Meklēšanas vēsture</translation> <translation id="4881695831933465202">Atvērt</translation> <translation id="4885256590493466218">Maksājiet ar karti <ph name="CARD_DETAIL" /></translation> @@ -1627,7 +1626,6 @@ <translation id="6169916984152623906">Tagad varat privāti pārlūkot saturu, un citas personas, kas izmanto šo ierīci, nevarēs redzēt jūsu darbības. Tomēr lejupielādes un grāmatzīmes tiks saglabātas.</translation> <translation id="6177128806592000436">Savienojums ar šo vietni nav drošs.</translation> <translation id="6180316780098470077">Intervāls starp atkārtotiem mēģinājumiem</translation> -<translation id="619448280891863779">Var pieprasīt atļauju atvērt un izvietot logus jūsu ekrānos</translation> <translation id="6196640612572343990">Bloķēt trešo pušu sīkfailus</translation> <translation id="6203231073485539293">Interneta savienojuma pārbaude</translation> <translation id="6218753634732582820">Vai noņemt adresi no pārlūka Chromium?</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index 55c3e0f..5f5322f 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ниеден}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Пребарување <ph name="TEXT" /></translation> <translation id="4879491255372875719">Автоматски (стандардно)</translation> -<translation id="4879725228911483934">Отвора и поставува прозорци на вашиот екран</translation> <translation id="4880827082731008257">Историја на пребарување</translation> <translation id="4881695831933465202">Отвори</translation> <translation id="4885256590493466218">Платете со <ph name="CARD_DETAIL" /> при наплатата</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Сега може да прелистувате приватно, а другите луѓе кои го користат уредов нема да ја видат вашата активност. Сепак, преземањата и обележувачите ќе се зачуваат.</translation> <translation id="6177128806592000436">Врската со овој сајт не е безбедна</translation> <translation id="6180316780098470077">Обиди се повторно со интервалот</translation> -<translation id="619448280891863779">Може да прашува за да отвора и поставува прозорци на екраните</translation> <translation id="6196640612572343990">Блокирај колачиња од трети лица</translation> <translation id="6203231073485539293">Проверете го поврзувањето на интернет</translation> <translation id="6218753634732582820">Да се отстрани адресата од Chromium?</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index c20effd..0d5ae01b 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -525,6 +525,7 @@ <translation id="2609632851001447353">വേരിയേഷനുകൾ</translation> <translation id="2610561535971892504">പകർത്താൻ ക്ലിക്ക് ചെയ്യുക</translation> <translation id="2618023639789766142">C10 (എൻവലപ്പ്)</translation> +<translation id="2623663032199728144">നിങ്ങളുടെ സ്ക്രീനുകളുടെ വിവരങ്ങൾ ഉപയോഗിക്കാൻ ആവശ്യപ്പെടാം</translation> <translation id="2625385379895617796">നിങ്ങളുടെ ക്ലോക്ക് വളരെ മുമ്പിലാണ്</translation> <translation id="262745152991669301">USB ഉപകരണങ്ങൾ കണക്റ്റ് ചെയ്യാൻ ആവശ്യപ്പെടാം</translation> <translation id="2629325967560697240">Chrome-ന്റെ ഏറ്റവും ഉയർന്ന സുരക്ഷ നേടാൻ, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />മെച്ചപ്പെടുത്തിയ പരിരക്ഷ ഓണാക്കുക<ph name="END_ENHANCED_PROTECTION_LINK" /></translation> @@ -1236,7 +1237,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{ഒന്നുമില്ല}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> തിരയുക</translation> <translation id="4879491255372875719">സ്വമേധയാ (ഡിഫോൾട്ട്)</translation> -<translation id="4879725228911483934">നിങ്ങളുടെ വിൻഡോ തുറന്ന് സ്ക്രീനിൽ വെയ്ക്കണമെന്നുണ്ട്</translation> <translation id="4880827082731008257">തിരയൽ ചരിത്രം</translation> <translation id="4881695831933465202">തുറക്കുക</translation> <translation id="4885256590493466218">ചെക്ക്ഔട്ട് ചെയ്യുമ്പോൾ <ph name="CARD_DETAIL" /> ഉപയോഗിച്ച് പണമടയ്ക്കുക</translation> @@ -1625,7 +1625,6 @@ <translation id="6169916984152623906">നിങ്ങൾക്കിപ്പോൾ സ്വകാര്യമായി ബ്രൗസ് ചെയ്യാം, ഈ ഉപകരണം ഉപയോഗിക്കുന്ന മറ്റ് ആളുകൾക്ക് നിങ്ങളുടെ ആക്റ്റിവിറ്റി കാണാനാവില്ല. എന്നാൽ ഡൗൺലോഡുകളും ബുക്ക്മാർക്കുകളും സംരക്ഷിക്കപ്പെടും.</translation> <translation id="6177128806592000436">ഈ സൈറ്റിലേക്കുള്ള നിങ്ങളുടെ കണക്ഷൻ സുരക്ഷിതമല്ല</translation> <translation id="6180316780098470077">വീണ്ടും ശ്രമിക്കുന്നതിനുള്ള ഇടവേള</translation> -<translation id="619448280891863779">നിങ്ങളുടെ സ്ക്രീനുകളിൽ വിൻഡോകൾ തുറന്ന് വയ്ക്കാൻ ആവശ്യപ്പെടാം</translation> <translation id="6196640612572343990">മൂന്നാം കക്ഷി കുക്കികള് ബ്ലോക്കുചെയ്യുക</translation> <translation id="6203231073485539293">നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക</translation> <translation id="6218753634732582820">Chromium-ത്തിൽ നിന്ന് വിലാസം നീക്കംചെയ്യണോ?</translation> @@ -2356,6 +2355,7 @@ <translation id="865032292777205197">മോഷൻ സെൻസറുകൾ</translation> <translation id="8663226718884576429">ഓർഡർ സംഗ്രഹം, <ph name="TOTAL_LABEL" />, കൂടുതൽ വിശദാംശങ്ങൾ</translation> <translation id="8666678546361132282">ഇംഗ്ലീഷ്</translation> +<translation id="8669306706049782872">വിൻഡോകൾ തുറന്ന് വയ്ക്കാൻ നിങ്ങളുടെ സ്ക്രീനുകളുടെ വിവരങ്ങൾ ഉപയോഗിക്കുക</translation> <translation id="867224526087042813">ഒപ്പ്</translation> <translation id="8676424191133491403">കാലതാമസമില്ല</translation> <translation id="8680536109547170164"><ph name="QUERY" />, ഉത്തരം, <ph name="ANSWER" /></translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb index 26362be..9c06a4aa3 100644 --- a/components/strings/components_strings_mn.xtb +++ b/components/strings/components_strings_mn.xtb
@@ -526,6 +526,7 @@ <translation id="2609632851001447353">Хувилбарууд</translation> <translation id="2610561535971892504">Хуулахын тулд товшино уу</translation> <translation id="2618023639789766142">C10 (Дугтуй)</translation> +<translation id="2623663032199728144">Таны дэлгэцийн талаарх мэдээллийг ашиглахыг хүсэх боломжтой</translation> <translation id="2625385379895617796">Таны цаг түрүүлж явж байна.</translation> <translation id="262745152991669301">USB төхөөрөмжүүдэд холбогдохыг хүсэх боломжтой</translation> <translation id="2629325967560697240">Chrome-н хамгийн дээд түвшний аюулгүй байдлыг авахын тулд <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />сайжруулсан хамгаалалтыг асаана уу<ph name="END_ENHANCED_PROTECTION_LINK" /></translation> @@ -1241,7 +1242,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Байхгүй}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" />-н хайлт</translation> <translation id="4879491255372875719">Автомат (өгөгдмөл)</translation> -<translation id="4879725228911483934">Дэлгэц дээрээ цонх нээж, байрлуулах</translation> <translation id="4880827082731008257">Түүхийг хайх</translation> <translation id="4881695831933465202">Нээх</translation> <translation id="4885256590493466218">Тооцоо хийхдээ <ph name="CARD_DETAIL" />-р төлөөрэй</translation> @@ -1629,7 +1629,6 @@ <translation id="6169916984152623906">Ta одоо хувийн хайлт хийж болох ба энэ төхөөрөмжийг ашигладаг бусад хүмүүс таны ажиллагааг харахгүй. Гэхдээ татаж авсан файл, хавчуурга хадгалагдана.</translation> <translation id="6177128806592000436">Энэ сайтын холболт аюултай байна</translation> <translation id="6180316780098470077">Дахин оролдлого хоорондох интервал</translation> -<translation id="619448280891863779">Таны дэлгэц дээр цонх нээх болон байрлуулахыг хүсэх боломжтой</translation> <translation id="6196640612572343990">Гуравдагч талын күүкиг блоклох</translation> <translation id="6203231073485539293">Та интернэтийн холболтоо шалгана уу</translation> <translation id="6218753634732582820">Хаягийг Chromium-с устгах уу?</translation> @@ -2362,6 +2361,7 @@ <translation id="865032292777205197">хөдөлгөөн мэдрэгч</translation> <translation id="8663226718884576429">Захиалгын дүн, <ph name="TOTAL_LABEL" />, Дэлгэрэнгүй</translation> <translation id="8666678546361132282">Англи хэл</translation> +<translation id="8669306706049782872">Таны дэлгэцийн талаарх мэдээллийг цонх нээх болон байрлуулахад ашиглах</translation> <translation id="867224526087042813">Гарын үсэг</translation> <translation id="8676424191133491403">Хүлээхгүй</translation> <translation id="8680536109547170164"><ph name="QUERY" />, хариулт, <ph name="ANSWER" /></translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 993791d..ccaf19e 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">च्चक!</translation> <translation id="3041612393474885105">सर्टिफिकेट माहिती</translation> <translation id="3044034790304486808">तुमचे संशोधन पुन्हा सुरू करा</translation> +<translation id="305162504811187366">टाइमस्टॅंप, होस्ट आणि क्लायंट सेशन आयडी यांच्या समावेशासह Chrome रिमोट डेस्कटॉप इतिहास</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">पॅच सेवा</translation> <translation id="306573536155379004">गेमला सुरुवात झाली.</translation> @@ -1238,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{काहीही नाही}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> शोधा</translation> <translation id="4879491255372875719">आपोआप (डीफॉल्ट)</translation> -<translation id="4879725228911483934">तुमच्या स्क्रीनवर विंडो उघडा आणि ठेवा</translation> <translation id="4880827082731008257">इतिहास शोध</translation> <translation id="4881695831933465202">उघडा</translation> <translation id="4885256590493466218">चेकआउट करताना <ph name="CARD_DETAIL" /> वापरून पेमेंट करा</translation> @@ -1628,7 +1628,6 @@ <translation id="6169916984152623906">आता तुम्ही खाजगीरित्या ब्राउझ करू शकता आणि हे डिव्हाइस वापरणारे इतर लोक तुमचे क्रियाकलाप पाहू शकणार नाहीत. तथापि, डाउनलोड आणि बुकमार्क सेव्ह केले जातील.</translation> <translation id="6177128806592000436">या साइटवरील तुमचे कनेक्शन सुरक्षित नाही</translation> <translation id="6180316780098470077">दोन प्रयत्नांमधील मध्यांतर</translation> -<translation id="619448280891863779">तुमच्या स्क्रीनवर विंडो उघडण्याची आणि ठेवण्याची विनंती करू शकते</translation> <translation id="6196640612572343990">तृतीय-पक्ष कुकीज अवरोधित करा</translation> <translation id="6203231073485539293">तुमचे इंटरनेट कनेक्शन तपासा</translation> <translation id="6218753634732582820">Chromium वरून पत्ता काढून टाकायचा?</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index e31cc96..c1326c0 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">Oh, Tidak!</translation> <translation id="3041612393474885105">Maklumat Sijil</translation> <translation id="3044034790304486808">Sambung semula penyelidikan anda</translation> +<translation id="305162504811187366">Sejarah Desktop Jauh Chrome, termasuk cap masa, hos dan ID sesi pelanggan</translation> <translation id="3060227939791841287">C9 (Sampul Surat)</translation> <translation id="3061707000357573562">Perkhidmatan Tampung</translation> <translation id="306573536155379004">Permainan dimulakan.</translation> @@ -1240,7 +1241,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Tiada}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Carian <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatik (lalai)</translation> -<translation id="4879725228911483934">Buka dan letakkan tetingkap pada skrin anda</translation> <translation id="4880827082731008257">Sejarah carian</translation> <translation id="4881695831933465202">Buka</translation> <translation id="4885256590493466218">Buat bayaran menggunakan <ph name="CARD_DETAIL" /> semasa daftar keluar</translation> @@ -1629,7 +1629,6 @@ <translation id="6169916984152623906">Kini, anda boleh menyemak imbas secara sulit dan orang lain yang menggunakan peranti ini tidak akan melihat aktiviti anda. Namun begitu, muat turun dan penanda halaman akan disimpan.</translation> <translation id="6177128806592000436">Sambungan anda ke tapak ini tidak selamat</translation> <translation id="6180316780098470077">Selang cubaan semula</translation> -<translation id="619448280891863779">Boleh meminta untuk membuka dan meletakkan tetingkap pada skrin anda</translation> <translation id="6196640612572343990">Sekat kuki pihak ketiga</translation> <translation id="6203231073485539293">Semak sambungan Internet anda</translation> <translation id="6218753634732582820">Alih keluar alamat daripada Chromium?</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index 33425bd..51fb0ee 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -1241,7 +1241,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{မရှိ}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />၊ <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />၊ <ph name="EXAMPLE_DOMAIN_2" />၊ <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> ရှာဖွေမှု</translation> <translation id="4879491255372875719">အလိုအလျောက် (မူရင်း)</translation> -<translation id="4879725228911483934">သင့်ဖန်သားပြင်များတွင် ဝင်းဒိုးများ ဖွင့်ပြီး နေရာချထားခြင်း</translation> <translation id="4880827082731008257">ရှာဖွေမှု မှတ်တမ်း</translation> <translation id="4881695831933465202">ဖွင့်</translation> <translation id="4885256590493466218">ငွေရှင်းသည့်နေရာတွင် <ph name="CARD_DETAIL" /> ဖြင့် ပေးချေပါ</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">ယခုဆိုလျှင် ဝဘ်စာမျက်နှာများကို သင်တစ်ဦးတည်းသီးသန့် ဖွင့်ကြည့်နိုင်ပြီဖြစ်ပြီး ဤစက်ပစ္စည်းကို အသုံးပြုသော အခြားသူများက သင်၏လုပ်ဆောင်ချက်ကို မြင်နိုင်တော့မည်မဟုတ်ပါ။ သို့သော်လည်း ဒေါင်းလုဒ်လုပ်ထားသည့်အရာနှင့် လိပ်စာများကိုမူ သိမ်းဆည်ထားပါမည်။</translation> <translation id="6177128806592000436">ဤဝဘ်ဆိုက်သို့ သင်၏ချိတ်ဆက်ထားမှုသည် လုံခြုံမှုမရှိပါ</translation> <translation id="6180316780098470077">ပြန်စမ်းချိန် ကြားကာလ</translation> -<translation id="619448280891863779">သင့်ဖန်သားပြင်များတွင် ဝင်းဒိုးများ ဖွင့်ပြီး နေရာချထားရန် ခွင့်တောင်းနိုင်သည်</translation> <translation id="6196640612572343990">ပြင်ပကုမ္ပဏီကွတ်ကီးများကို ပိတ်ဆို့မည်</translation> <translation id="6203231073485539293">သင့်အင်တာနက် ချိတ်ဆက်မှုကို စစ်ပါ</translation> <translation id="6218753634732582820">Chromium ထဲမှ လိပ်စာကို ဖယ်ရှားရမလား။</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 27bb11c..f4a41040 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -1236,7 +1236,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{कुनै पनि होइन}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> को खोज</translation> <translation id="4879491255372875719">स्वचालित (डिफल्ट)</translation> -<translation id="4879725228911483934">तपाईंको स्क्रिनमा विन्डो राख्ने र त्यहाँ भएका विन्डो खोल्ने</translation> <translation id="4880827082731008257">खोज इतिहास</translation> <translation id="4881695831933465202">खोल्नुहोस्</translation> <translation id="4885256590493466218">चेकआउटका बेला <ph name="CARD_DETAIL" /> प्रयोग गरी भुक्तानी गर्नुहोस्</translation> @@ -1625,7 +1624,6 @@ <translation id="6169916984152623906">तपाईं अब निजी रूपमा ब्राउज गर्न सक्नुहुन्छ र यो डिभाइसको प्रयोग गर्ने अन्य व्यक्तिहरूले तपाईंको क्रियाकलाप देख्ने छैनन्। यद्यपि, तपाईंका डाउनलोड र बुकमार्कहरू सुरक्षित गरिनेछन्।</translation> <translation id="6177128806592000436">यस साइटमा तपाईँको जडान सुरक्षित छैन</translation> <translation id="6180316780098470077">पुन: प्रयास गर्न पाइने अन्तराल</translation> -<translation id="619448280891863779">तपाईंको डिभाइसका स्क्रिनहरूमा विन्डो राख्ने र त्यहाँ भएका विन्डो खोल्ने अनुमति माग्न सक्छ</translation> <translation id="6196640612572343990">तेस्रो पक्षीय कुकीहरूमाथि रोक लगाउनुहोस्</translation> <translation id="6203231073485539293">तपाइँको इन्टरनेट जडान जाँच्नुहोस्</translation> <translation id="6218753634732582820">Chromium बाट ठेगाना हटाउने हो?</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index a697bc61..269059e 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -1232,7 +1232,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Geen}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> zoeken</translation> <translation id="4879491255372875719">Automatisch (standaard)</translation> -<translation id="4879725228911483934">Vensters openen en plaatsen op je schermen</translation> <translation id="4880827082731008257">Geschiedenis doorzoeken</translation> <translation id="4881695831933465202">Openen</translation> <translation id="4885256590493466218">Bij het afrekenen betalen met <ph name="CARD_DETAIL" /></translation> @@ -1620,7 +1619,6 @@ <translation id="6169916984152623906">Je kunt nu privé browsen, zodat andere mensen die dit apparaat gebruiken, jouw activiteit niet kunnen zien. Downloads en bookmarks worden echter wel opgeslagen.</translation> <translation id="6177128806592000436">Je verbinding met deze site is niet beveiligd</translation> <translation id="6180316780098470077">Interval voor nieuwe poging</translation> -<translation id="619448280891863779">Kan vragen of deze site vensters op je schermen mag openen en plaatsen</translation> <translation id="6196640612572343990">Cookies van derden blokkeren</translation> <translation id="6203231073485539293">Controleer je internetverbinding</translation> <translation id="6218753634732582820">Adres verwijderen uit Chromium?</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 93dfa55..724b465 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">Æsj!</translation> <translation id="3041612393474885105">Sertifikatinformasjon</translation> <translation id="3044034790304486808">Fortsett undersøkelsene</translation> +<translation id="305162504811187366">loggen for Chrome Eksternt skrivebord, inkludert tidsstempler, verter og klientøkt-ID-er</translation> <translation id="3060227939791841287">C9 (konvolutt)</translation> <translation id="3061707000357573562">Feilrettingstjeneste</translation> <translation id="306573536155379004">Spillet er startet.</translation> @@ -1239,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ingen}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" />-søk</translation> <translation id="4879491255372875719">Automatisk (standard)</translation> -<translation id="4879725228911483934">åpne og plassere vinduer på skjermene dine</translation> <translation id="4880827082731008257">Søk i loggen</translation> <translation id="4881695831933465202">Åpne</translation> <translation id="4885256590493466218">Betal med <ph name="CARD_DETAIL" /> i kassen</translation> @@ -1628,7 +1628,6 @@ <translation id="6169916984152623906">Nå kan du surfe privat. Andre som bruker denne enheten, ser ikke aktiviteten din, men nedlastinger og bokmerker blir lagret.</translation> <translation id="6177128806592000436">Tilkoblingen til dette nettstedet er ikke sikker</translation> <translation id="6180316780098470077">Forsøksintervall</translation> -<translation id="619448280891863779">Kan be om å få åpne og plassere vinduer på skjermene dine</translation> <translation id="6196640612572343990">Blokkér informasjonskapsler fra tredjeparter</translation> <translation id="6203231073485539293">Kontrollér Internett-tilkoblingen</translation> <translation id="6218753634732582820">Vil du fjerne adressen fra Chromium?</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index 9ca183b..4ef6f33 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -1227,7 +1227,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{କିଛି ନାହିଁ}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> ସନ୍ଧାନ କରନ୍ତୁ</translation> <translation id="4879491255372875719">ସ୍ୱଚାଳିତ (ଡିଫଲ୍ଟ)</translation> -<translation id="4879725228911483934">ୱିଣ୍ଡୋଗୁଡ଼ିକ ଖୋଲି ଆପଣଙ୍କ ସ୍କ୍ରିନଗୁଡ଼ିକରେ ରଖନ୍ତୁ</translation> <translation id="4880827082731008257">ସନ୍ଧାନ ଇତିହାସ</translation> <translation id="4881695831933465202">ଖୋଲନ୍ତୁ</translation> <translation id="4885256590493466218">ଚେକଆଉଟ୍ କରିବା ସମୟରେ <ph name="CARD_DETAIL" /> ମାଧ୍ୟମରେ ପେମେଣ୍ଟ କରନ୍ତୁ</translation> @@ -1615,7 +1614,6 @@ <translation id="6169916984152623906">ଏବେ ଆପଣ ବ୍ୟକ୍ତିଗତ ଭାବେ ବ୍ରାଉଜ୍ କରିପାରିବେ ଏବଂ ଏହି ଡିଭାଇସ୍କୁ ବ୍ୟବହାର କରୁଥିବା ଅନ୍ୟ ଲୋକମାନେ ଆପଣଙ୍କର ଗତିବିଧି ଦେଖିପାରିବେ ନାହିଁ। ତେବେ, ଡାଉନ୍ଲୋଡ୍ ଓ ବୁକ୍ମାର୍କଗୁଡ଼ିକ ସେଭ୍ କରାଯିବ।</translation> <translation id="6177128806592000436">ଏହି ସାଇଟ୍ରେ ଆପଣଙ୍କର ସଂଯୋଗ ସୁରକ୍ଷିତ ନୁହେଁ</translation> <translation id="6180316780098470077">ପୁଣି ଚେଷ୍ଟା କରିବା ଇଣ୍ଟରଭାଲ୍</translation> -<translation id="619448280891863779">ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ଖୋଲି ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ସେଗୁଡ଼ିକ ରଖିବାକୁ ସାଇଟ୍ ପଚାରିପାରେ</translation> <translation id="6196640612572343990">ତୃତୀୟ ପକ୍ଷ କୁକୀଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="6203231073485539293">ଆପଣଙ୍କର ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗକୁ ଯାଞ୍ଚ କରନ୍ତୁ</translation> <translation id="6218753634732582820">Chromiumରୁ ଠିକଣା କାଢ଼ି ଦେବେ?</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index b5e1d57..96f3ea3 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">ਆਹ, ਸਨੈਪ!</translation> <translation id="3041612393474885105">ਪ੍ਰਮਾਣ-ਪੱਤਰ ਬਾਰੇ ਜਾਣਕਾਰੀ</translation> <translation id="3044034790304486808">ਆਪਣੀ ਖੋਜ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ</translation> +<translation id="305162504811187366">ਟਾਈਮਸਟੈਂਪਾਂ, ਹੋਸਟਾਂ ਅਤੇ ਕਲਾਇੰਟ ਸੈਸ਼ਨ ਆਈਡੀਆਂ ਸਮੇਤ, Chrome ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਦਾ ਇਤਿਹਾਸ</translation> <translation id="3060227939791841287">C9 (ਲਿਫ਼ਾਫ਼ਾ)</translation> <translation id="3061707000357573562">ਪੈਚ ਸੇਵਾ</translation> <translation id="306573536155379004">ਗੇਮ ਸ਼ੁਰੂ ਕੀਤੀ ਗਈ।</translation> @@ -1227,7 +1228,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{ਕੋਈ ਨਹੀਂ}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> ਖੋਜ</translation> <translation id="4879491255372875719">ਸਵੈਚਲਿਤ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)</translation> -<translation id="4879725228911483934">ਆਪਣੀਆਂ ਸਕ੍ਰੀਨਾਂ 'ਤੇ ਵਿੰਡੋ ਖੋਲ੍ਹੋ ਅਤੇ ਉਸਨੂੰ ਰੱਖੋ</translation> <translation id="4880827082731008257">ਖੋਜ ਇਤਿਹਾਸ</translation> <translation id="4881695831933465202">ਖੋਲ੍ਹੋ</translation> <translation id="4885256590493466218">ਚੈੱਕਆਊਟ ਕਰਨ ਵੇਲੇ <ph name="CARD_DETAIL" /> ਨਾਲ ਭੁਗਤਾਨ ਕਰੋ</translation> @@ -1615,7 +1615,6 @@ <translation id="6169916984152623906">ਹੁਣ ਤੁਸੀਂ ਨਿੱਜੀ ਤੌਰ 'ਤੇ ਬ੍ਰਾਊਜ਼ ਕਰ ਸਕਦੇ ਹੋ, ਅਤੇ ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਵਰਤਣ ਵਾਲੇ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਤੁਹਾਡੀ ਸਰਗਰਮੀ ਨਹੀਂ ਦਿਖਾਈ ਦੇਵੇਗੀ। ਹਾਲਾਂਕਿ, ਡਾਊਨਲੋਡ ਅਤੇ ਬੁੱਕਮਾਰਕ ਰੱਖਿਅਤ ਕੀਤੇ ਜਾਣਗੇ।</translation> <translation id="6177128806592000436">ਇਸ ਸਾਈਟ ਨਾਲ ਤੁਹਾਡਾ ਕਨੈਕਸ਼ਨ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹੈ</translation> <translation id="6180316780098470077">ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਅੰਤਰਾਲ</translation> -<translation id="619448280891863779">ਸਾਈਟ ਤੁਹਾਡੀਆਂ ਸਕ੍ਰੀਨਾਂ 'ਤੇ ਵਿੰਡੋ ਨੂੰ ਖੋਲ੍ਹਣ ਅਤੇ ਉਸਨੂੰ ਰੱਖਣ ਲਈ ਪੁੱਛ ਸਕਦੀ ਹੈ</translation> <translation id="6196640612572343990">ਤੀਜੀ-ਧਿਰ ਵਾਲੀਆਂ ਕੁੱਕੀਜ਼ ਨੂੰ ਬਲੌਕ ਕਰੋ</translation> <translation id="6203231073485539293">ਆਪਣੇ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ</translation> <translation id="6218753634732582820">ਕੀ Chromium ਤੋਂ ਪਤਾ ਮਿਟਾਉਣਾ ਹੈ?</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index decc361..2ed298a 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -1231,7 +1231,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Brak}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}many{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Wyszukiwanie ciągu <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatycznie (domyślnie)</translation> -<translation id="4879725228911483934">Otwierać i rozmieszczać okna na Twoich ekranach.</translation> <translation id="4880827082731008257">Przeszukaj historię</translation> <translation id="4881695831933465202">Otwórz</translation> <translation id="4885256590493466218">Zapłać kartą <ph name="CARD_DETAIL" /></translation> @@ -1620,7 +1619,6 @@ <translation id="6169916984152623906">Teraz możesz korzystać z internetu w trybie prywatnym. Inne osoby używające tego urządzenia nie zobaczą Twojej aktywności. Pamiętaj tylko, że zakładki i pobrane pliki są zapisywane.</translation> <translation id="6177128806592000436">Twoje połączenie z tą witryną nie jest bezpieczne</translation> <translation id="6180316780098470077">Interwał ponawiania</translation> -<translation id="619448280891863779">Może prosić o zgodę na otwieranie i rozmieszczanie okien na Twoich ekranach</translation> <translation id="6196640612572343990">Blokuj pliki cookie innych firm</translation> <translation id="6203231073485539293">Sprawdź połączenie z internetem</translation> <translation id="6218753634732582820">Usunąć ten adres z Chromium?</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index edd7b85..d6eb3c8 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -1231,7 +1231,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Nenhuma}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Pesquisa sobre <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automático (padrão)</translation> -<translation id="4879725228911483934">abrir e posicionar janelas nas suas telas.</translation> <translation id="4880827082731008257">Histórico de pesquisa</translation> <translation id="4881695831933465202">Abrir</translation> <translation id="4885256590493466218">Pague com <ph name="CARD_DETAIL" /> na finalização da compra</translation> @@ -1620,7 +1619,6 @@ <translation id="6169916984152623906">Agora você pode navegar com privacidade. Outras pessoas que usarem este dispositivo não verão sua atividade, mas os downloads e favoritos serão salvos.</translation> <translation id="6177128806592000436">Sua conexão com esse site não é segura</translation> <translation id="6180316780098470077">Intervalo entre novas tentativas</translation> -<translation id="619448280891863779">Pode pedir para abrir e posicionar janelas nas suas telas</translation> <translation id="6196640612572343990">Bloquear cookies de terceiros</translation> <translation id="6203231073485539293">Verifique sua conexão com a Internet</translation> <translation id="6218753634732582820">Remover endereço do Chromium?</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index eb4c40cf..6f426e35 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Nenhuma}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Pesquisa de <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automático (predefinição)</translation> -<translation id="4879725228911483934">Abrir e colocar janelas nos seus ecrãs</translation> <translation id="4880827082731008257">Pesquisar histórico</translation> <translation id="4881695831933465202">Abrir</translation> <translation id="4885256590493466218">Utilize o <ph name="CARD_DETAIL" /> no pagamento.</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Agora, pode navegar em privado e as outras pessoas que utilizarem este dispositivo não veem a sua atividade. No entanto, as transferências e os marcadores são guardados.</translation> <translation id="6177128806592000436">A sua ligação a este site não é segura</translation> <translation id="6180316780098470077">Intervalo entre tentativas</translation> -<translation id="619448280891863779">Pode solicitar a abertura e colocação de janelas nos seus ecrãs</translation> <translation id="6196640612572343990">Bloquear cookies de terceiros</translation> <translation id="6203231073485539293">Verificar a ligação à Internet</translation> <translation id="6218753634732582820">Remover o endereço do Chromium?</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index 2d3e5958..609e161 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Niciuna}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Căutare <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automat (prestabilit)</translation> -<translation id="4879725228911483934">să deschidă și să plaseze ferestre în ecrane.</translation> <translation id="4880827082731008257">Caută în istoric</translation> <translation id="4881695831933465202">Deschide</translation> <translation id="4885256590493466218">Plătești cu <ph name="CARD_DETAIL" /> la finalizarea achiziției</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Acum poți naviga în mod privat, iar celelalte persoane care folosesc acest dispozitiv nu îți vor vedea activitatea. Cu toate acestea, descărcările și marcajele vor fi salvate.</translation> <translation id="6177128806592000436">Conexiunea la acest site nu este sigură</translation> <translation id="6180316780098470077">Intervalul de reîncercare</translation> -<translation id="619448280891863779">Poate solicita permisiunea să deschidă și să plaseze ferestre în ecrane</translation> <translation id="6196640612572343990">Blochează cookie-urile terță parte</translation> <translation id="6203231073485539293">Verificați conexiunea la internet</translation> <translation id="6218753634732582820">Elimini adresa din Chromium?</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 97dca96f..bad5102 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">Опаньки...</translation> <translation id="3041612393474885105">Данные сертификата</translation> <translation id="3044034790304486808">Продолжить поиск в истории</translation> +<translation id="305162504811187366">историю Удаленного рабочего стола Chrome, в том числе временные метки, хосты и идентификаторы сеансов клиентов.</translation> <translation id="3060227939791841287">C9 (конверт)</translation> <translation id="3061707000357573562">Исправление сервиса</translation> <translation id="306573536155379004">Игра началась.</translation> @@ -1229,7 +1230,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Нет}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" /> и <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}many{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Поиск по запросу "<ph name="TEXT" />"</translation> <translation id="4879491255372875719">Автоматически (по умолчанию)</translation> -<translation id="4879725228911483934">Открытие и размещение окон на экранах.</translation> <translation id="4880827082731008257">Искать в истории</translation> <translation id="4881695831933465202">Открыть</translation> <translation id="4885256590493466218">Оплатите с помощью <ph name="CARD_DETAIL" /></translation> @@ -1618,7 +1618,6 @@ <translation id="6169916984152623906">Ваши действия в режиме инкогнито будут недоступны другим пользователям этого устройства. Однако закладки и скачанные файлы сохранятся.</translation> <translation id="6177128806592000436">Подключение к сайту не защищено</translation> <translation id="6180316780098470077">Интервал повтора</translation> -<translation id="619448280891863779">Разрешено отправлять запрос на открытие и размещение окон на экранах</translation> <translation id="6196640612572343990">Блокировать сторонние файлы cookie</translation> <translation id="6203231073485539293">Проверьте подключение к Интернету</translation> <translation id="6218753634732582820">Удалить адрес из Chromium?</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb index 7d82c69..9e2e273 100644 --- a/components/strings/components_strings_si.xtb +++ b/components/strings/components_strings_si.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">අනේ, අපොයි!</translation> <translation id="3041612393474885105">සහතික තොරතුරු</translation> <translation id="3044034790304486808">ඔබගේ පර්යේෂණය නැවත පටන් ගන්න</translation> +<translation id="305162504811187366">වේලා මුද්රා, සංග්රාහක සහ සේවාලාභී සැසි ID ඇතුළුව, Chrome දුරස්ථ ඩෙස්ක්ටොප් ඉතිහාසය</translation> <translation id="3060227939791841287">C9 (ලියුම් කවරය)</translation> <translation id="3061707000357573562">පැච් සේවාව</translation> <translation id="306573536155379004">ක්රීඩාව ඇරඹිණි.</translation> @@ -1236,7 +1237,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{කිසිවක් නැත}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> සෙවීම</translation> <translation id="4879491255372875719">ස්වයංක්රිය (පෙරනිමි)</translation> -<translation id="4879725228911483934">ඔබේ තිරය මත කවුළු විවෘත කරන්න සහ තබන්න</translation> <translation id="4880827082731008257">ඉතිහාසය සොයන්න</translation> <translation id="4881695831933465202">විවෘත කරන්න</translation> <translation id="4885256590493466218">ගෙවීමේදී <ph name="CARD_DETAIL" /> සමගින් ගෙවන්න</translation> @@ -1625,7 +1625,6 @@ <translation id="6169916984152623906">දැන් ඔබට පෞද්ගලිකව බ්රවුස් කළ හැකි අතර, මෙම උපාංගය භාවිතා කරන වෙනත් පුද්ගලයින් ඔබේ ක්රියාකාරකම් නොදකිනු ඇත. කෙසේ වෙතත්, බාගැනීම් සහ පිටුසන් සුරැකෙනු ඇත.</translation> <translation id="6177128806592000436">මෙම අඩවිය වෙත ඔබගේ සම්බන්ධතාවය සුරක්ෂිත නොවේ</translation> <translation id="6180316780098470077">යළි උත්සාහ කිරීමේ විරාමය</translation> -<translation id="619448280891863779">ඔබගේ තිර මත කවුළු විවෘත කිරීමට සහ තැබීමට අවශ්ය වූ විට අසන්න</translation> <translation id="6196640612572343990">තෙවන-පාර්ශ්ව කුකී අවහිර කරන්න</translation> <translation id="6203231073485539293">ඔබගේ අන්තර්ජාල සබැඳුම පරික්ෂා කරන්න</translation> <translation id="6218753634732582820">Chromium වෙතින් ලිපිනය ඉවත් කරන්නද?</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index f31498a..2eba971 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">Aj, chyba!</translation> <translation id="3041612393474885105">Informácie o certifikáte</translation> <translation id="3044034790304486808">Pokračovať v prieskume</translation> +<translation id="305162504811187366">História Vzdialenej plochy Chromu vrátane časových pečiatok a identifikátorov relácií hostiteľov a klientov</translation> <translation id="3060227939791841287">C9 (obálka)</translation> <translation id="3061707000357573562">Služba opráv</translation> <translation id="306573536155379004">Hra bola spustená.</translation> @@ -1226,7 +1227,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Žiadna}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}many{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Vyhľadávanie <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatické (predvolené)</translation> -<translation id="4879725228911483934">otvárať a umiestňovať okná na vaše obrazovky</translation> <translation id="4880827082731008257">Hľadať v histórii</translation> <translation id="4881695831933465202">Otvoriť</translation> <translation id="4885256590493466218">Zaplaťte za nákup kartou <ph name="CARD_DETAIL" /></translation> @@ -1614,7 +1614,6 @@ <translation id="6169916984152623906">Teraz môžete prehliadať internet v súkromí a ostatní používatelia tohto zariadenia vašu aktivitu neuvidia. Stiahnuté súbory a záložky však budú uložené.</translation> <translation id="6177128806592000436">Spojenie s týmto webom nie je zabezpečené</translation> <translation id="6180316780098470077">Interval opakovania pokusov</translation> -<translation id="619448280891863779">Môže žiadať o povolenie otvárať a umiestňovať okná na vaše obrazovky</translation> <translation id="6196640612572343990">Blokovať súbory cookie tretích strán</translation> <translation id="6203231073485539293">Skontrolujte internetové pripojenie</translation> <translation id="6218753634732582820">Chcete adresu odstrániť z prehliadača Chromium?</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index a8f26fc0..e85f598d 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -1239,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Nič}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}two{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Iskanje poizvedbe <ph name="TEXT" /></translation> <translation id="4879491255372875719">Samodejno (privzeto)</translation> -<translation id="4879725228911483934">Odpiranje in postavitev oken na zaslonih</translation> <translation id="4880827082731008257">Zgodovina iskanja</translation> <translation id="4881695831933465202">Odpri</translation> <translation id="4885256590493466218">Plačajte s kartico <ph name="CARD_DETAIL" /> pri dokončanju nakupa.</translation> @@ -1628,7 +1627,6 @@ <translation id="6169916984152623906">Zdaj je mogoče brskati zasebno in drugi, ki uporabljajo to napravo, ne bodo videli vaše dejavnosti. Prenosi in zaznamki bodo vseeno shranjeni.</translation> <translation id="6177128806592000436">Povezava s tem spletnim mestom ni varna</translation> <translation id="6180316780098470077">Interval vnovičnih poskusov</translation> -<translation id="619448280891863779">Lahko zahteva odpiranje in postavite oken na zaslonih.</translation> <translation id="6196640612572343990">Blokiraj piškotke drugih spletnih mest</translation> <translation id="6203231073485539293">Preverite internetno povezavo</translation> <translation id="6218753634732582820">Želite naslov odstraniti iz Chromiuma?</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index cf39a28..ac779181 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -1236,7 +1236,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Asnjë}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Kërko për <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatike (e parazgjedhur)</translation> -<translation id="4879725228911483934">Hap dhe vendos dritare në ekranet e tua</translation> <translation id="4880827082731008257">Historiku i kërkimeve</translation> <translation id="4881695831933465202">Hap</translation> <translation id="4885256590493466218">Paguaj me <ph name="CARD_DETAIL" /> në përfundim të blerjes</translation> @@ -1624,7 +1623,6 @@ <translation id="6169916984152623906">Tani mund të shfletosh në mënyrë private dhe personat e tjerë që përdorin këtë pajisje nuk do të shikojnë aktivitetin tënd. Sidoqoftë, shkarkimet dhe faqeshënuesit do të ruhen.</translation> <translation id="6177128806592000436">Lidhja jote me këtë sajt nuk është e sigurt</translation> <translation id="6180316780098470077">Intervali i ripërpjekjes</translation> -<translation id="619448280891863779">Mund të kërkojë të hapë dhe të vendosë dritare në ekranet e tua</translation> <translation id="6196640612572343990">Blloko kukit e palëve të treta</translation> <translation id="6203231073485539293">Kontrollo lidhjen e internetit.</translation> <translation id="6218753634732582820">Të hiqet adresa nga Chromium?</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index dcd07e6..a90db98 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Nijedna}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Pretraga <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatski (podrazumevano)</translation> -<translation id="4879725228911483934">da otvara i postavlja prozore na ekrane</translation> <translation id="4880827082731008257">Pretraži istoriju</translation> <translation id="4881695831933465202">Otvori</translation> <translation id="4885256590493466218">Plaćajte pomoću kartice <ph name="CARD_DETAIL" /></translation> @@ -1628,7 +1627,6 @@ <translation id="6169916984152623906">Sada možete da pregledate privatno i drugi ljudi koji koriste ovaj uređaj neće videti vaše aktivnosti. Međutim, preuzimanja i obeleživači će biti sačuvani.</translation> <translation id="6177128806592000436">Veza sa ovim sajtom nije bezbedna</translation> <translation id="6180316780098470077">Interval između ponovnih pokušaja</translation> -<translation id="619448280891863779">Može da traži da otvara i postavlja prozore na ekranima</translation> <translation id="6196640612572343990">Blokiraj kolačiće treće strane</translation> <translation id="6203231073485539293">Proverite internet vezu</translation> <translation id="6218753634732582820">Želite li da uklonite adresu iz Chromium-a?</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index f3c0c1d..8a69efe 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Ниједна}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Претрага <ph name="TEXT" /></translation> <translation id="4879491255372875719">Аутоматски (подразумевано)</translation> -<translation id="4879725228911483934">да отвара и поставља прозоре на екране</translation> <translation id="4880827082731008257">Претражи историју</translation> <translation id="4881695831933465202">Отвори</translation> <translation id="4885256590493466218">Плаћајте помоћу картице <ph name="CARD_DETAIL" /></translation> @@ -1628,7 +1627,6 @@ <translation id="6169916984152623906">Сада можете да прегледате приватно и други људи који користе овај уређај неће видети ваше активности. Међутим, преузимања и обележивачи ће бити сачувани.</translation> <translation id="6177128806592000436">Веза са овим сајтом није безбедна</translation> <translation id="6180316780098470077">Интервал између поновних покушаја</translation> -<translation id="619448280891863779">Може да тражи да отвара и поставља прозоре на екранима</translation> <translation id="6196640612572343990">Блокирај колачиће треће стране</translation> <translation id="6203231073485539293">Проверите интернет везу</translation> <translation id="6218753634732582820">Желите ли да уклоните адресу из Chromium-а?</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index e2a38c3..565703ee 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -1240,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Inga}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Sök på <ph name="TEXT" /></translation> <translation id="4879491255372875719">Automatiskt (standard)</translation> -<translation id="4879725228911483934">Öppna fönster och placera ut dem på skärmen</translation> <translation id="4880827082731008257">Sök i historiken</translation> <translation id="4881695831933465202">Öppna</translation> <translation id="4885256590493466218">Betala med <ph name="CARD_DETAIL" /> i kassan</translation> @@ -1629,7 +1628,6 @@ <translation id="6169916984152623906">Nu kan du surfa privat. Din aktivitet visas inte för andra som använder enheten, men nedladdningar och bokmärken sparas.</translation> <translation id="6177128806592000436">Anslutningen till webbplatsen är inte säker</translation> <translation id="6180316780098470077">Intervall för nytt försök</translation> -<translation id="619448280891863779">Får begära tillstånd att öppna fönster och placera ut dem på skärmen</translation> <translation id="6196640612572343990">Blockera cookies från tredje part</translation> <translation id="6203231073485539293">Kontrollera internetanslutningen</translation> <translation id="6218753634732582820">Vill du ta bort adressen från Chromium?</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index d42096e..4384bac 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -644,6 +644,7 @@ <translation id="3037605927509011580">Lo!</translation> <translation id="3041612393474885105">Maelezo ya Cheti</translation> <translation id="3044034790304486808">Endelea na utafiti wako</translation> +<translation id="305162504811187366">Historia ya Programu ya Chrome ya Ufikiaji wa Kompyuta kutoka Mbali, ikiwa ni pamoja na mihuri ya wakati, seva pangishi na vitambulisho vya vipindi vya programu teja</translation> <translation id="3060227939791841287">C9 (Bahasha)</translation> <translation id="3061707000357573562">Huduma ya Kurekebisha</translation> <translation id="306573536155379004">Mchezo umeanza.</translation> @@ -1238,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Hamna}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Tafuta <ph name="TEXT" /></translation> <translation id="4879491255372875719">Kiotomatiki (chaguomsingi)</translation> -<translation id="4879725228911483934">Fungua na uonyeshe madirisha kwenye skrini zako</translation> <translation id="4880827082731008257">Tafuta katika historia</translation> <translation id="4881695831933465202">Fungua</translation> <translation id="4885256590493466218">Tumia <ph name="CARD_DETAIL" /> wakati wa kulipa</translation> @@ -1627,7 +1627,6 @@ <translation id="6169916984152623906">Sasa unaweza kuvinjari kwa faragha na watu wengine wanaotumia kifaa hiki hawataona shughuli zako. Hata hivyo, vipakuliwa na alamisho zitahifadhiwa.</translation> <translation id="6177128806592000436">Muunganisho wako kwenye tovuti hii si salama</translation> <translation id="6180316780098470077">Kipindi cha mara unazojaribu</translation> -<translation id="619448280891863779">Inaweza kuomba ruhusa ya kufungua na kuweka madirisha kwenye skrini zako</translation> <translation id="6196640612572343990">Zuia vidakuzi vya tovuti nyingine</translation> <translation id="6203231073485539293">Angalia muunganisho wako wa Intaneti</translation> <translation id="6218753634732582820">Je, ungependa kuondoa anwani kwenye Chromium?</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 3429107..171163cb 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">அச்சச்சோ!</translation> <translation id="3041612393474885105">சான்றிதழ் தகவல்</translation> <translation id="3044034790304486808">உலாவலைத் தொடர்க</translation> +<translation id="305162504811187366">நேர முத்திரைகள், ஹோஸ்ட்டுகள், கிளையண்ட் அமர்வு ஐடிகள் உட்பட இதுவரையிலான Chrome தொலைநிலை டெஸ்க்டாப் நிகழ்வுகள்</translation> <translation id="3060227939791841287">C9 (என்வலப்)</translation> <translation id="3061707000357573562">பேட்ச் சேவை</translation> <translation id="306573536155379004">கேம் தொடங்கியது.</translation> @@ -1235,7 +1236,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{எதுவுமில்லை}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">'<ph name="TEXT" />’ குறித்த தேடல்</translation> <translation id="4879491255372875719">தானியங்கு (இயல்பு)</translation> -<translation id="4879725228911483934">உங்கள் திரைகளில் சாளரங்களைத் திறந்து வைக்க</translation> <translation id="4880827082731008257">தேடல் வரலாறு</translation> <translation id="4881695831933465202">திற</translation> <translation id="4885256590493466218">செக்-அவுட்டின்போது <ph name="CARD_DETAIL" /> கார்டு மூலம் பணம் செலுத்தலாம்</translation> @@ -1623,7 +1623,6 @@ <translation id="6169916984152623906">இப்போது தனிப்பட்ட முறையில் உலாவலாம். இந்தச் சாதனத்தைப் பயன்படுத்தும் பிறரால் உங்கள் செயல்பாட்டைப் பார்க்க முடியாது. எனினும், பதிவிறக்கங்களும் புத்தகக்குறிகளும் சேமிக்கப்படும்.</translation> <translation id="6177128806592000436">இந்தத் தளத்திற்கான உங்கள் இணைப்பு, பாதுகாப்பாக இல்லை</translation> <translation id="6180316780098470077">மீண்டும் முயல்வதற்கான இடைவெளி</translation> -<translation id="619448280891863779">எனது திரைகளில் சாளரங்களைத் திறந்து வைக்க அனுமதி கேட்க வேண்டும்</translation> <translation id="6196640612572343990">மூன்றாம் தரப்புக் குக்கீகளைத் தடு</translation> <translation id="6203231073485539293">உங்கள் இணைய இணைப்பைச் சரிபார்க்கவும்</translation> <translation id="6218753634732582820">Chromium இலிருந்து முகவரியை அகற்றவா?</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 9b00d85..94bef816 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -370,7 +370,7 @@ <translation id="2079545284768500474">చర్య రద్దు</translation> <translation id="20817612488360358">సిస్టమ్ ప్రాక్సీ సెట్టింగ్లు ఉపయోగించడానికి సెట్ చేయబడ్డాయి కానీ స్పష్టమైన ప్రాక్సీ కాన్ఫిగరేషన్ కూడా పేర్కొనబడింది.</translation> <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" />లో <ph name="RESULT_NUMBER" />వ ఫలితం</translation> -<translation id="2085876078937250610">సేవ్ చేయి…</translation> +<translation id="2085876078937250610">సేవ్ చేయండి…</translation> <translation id="2088086323192747268">'సింక్ను మేనేజ్ చేయి' బటన్, Chrome సెట్టింగ్లలో మీరు ఏ సమాచారాన్ని సింక్ చేయాలనుకుంటున్నారో మేనేజ్ చేయడానికి 'Enter'ను నొక్కండి</translation> <translation id="2091887806945687916">ధ్వని</translation> <translation id="2094505752054353250">డొమైన్ సరిపోలలేదు</translation> @@ -1242,7 +1242,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{ఏవీ లేవు}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> శోధన</translation> <translation id="4879491255372875719">ఆటోమేటిక్ (డిఫాల్ట్)</translation> -<translation id="4879725228911483934">విండోలను తెరిచి, మీ స్క్రీన్లపై ఉంచండి</translation> <translation id="4880827082731008257">శోధన చరిత్ర</translation> <translation id="4881695831933465202">తెరువు</translation> <translation id="4885256590493466218">చెక్అవుట్లో <ph name="CARD_DETAIL" />తో పేమెంట్ చేయండి</translation> @@ -1250,7 +1249,7 @@ <translation id="4892518386797173871">వెనుక భాగం</translation> <translation id="4895877746940133817"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /></translation> <translation id="4900217275619098670">నైన్త్ రోల్</translation> -<translation id="4901778704868714008">సేవ్ చేయి...</translation> +<translation id="4901778704868714008">సేవ్ చేయండి...</translation> <translation id="4913987521957242411">ఎడమవైపు ఎగువ భాగంలో రంధ్రాలు</translation> <translation id="4918221908152712722"><ph name="APP_NAME" />ను ఇన్స్టాల్ చేయండి (డౌన్లోడ్ చేయాల్సిన అవసరం లేదు)</translation> <translation id="4923459931733593730">చెల్లింపు</translation> @@ -1390,7 +1389,7 @@ <translation id="5308689395849655368">క్రాష్ రిపోర్ట్ నిలిపివేయబడింది.</translation> <translation id="5314967030527622926">బుక్లెట్ తయారీ దారు</translation> <translation id="5316812925700871227">అపసవ్య దిశలో తిప్పు</translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="NUM_MATCHES" />లో <ph name="MATCH_POSITION" /></translation> <translation id="5324080437450482387">సంప్రదింపు సమాచారాన్ని ఎంచుకోండి</translation> <translation id="5329858041417644019">మీ బ్రౌజర్ నిర్వహించబడటం లేదు</translation> @@ -1631,7 +1630,6 @@ <translation id="6169916984152623906">ఇప్పుడు మీరు వ్యక్తిగతంగా బ్రౌజ్ చేయవచ్చు మరియు ఈ పరికరాన్ని ఉపయోగించే ఇతర వ్యక్తులకు మీ కార్యకలాపం కనిపించదు. అయినప్పటికీ, డౌన్లోడ్లు మరియు బుక్మార్క్లు సేవ్ చేయబడతాయి.</translation> <translation id="6177128806592000436">ఈ సైట్తో మీకున్న కనెక్షన్ సురక్షితంగా లేదు</translation> <translation id="6180316780098470077">పునఃప్రయత్నాల మధ్య విరామం</translation> -<translation id="619448280891863779">మీ స్క్రీన్లలో విండోలను తెరిచి, ఉంచడానికి సైట్ అనుమతి అడగవచ్చు</translation> <translation id="6196640612572343990">థర్డ్ పార్టీ కుక్కీలను బ్లాక్ చేయండి</translation> <translation id="6203231073485539293">మీ ఇంటర్నెట్ కనెక్షన్ను తనిఖీ చేయండి</translation> <translation id="6218753634732582820">Chromium నుండి అడ్రస్ను తీసివేయాలా?</translation> @@ -2070,7 +2068,7 @@ <translation id="7653957176542370971">చెల్లింపు హ్యాండ్లర్ షీట్ మూసివేయబడింది</translation> <translation id="7654909834015434372">మీరు అదనపు గమనికలను ఎడిట్ చేసినప్పుడు, ఈ డాక్యుమెంట్, దాని ఒరిజినల్ రొటేషన్కు తిరిగి వస్తుంది</translation> <translation id="765676359832457558">అధునాతన సెట్టింగ్లను దాచు...</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7659878911471462949">ఆనంద భాష్పాలు</translation> <translation id="7662298039739062396">ఎక్స్టెన్షన్ ద్వారా సెట్టింగ్ నియంత్రించబడుతోంది</translation> <translation id="7663736086183791259">సర్టిఫికెట్ <ph name="CERTIFICATE_VALIDITY" /></translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index 524b37e3..45345e37 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -1230,7 +1230,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{ไม่มี}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">การค้นหา <ph name="TEXT" /></translation> <translation id="4879491255372875719">อัตโนมัติ (ค่าเริ่มต้น)</translation> -<translation id="4879725228911483934">เปิดและแสดงหน้าต่างบนหน้าจอของคุณ</translation> <translation id="4880827082731008257">ค้นประวัติการเข้าชม</translation> <translation id="4881695831933465202">เปิด</translation> <translation id="4885256590493466218">ชำระเงินด้วย <ph name="CARD_DETAIL" /> ที่จุดชำระเงิน</translation> @@ -1619,7 +1618,6 @@ <translation id="6169916984152623906">ขณะนี้คุณสามารถท่องเว็บแบบเป็นส่วนตัว และผู้อื่นที่ใช้อุปกรณ์เครื่องนี้จะไม่เห็นกิจกรรมของคุณ แต่จะมีการบันทึกการดาวน์โหลดและบุ๊กมาร์กไว้</translation> <translation id="6177128806592000436">การเชื่อมต่อกับเว็บไซต์นี้ไม่ปลอดภัย</translation> <translation id="6180316780098470077">ช่วงเว้นระหว่างการลองใหม่แต่ละครั้ง</translation> -<translation id="619448280891863779">สามารถขอเปิดและวางหน้าต่างบนหน้าจอ</translation> <translation id="6196640612572343990">บล็อกคุกกี้ของบุคคลที่สาม</translation> <translation id="6203231073485539293">ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation> <translation id="6218753634732582820">ต้องการนำที่อยู่ออกจาก Chromium ใช่ไหม</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index d27a518..261835d 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -642,6 +642,7 @@ <translation id="3037605927509011580">Hay aksi!</translation> <translation id="3041612393474885105">Sertifika Bilgileri</translation> <translation id="3044034790304486808">Araştırmanızı devam ettirin</translation> +<translation id="305162504811187366">Zaman damgaları, ana makine ve istemci oturum kimlikleri dahil olmak üzere Chrome Uzaktan Masaüstü geçmişi</translation> <translation id="3060227939791841287">C9 (Zarf)</translation> <translation id="3061707000357573562">Yama Hizmeti</translation> <translation id="306573536155379004">Oyun başladı.</translation> @@ -1232,7 +1233,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Yok}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> araması</translation> <translation id="4879491255372875719">Otomatik (varsayılan)</translation> -<translation id="4879725228911483934">Ekranlarınızda pencereler açıp yerleştirme</translation> <translation id="4880827082731008257">Geçmişte ara</translation> <translation id="4881695831933465202">Aç</translation> <translation id="4885256590493466218">Ödeme sırasında <ph name="CARD_DETAIL" /> ile ödeyin</translation> @@ -1621,7 +1621,6 @@ <translation id="6169916984152623906">Artık gizli olarak göz atabilirsiniz ve bu cihazı kullanan diğer kişiler etkinliğinizi görmez. Yine de indirdikleriniz ve yer işaretleri kaydedilir.</translation> <translation id="6177128806592000436">Bu siteye bağlantınız güvenli değil</translation> <translation id="6180316780098470077">Deneme aralığı</translation> -<translation id="619448280891863779">Ekranlarınızda pencereler açıp yerleştirmek isteyebilir</translation> <translation id="6196640612572343990">Üçüncü taraf çerezlerini engelle</translation> <translation id="6203231073485539293">İnternet bağlantınızı kontrol edin</translation> <translation id="6218753634732582820">Adres Chromium'dan kaldırılsın mı?</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 7ebcbf5..0496d56 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -1239,7 +1239,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Немає}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}few{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}many{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Пошук за запитом "<ph name="TEXT" />"</translation> <translation id="4879491255372875719">Автоматично (за умовчанням)</translation> -<translation id="4879725228911483934">Відкривати й розміщувати вікна на ваших екранах</translation> <translation id="4880827082731008257">Пошук в історії</translation> <translation id="4881695831933465202">Відкрити</translation> <translation id="4885256590493466218">Оплатіть за допомогою <ph name="CARD_DETAIL" /></translation> @@ -1628,7 +1627,6 @@ <translation id="6169916984152623906">Тепер ви можете переглядати вміст анонімно. Інші користувачі вашого пристрою не бачитимуть дані про вашу активність. Однак завантаження та закладки зберігатимуться.</translation> <translation id="6177128806592000436">Ваше з’єднання з цим сайтом не захищене</translation> <translation id="6180316780098470077">Інтервал між повторними спробами</translation> -<translation id="619448280891863779">Може просити дозвіл відкривати й розміщувати вікна на ваших екранах</translation> <translation id="6196640612572343990">Блокувати сторонні файли cookie</translation> <translation id="6203231073485539293">Перевірте з’єднання з Інтернетом</translation> <translation id="6218753634732582820">Видалити адресу з Chromium?</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index 2cb6c0cc..7dd3caf 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -526,6 +526,7 @@ <translation id="2609632851001447353">تغیرات</translation> <translation id="2610561535971892504">کلک کر کے کاپی کریں</translation> <translation id="2618023639789766142">C10 (Envelope)</translation> +<translation id="2623663032199728144">آپ کی اسکرینز کے بارے میں معلومات کا استعمال کرنے کے لیے پوچھ سکتی ہیں</translation> <translation id="2625385379895617796">آپ کی گھڑی آگے ہے</translation> <translation id="262745152991669301">سائٹ USB آلات سے منسلک ہونے کیلئے پوچھ سکتی ہے</translation> <translation id="2629325967560697240">Chrome کی اعلی ترین سیکیورٹی حاصل کرنے کے لیے <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />بہتر کردہ حفاظت کو آن کریں<ph name="END_ENHANCED_PROTECTION_LINK" /></translation> @@ -645,6 +646,7 @@ <translation id="3037605927509011580">ارے، رکیں!</translation> <translation id="3041612393474885105">سرٹیفکیٹ کی معلومات</translation> <translation id="3044034790304486808">اپنی ریسرچ دوبارہ شروع کریں</translation> +<translation id="305162504811187366">بشمول ٹائم سٹیمپس، میزبانوں اور کلائنٹ سیشن IDs کے Chrome ریموٹ ڈیسک ٹاپ کی سرگزشت</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">پیچ سروس</translation> <translation id="306573536155379004">گیم شروع ہو گئی۔</translation> @@ -1240,7 +1242,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{کوئی نہیں}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />، <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />، <ph name="EXAMPLE_DOMAIN_2" />، <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> تلاش کریں</translation> <translation id="4879491255372875719">خودکار (ڈیفالٹ)</translation> -<translation id="4879725228911483934">ونڈوز کھولیں اور اپنی اسکرینز پر رکھیں</translation> <translation id="4880827082731008257">تلاش کی سرگزشت</translation> <translation id="4881695831933465202">کھولیں</translation> <translation id="4885256590493466218">چیک آؤٹ کرنے پر <ph name="CARD_DETAIL" /> سے ادائیگی کریں۔</translation> @@ -1630,7 +1631,6 @@ <translation id="6169916984152623906">اب آپ نجی طور پر براؤز کر سکتے ہیں، اور اس آلے کا استعمال کرنے والے دوسرے لوگوں کو آپ کی سرگرمی نہیں دکھائی دے گی۔ تاہم، ڈاؤن لوڈز اور بک مارکس محفوظ ہو جائیں گے۔</translation> <translation id="6177128806592000436">اس سائٹ سے آپ کا کنکشن محفوظ نہیں ہے</translation> <translation id="6180316780098470077">دوبارہ کوشش کرنے کا وقفہ</translation> -<translation id="619448280891863779">سائٹ آپ کی سکرینز پر ونڈوز کھولنے اور رکھنے کیلئے پوچھ سکتی ہے</translation> <translation id="6196640612572343990">فریق ثالث کوکیز کو مسدود کریں</translation> <translation id="6203231073485539293">اپنا انٹرنیٹ کنکشن چیک کریں</translation> <translation id="6218753634732582820">Chromium سے پتہ ہٹائیں؟</translation> @@ -2363,6 +2363,7 @@ <translation id="865032292777205197">موشن سینسرز</translation> <translation id="8663226718884576429">آرڈر کا خلاصہ، <ph name="TOTAL_LABEL" />، مزید تفصیلات</translation> <translation id="8666678546361132282">انگريزی</translation> +<translation id="8669306706049782872">ونڈوز کھولنے اور رکھنے کے لیے اپنی اسکرینز کے بارے میں معلومات کا استعمال کریں</translation> <translation id="867224526087042813">دستخط</translation> <translation id="8676424191133491403">کوئی تاخیر نہیں</translation> <translation id="8680536109547170164"><ph name="QUERY" />، جواب، <ph name="ANSWER" /></translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb index 2d107410..0862bc4 100644 --- a/components/strings/components_strings_uz.xtb +++ b/components/strings/components_strings_uz.xtb
@@ -644,6 +644,7 @@ <translation id="3037605927509011580">Ana xolos!</translation> <translation id="3041612393474885105">Sertifikat haqida ma’lumot</translation> <translation id="3044034790304486808">Tarixni qaytaring</translation> +<translation id="305162504811187366">Chrome Remote Desktop tarixi, vaqt belgisi, hostlar va mijoz seansi identifikatorlari</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">Xizmatni tuzatish</translation> <translation id="306573536155379004">Oʻyin boshlandi.</translation> @@ -1234,7 +1235,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Hech qanday}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> – qidiruv</translation> <translation id="4879491255372875719">Avtomatik (birlamchi)</translation> -<translation id="4879725228911483934">Ekranlaringizga oynalarni ochish va joylashtirish</translation> <translation id="4880827082731008257">Qidiruv tarixi</translation> <translation id="4881695831933465202">Ochish</translation> <translation id="4885256590493466218">Hisob-kitob vaqtida <ph name="CARD_DETAIL" /> bilan toʻlang</translation> @@ -1622,7 +1622,6 @@ <translation id="6169916984152623906">Inkognito rejimida bajargan amallaringiz ushbu qurilmaning boshqa foydalanuvchilariga ko‘rinmaydi. Biroq xatcho‘plar va yuklab olingan fayllar saqlanib qoladi.</translation> <translation id="6177128806592000436">Bu sayt bilan o‘rnatilgan aloqa himoyalanmagan.</translation> <translation id="6180316780098470077">Qayta urinishlar intervali</translation> -<translation id="619448280891863779">Ekranlarda oynalar ochish va joylashtirishdan oldin ruxsat soʻrashi mumkin</translation> <translation id="6196640612572343990">Tashqi cookie-fayllarni bloklash.</translation> <translation id="6203231073485539293">Internet aloqasini tekshiring</translation> <translation id="6218753634732582820">Ushbu manzilni brauzer unutsinmi?</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 10af7b4..aa56256 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -645,6 +645,7 @@ <translation id="3037605927509011580">Ôi, hỏng! </translation> <translation id="3041612393474885105">Thông tin Chứng chỉ</translation> <translation id="3044034790304486808">Tiếp tục tìm kiếm</translation> +<translation id="305162504811187366">Nhật ký Chrome Remote Desktop, bao gồm cả dấu thời gian, mã phiên ứng dụng và máy chủ</translation> <translation id="3060227939791841287">C9 (Phong bì)</translation> <translation id="3061707000357573562">Dịch vụ vá lỗi</translation> <translation id="306573536155379004">Đã bắt đầu trò chơi.</translation> @@ -1239,7 +1240,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Không có}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">Cụm từ tìm kiếm <ph name="TEXT" /></translation> <translation id="4879491255372875719">Tự động (mặc định)</translation> -<translation id="4879725228911483934">Mở và đặt các cửa sổ trên màn hình của bạn</translation> <translation id="4880827082731008257">Lịch sử tìm kiếm</translation> <translation id="4881695831933465202">Mở</translation> <translation id="4885256590493466218">Thanh toán bằng <ph name="CARD_DETAIL" /> khi thanh toán</translation> @@ -1628,7 +1628,6 @@ <translation id="6169916984152623906">Giờ đây, bạn có thể duyệt web riêng tư và người khác sử dụng thiết bị này sẽ không thấy hoạt động của bạn. Tuy nhiên, tài nguyên đã tải xuống và dấu trang sẽ được lưu.</translation> <translation id="6177128806592000436">Kết nối của bạn tới trang web này không an toàn</translation> <translation id="6180316780098470077">Khoảng thời gian thử lại</translation> -<translation id="619448280891863779">Trang web có thể yêu cầu mở và đặt các cửa sổ trên màn hình của bạn</translation> <translation id="6196640612572343990">Chặn cookie của bên thứ ba</translation> <translation id="6203231073485539293">Kiểm tra kết nối Internet của bạn</translation> <translation id="6218753634732582820">Bạn muốn xóa địa chỉ khỏi Chromium?</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index a53fe9b..a5a421b3 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">喔唷,崩溃啦!</translation> <translation id="3041612393474885105">证书信息</translation> <translation id="3044034790304486808">继续您的研究</translation> +<translation id="305162504811187366">Chrome 远程桌面历史记录,包括时间戳、主机和客户端会话 ID</translation> <translation id="3060227939791841287">C9 (Envelope)</translation> <translation id="3061707000357573562">修补服务</translation> <translation id="306573536155379004">游戏已开始。</translation> @@ -1226,7 +1227,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{无}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">搜索<ph name="TEXT" /></translation> <translation id="4879491255372875719">自动(默认)</translation> -<translation id="4879725228911483934">在您的屏幕上打开和放置窗口</translation> <translation id="4880827082731008257">搜索历史记录</translation> <translation id="4881695831933465202">打开</translation> <translation id="4885256590493466218">结帐时使用 <ph name="CARD_DETAIL" /> 付款</translation> @@ -1614,7 +1614,6 @@ <translation id="6169916984152623906">现在,您便可进行私密浏览了。共用此设备的其他用户将不会看到您的活动,但您下载的内容和添加的书签仍会保存在设备上。</translation> <translation id="6177128806592000436">您与此网站之间建立的连接不安全</translation> <translation id="6180316780098470077">重试间隔</translation> -<translation id="619448280891863779">可以询问能否在您的屏幕上打开和放置窗口</translation> <translation id="6196640612572343990">阻止第三方 Cookie</translation> <translation id="6203231073485539293">请检查您的互联网连接是否正常</translation> <translation id="6218753634732582820">要从 Chromium 中移除地址吗?</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb index 8680545f..ec72190 100644 --- a/components/strings/components_strings_zh-HK.xtb +++ b/components/strings/components_strings_zh-HK.xtb
@@ -1230,7 +1230,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{無}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">搵「<ph name="TEXT" />」</translation> <translation id="4879491255372875719">自動 (預設)</translation> -<translation id="4879725228911483934">在您的螢幕上開啟並放置視窗</translation> <translation id="4880827082731008257">搜尋記錄</translation> <translation id="4881695831933465202">開啟</translation> <translation id="4885256590493466218">使用 <ph name="CARD_DETAIL" /> 結帳付款</translation> @@ -1619,7 +1618,6 @@ <translation id="6169916984152623906">現在您可私下瀏覽了。共用此裝置的其他使用者將無法看到您的活動,但您下載的檔案和加入的書籤仍會儲存在裝置上。</translation> <translation id="6177128806592000436">您與此網站的連線並非完全安全</translation> <translation id="6180316780098470077">重試間隔</translation> -<translation id="619448280891863779">可要求在您的畫面中開啟和放置視窗</translation> <translation id="6196640612572343990">封鎖第三方 Cookie</translation> <translation id="6203231073485539293">檢查互聯網連線</translation> <translation id="6218753634732582820">要從 Chromium 移除地址嗎?</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 6c16c01..8da8007 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -641,6 +641,7 @@ <translation id="3037605927509011580">糟糕!</translation> <translation id="3041612393474885105">憑證資訊</translation> <translation id="3044034790304486808">繼續搜尋</translation> +<translation id="305162504811187366">Chrome 遠端桌面歷史記錄,包括時間戳記、主機和用戶端工作階段 ID</translation> <translation id="3060227939791841287">C9 (信封)</translation> <translation id="3061707000357573562">修補服務</translation> <translation id="306573536155379004">已啟動遊戲。</translation> @@ -1230,7 +1231,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{無}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831">搜尋「<ph name="TEXT" />」</translation> <translation id="4879491255372875719">自動 (預設)</translation> -<translation id="4879725228911483934">在你的畫面中開啟和放置視窗</translation> <translation id="4880827082731008257">搜尋記錄</translation> <translation id="4881695831933465202">開啟</translation> <translation id="4885256590493466218">使用 <ph name="CARD_DETAIL" /> 結帳付款</translation> @@ -1619,7 +1619,6 @@ <translation id="6169916984152623906">現在,你可以進行私密瀏覽了。共用這部裝置的其他使用者不會看到你的活動,不過,你下載的內容和新增的書籤仍會保留在裝置上。</translation> <translation id="6177128806592000436">你與這個網站的連線不安全</translation> <translation id="6180316780098470077">重試間隔</translation> -<translation id="619448280891863779">可以要求在你的畫面中開啟和放置視窗</translation> <translation id="6196640612572343990">封鎖第三方 Cookie</translation> <translation id="6203231073485539293">檢查網際網路連線</translation> <translation id="6218753634732582820">要從 Chromium 中移除地址嗎?</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index 3ea8c78..ed0f69d 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -1236,7 +1236,6 @@ <translation id="4877083676943085827">{COUNT,plural, =0{Lutho}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> usesho</translation> <translation id="4879491255372875719">Okuzenzakalelayo (okuzenzakalelayo)</translation> -<translation id="4879725228911483934">Vula uphinde ubeke amawindi kuzikrini zakho</translation> <translation id="4880827082731008257">Umlando wosesho</translation> <translation id="4881695831933465202">Vula</translation> <translation id="4885256590493466218">Khokha nge-<ph name="CARD_DETAIL" /> lapho usuqedela ukuthenga</translation> @@ -1625,7 +1624,6 @@ <translation id="6169916984152623906">Manje ungaphequlula ngasese, futhi abanye abantu abasebenzisa le divayisi ngeke bakwazi ukubona umsebenzi wakho. Kodwa, ukulandwa namabhukhimakhi kuzolondolozwa.</translation> <translation id="6177128806592000436">Ukuxhumeka kwakho kuleli sayithi akuqinisekisiwe</translation> <translation id="6180316780098470077">Izikhawu zokuzama futhi</translation> -<translation id="619448280891863779">Angacela ukuvula nokubeka amawindi kuzikrini zakho</translation> <translation id="6196640612572343990">Vimba amakhukhi enkampani yangaphandle</translation> <translation id="6203231073485539293">Hlola ukuxhumeka kwakho kwe-inthanethi</translation> <translation id="6218753634732582820">Susa ikheli kusukela ku-Chromium?</translation>
diff --git a/components/sync/driver/glue/sync_transport_data_prefs.cc b/components/sync/driver/glue/sync_transport_data_prefs.cc index fb837c7f..18653e17 100644 --- a/components/sync/driver/glue/sync_transport_data_prefs.cc +++ b/components/sync/driver/glue/sync_transport_data_prefs.cc
@@ -13,6 +13,7 @@ #include "base/strings/string_number_conversions.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" +#include "components/sync/base/model_type.h" namespace syncer { @@ -38,12 +39,27 @@ const char kSyncBagOfChips[] = "sync.bag_of_chips"; // Dictionary of last seen invalidation versions for each model type. -const char kSyncInvalidationVersions[] = "sync.invalidation_versions"; +const char kDeprecatedSyncInvalidationVersions[] = "sync.invalidation_versions"; +const char kSyncInvalidationVersions2[] = "sync.invalidation_versions2"; // Obsolete pref. const char kSyncObsoleteKeystoreEncryptionBootstrapToken[] = "sync.keystore_encryption_bootstrap_token"; +void UpdateInvalidationVersions( + const std::map<ModelType, int64_t>& invalidation_versions, + PrefService* pref_service) { + auto invalidation_dictionary = std::make_unique<base::DictionaryValue>(); + for (const auto& map_iter : invalidation_versions) { + std::string version_str = base::NumberToString(map_iter.second); + invalidation_dictionary->SetString( + base::NumberToString( + GetSpecificsFieldNumberFromModelType(map_iter.first)), + version_str); + } + pref_service->Set(kSyncInvalidationVersions2, *invalidation_dictionary); +} + } // namespace SyncTransportDataPrefs::SyncTransportDataPrefs(PrefService* pref_service) @@ -61,7 +77,8 @@ registry->RegisterTimePref(kSyncLastSyncedTime, base::Time()); registry->RegisterTimePref(kSyncLastPollTime, base::Time()); registry->RegisterTimeDeltaPref(kSyncPollIntervalSeconds, base::TimeDelta()); - registry->RegisterDictionaryPref(kSyncInvalidationVersions); + registry->RegisterDictionaryPref(kDeprecatedSyncInvalidationVersions); + registry->RegisterDictionaryPref(kSyncInvalidationVersions2); // Obsolete pref. registry->RegisterStringPref(kSyncObsoleteKeystoreEncryptionBootstrapToken, @@ -74,7 +91,8 @@ pref_service_->ClearPref(kSyncLastSyncedTime); pref_service_->ClearPref(kSyncLastPollTime); pref_service_->ClearPref(kSyncPollIntervalSeconds); - pref_service_->ClearPref(kSyncInvalidationVersions); + pref_service_->ClearPref(kSyncInvalidationVersions2); + pref_service_->ClearPref(kDeprecatedSyncInvalidationVersions); pref_service_->ClearPref(kSyncGaiaId); pref_service_->ClearPref(kSyncCacheGuid); pref_service_->ClearPref(kSyncBirthday); @@ -171,14 +189,47 @@ return decoded; } +// static +void SyncTransportDataPrefs::MigrateInvalidationVersions( + PrefService* pref_service) { + const base::Value* invalidation_dictionary = + pref_service->GetDictionary(kDeprecatedSyncInvalidationVersions); + if (invalidation_dictionary->DictEmpty()) { + // No data, or was already migrated. Nothing to do here. + return; + } + + // Read data from the deprecated pref. + std::map<ModelType, int64_t> invalidation_versions; + for (ModelType type : ProtocolTypes()) { + // TODO(crbug.com/1173546): Fork a minimal version of ModelTypeToString in + // this file, so that ModelTypeToString itself (meant only for debugging + // purposes) can be changed without breaking this code. + std::string key = ModelTypeToString(type); + const std::string* version_str = + invalidation_dictionary->FindStringKey(key); + if (!version_str) + continue; + int64_t version = 0; + if (!base::StringToInt64(*version_str, &version)) + continue; + invalidation_versions[type] = version; + } + + // Write to the new pref and clear the deprecated one. + syncer::UpdateInvalidationVersions(invalidation_versions, pref_service); + pref_service->ClearPref(kDeprecatedSyncInvalidationVersions); +} + std::map<ModelType, int64_t> SyncTransportDataPrefs::GetInvalidationVersions() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); std::map<ModelType, int64_t> invalidation_versions; const base::Value* invalidation_dictionary = - pref_service_->GetDictionary(kSyncInvalidationVersions); + pref_service_->GetDictionary(kSyncInvalidationVersions2); for (ModelType type : ProtocolTypes()) { - std::string key = ModelTypeToString(type); + std::string key = + base::NumberToString(GetSpecificsFieldNumberFromModelType(type)); const std::string* version_str = invalidation_dictionary->FindStringKey(key); if (!version_str) @@ -194,13 +245,7 @@ void SyncTransportDataPrefs::UpdateInvalidationVersions( const std::map<ModelType, int64_t>& invalidation_versions) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - auto invalidation_dictionary = std::make_unique<base::DictionaryValue>(); - for (const auto& map_iter : invalidation_versions) { - std::string version_str = base::NumberToString(map_iter.second); - invalidation_dictionary->SetString(ModelTypeToString(map_iter.first), - version_str); - } - pref_service_->Set(kSyncInvalidationVersions, *invalidation_dictionary); + syncer::UpdateInvalidationVersions(invalidation_versions, pref_service_); } void ClearObsoleteKeystoreBootstrapTokenPref(PrefService* pref_service) {
diff --git a/components/sync/driver/glue/sync_transport_data_prefs.h b/components/sync/driver/glue/sync_transport_data_prefs.h index e618ea3..73cda99 100644 --- a/components/sync/driver/glue/sync_transport_data_prefs.h +++ b/components/sync/driver/glue/sync_transport_data_prefs.h
@@ -61,6 +61,11 @@ void UpdateInvalidationVersions( const std::map<ModelType, int64_t>& invalidation_versions); + // Migrates invalidation versions from a deprecated pref to the current one. + // Does nothing if the pref was already migrated. Should be called during + // browser startup. + static void MigrateInvalidationVersions(PrefService* pref_service); + private: // Never null. const raw_ptr<PrefService> pref_service_;
diff --git a/components/sync/driver/glue/sync_transport_data_prefs_unittest.cc b/components/sync/driver/glue/sync_transport_data_prefs_unittest.cc index ae6b14bf..7f12af3 100644 --- a/components/sync/driver/glue/sync_transport_data_prefs_unittest.cc +++ b/components/sync/driver/glue/sync_transport_data_prefs_unittest.cc
@@ -44,6 +44,75 @@ } } +TEST_F(SyncTransportDataPrefsTest, MigrateInvalidationVersions) { + // Set up entries for all data types in the legacy pref. + base::Value legacy_invalidation_versions(base::Value::Type::DICTIONARY); + legacy_invalidation_versions.SetStringPath("Bookmarks", "11"); + legacy_invalidation_versions.SetStringPath("Preferences", "12"); + legacy_invalidation_versions.SetStringPath("Passwords", "13"); + legacy_invalidation_versions.SetStringPath("Autofill Profiles", "14"); + legacy_invalidation_versions.SetStringPath("Autofill", "15"); + legacy_invalidation_versions.SetStringPath("Autofill Wallet", "16"); + legacy_invalidation_versions.SetStringPath("Autofill Wallet Metadata", "17"); + legacy_invalidation_versions.SetStringPath("Autofill Wallet Offer", "18"); + legacy_invalidation_versions.SetStringPath("Themes", "19"); + legacy_invalidation_versions.SetStringPath("Typed URLs", "20"); + legacy_invalidation_versions.SetStringPath("Extensions", "21"); + legacy_invalidation_versions.SetStringPath("Search Engines", "22"); + legacy_invalidation_versions.SetStringPath("Sessions", "23"); + legacy_invalidation_versions.SetStringPath("Apps", "24"); + legacy_invalidation_versions.SetStringPath("App settings", "25"); + legacy_invalidation_versions.SetStringPath("Extension settings", "26"); + legacy_invalidation_versions.SetStringPath("History Delete Directives", "27"); + legacy_invalidation_versions.SetStringPath("Dictionary", "28"); + legacy_invalidation_versions.SetStringPath("Device Info", "29"); + legacy_invalidation_versions.SetStringPath("Priority Preferences", "30"); + legacy_invalidation_versions.SetStringPath("Managed User Settings", "31"); + legacy_invalidation_versions.SetStringPath("App List", "32"); + legacy_invalidation_versions.SetStringPath("Arc Package", "33"); + legacy_invalidation_versions.SetStringPath("Printers", "34"); + legacy_invalidation_versions.SetStringPath("Reading List", "35"); + legacy_invalidation_versions.SetStringPath("Send Tab To Self", "36"); + legacy_invalidation_versions.SetStringPath("Wifi Configurations", "37"); + legacy_invalidation_versions.SetStringPath("Web Apps", "38"); + legacy_invalidation_versions.SetStringPath("OS Preferences", "39"); + legacy_invalidation_versions.SetStringPath("OS Priority Preferences", "40"); + legacy_invalidation_versions.SetStringPath("Workspace Desk", "41"); + legacy_invalidation_versions.SetStringPath("Encryption Keys", "42"); + pref_service_.Set("sync.invalidation_versions", legacy_invalidation_versions); + + const size_t data_type_count = legacy_invalidation_versions.DictSize(); + + // The legacy pref should not be used by GetInvalidationVersions(). + ASSERT_TRUE(sync_prefs_->GetInvalidationVersions().empty()); + + // Run the migration! + SyncTransportDataPrefs::MigrateInvalidationVersions(&pref_service_); + + // Make sure the entries were properly migrated. + std::map<ModelType, int64_t> versions = + sync_prefs_->GetInvalidationVersions(); + EXPECT_EQ(versions.size(), data_type_count); + // Just spot-check the actual values for a few types. + EXPECT_EQ(versions[BOOKMARKS], 11); + EXPECT_EQ(versions[EXTENSION_SETTINGS], 26); + EXPECT_EQ(versions[NIGORI], 42); + + // Make some changes to the invalidation versions, then run the migration + // again. This should *not* overwrite the new values. + versions[BOOKMARKS] = 50; + versions[EXTENSIONS] = 51; + versions.erase(OS_PREFERENCES); + sync_prefs_->UpdateInvalidationVersions(versions); + + SyncTransportDataPrefs::MigrateInvalidationVersions(&pref_service_); + + versions = sync_prefs_->GetInvalidationVersions(); + EXPECT_EQ(versions.size(), data_type_count - 1); + EXPECT_EQ(versions[BOOKMARKS], 50); + EXPECT_EQ(versions[EXTENSIONS], 51); +} + TEST_F(SyncTransportDataPrefsTest, PollInterval) { EXPECT_TRUE(sync_prefs_->GetPollInterval().is_zero()); sync_prefs_->SetPollInterval(base::Minutes(30));
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc index 6ba52f9..6482ea27 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc +++ b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
@@ -16,6 +16,7 @@ #include "base/files/file_util.h" #include "base/files/important_file_writer.h" #include "base/logging.h" +#include "base/metrics/histogram_functions.h" #include "base/sequence_checker.h" #include "base/stl_util.h" #include "base/time/clock.h" @@ -40,8 +41,15 @@ sync_pb::LocalTrustedVault proto; std::string ciphertext; std::string decrypted_content; - if (base::ReadFileToString(file_path, &ciphertext) && - OSCrypt::DecryptString(ciphertext, &decrypted_content)) { + if (!base::ReadFileToString(file_path, &ciphertext)) { + return proto; + } + + const bool decryption_success = + OSCrypt::DecryptString(ciphertext, &decrypted_content); + base::UmaHistogramBoolean("Sync.TrustedVaultLocalDataDecryptionIsSuccessful", + decryption_success); + if (decryption_success) { proto.ParseFromString(decrypted_content); } @@ -51,7 +59,11 @@ void WriteToDisk(const sync_pb::LocalTrustedVault& data, const base::FilePath& file_path) { std::string encrypted_data; - if (!OSCrypt::EncryptString(data.SerializeAsString(), &encrypted_data)) { + const bool encryption_success = + OSCrypt::EncryptString(data.SerializeAsString(), &encrypted_data); + base::UmaHistogramBoolean("Sync.TrustedVaultLocalDataEncryptionIsSuccessful", + encryption_success); + if (!encryption_success) { DLOG(ERROR) << "Failed to encrypt trusted vault file."; return; }
diff --git a/components/test/data/payments/dynamic_shipping.js b/components/test/data/payments/dynamic_shipping.js index 9fa51f0..2752617 100644 --- a/components/test/data/payments/dynamic_shipping.js +++ b/components/test/data/payments/dynamic_shipping.js
@@ -9,8 +9,21 @@ /** * Launches the PaymentRequest UI that offers free shipping in California and * $5.00 shipping in US. Does not allow shipping outside of US. + * + * Legacy entry-point until basic-card is disabled */ function buy() { // eslint-disable-line no-unused-vars + buyWithMethods( + [{supportedMethods: 'basic-card', data: {supportedNetworks: ['visa']}}]); +} + +/** + * Launches the PaymentRequest UI that offers free shipping in California and + * $5.00 shipping in US. Does not allow shipping outside of US. + * + * @param {String} methodData - An array of payment method objects. + */ +function buyWithMethods(methodData) { // eslint-disable-line no-unused-vars try { var details = { total: {label: 'Total', amount: {currency: 'USD', value: '5.00'}}, @@ -25,8 +38,7 @@ }; var request = new PaymentRequest( - [{supportedMethods: 'basic-card', data: {supportedNetworks: ['visa']}}], - details, {requestShipping: true}); + methodData, details, {requestShipping: true}); request.addEventListener('shippingaddresschange', function(evt) { evt.updateWith(new Promise(function(resolve) {
diff --git a/components/ukm/ukm_service_unittest.cc b/components/ukm/ukm_service_unittest.cc index e688896d..e485cbb 100644 --- a/components/ukm/ukm_service_unittest.cc +++ b/components/ukm/ukm_service_unittest.cc
@@ -57,7 +57,7 @@ using TestEvent2 = builders::Memory_Experimental; const char* kTestEvent2Metric1 = TestEvent2::kArrayBufferName; const char* kTestEvent2Metric2 = TestEvent2::kBlinkGCName; -using TestEvent3 = builders::Previews; +using TestEvent3 = builders::PageWithPassword; using TestProviderEvent = builders::ScreenBrightness; SourceId ConvertSourceIdToWhitelistedType(SourceId id, SourceIdType type) {
diff --git a/components/update_client/persisted_data.cc b/components/update_client/persisted_data.cc index e5fede21..e86fe4b 100644 --- a/components/update_client/persisted_data.cc +++ b/components/update_client/persisted_data.cc
@@ -112,8 +112,7 @@ base::OnceClosure callback, const std::set<std::string>& active_ids) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DictionaryPrefUpdateDeprecated update(pref_service_, - kPersistedDataPreference); + DictionaryPrefUpdate update(pref_service_, kPersistedDataPreference); for (const auto& id : ids) { base::Value* app_key = GetOrCreateAppKey(id, update.Get()); app_key->SetIntKey("dlrc", datenum); @@ -150,8 +149,7 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!pref_service_) return; - DictionaryPrefUpdateDeprecated update(pref_service_, - kPersistedDataPreference); + DictionaryPrefUpdate update(pref_service_, kPersistedDataPreference); GetOrCreateAppKey(id, update.Get())->SetStringKey(key, value); }
diff --git a/components/update_client/update_checker.cc b/components/update_client/update_checker.cc index a7e6e5e9..a43742f 100644 --- a/components/update_client/update_checker.cc +++ b/components/update_client/update_checker.cc
@@ -70,11 +70,12 @@ UpdateCheckCallback update_check_callback) override; private: - void ReadUpdaterStateAttributes(); + std::unique_ptr<UpdaterState::Attributes> ReadUpdaterStateAttributes() const; void CheckForUpdatesHelper( const std::string& session_id, const IdToComponentPtrMap& components, const base::flat_map<std::string, std::string>& additional_attributes, + std::unique_ptr<UpdaterState::Attributes> updater_state_attributes, const std::set<std::string>& active_ids); void OnRequestSenderComplete(int error, const std::string& response, @@ -91,7 +92,6 @@ raw_ptr<PersistedData> metadata_ = nullptr; std::vector<std::string> ids_checked_; UpdateCheckCallback update_check_callback_; - std::unique_ptr<UpdaterState::Attributes> updater_state_attributes_; std::unique_ptr<RequestSender> request_sender_; }; @@ -114,33 +114,39 @@ ids_checked_ = ids_checked; update_check_callback_ = std::move(update_check_callback); - base::ThreadPool::PostTaskAndReply( + auto check_for_updates_invoker = base::BindOnce( + &UpdateCheckerImpl::CheckForUpdatesHelper, base::Unretained(this), + session_id, std::cref(components), additional_attributes); + + base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, kTaskTraits, base::BindOnce(&UpdateCheckerImpl::ReadUpdaterStateAttributes, base::Unretained(this)), base::BindOnce( - [](base::OnceCallback<void(const std::set<std::string>&)> - checkForUpdatesHelper, - PersistedData* metadata, std::vector<std::string> ids) { - metadata->GetActiveBits(ids, std::move(checkForUpdatesHelper)); + [](base::OnceCallback<void(std::unique_ptr<UpdaterState::Attributes>, + const std::set<std::string>&)> + check_for_updates_invoker, + PersistedData* metadata, std::vector<std::string> ids, + std::unique_ptr<UpdaterState::Attributes> + updater_state_attributes) { + metadata->GetActiveBits( + ids, base::BindOnce(std::move(check_for_updates_invoker), + std::move(updater_state_attributes))); }, - base::BindOnce(&UpdateCheckerImpl::CheckForUpdatesHelper, - base::Unretained(this), session_id, - std::cref(components), additional_attributes), - base::Unretained(metadata_), ids_checked)); + std::move(check_for_updates_invoker), base::Unretained(metadata_), + ids_checked)); } // This function runs on the blocking pool task runner. -void UpdateCheckerImpl::ReadUpdaterStateAttributes() { +std::unique_ptr<UpdaterState::Attributes> +UpdateCheckerImpl::ReadUpdaterStateAttributes() const { #if defined(OS_WIN) // On Windows, the Chrome and the updater install modes are matched by design. - updater_state_attributes_ = - UpdaterState::GetState(!config_->IsPerUserInstall()); + return UpdaterState::GetState(!config_->IsPerUserInstall()); #elif defined(OS_MAC) - // MacOS ignores this value in the current implementation but this may change. - updater_state_attributes_ = UpdaterState::GetState(false); + return UpdaterState::GetState(false); #else -// Other platforms don't have updaters. + return nullptr; #endif // OS_WIN } @@ -148,6 +154,7 @@ const std::string& session_id, const IdToComponentPtrMap& components, const base::flat_map<std::string, std::string>& additional_attributes, + std::unique_ptr<UpdaterState::Attributes> updater_state_attributes, const std::set<std::string>& active_ids) { DCHECK(thread_checker_.CalledOnValidThread()); @@ -201,7 +208,7 @@ config_->GetBrowserVersion().GetString(), config_->GetLang(), config_->GetChannel(), config_->GetOSLongName(), config_->GetDownloadPreference(), additional_attributes, - updater_state_attributes_.get(), std::move(apps)); + updater_state_attributes.get(), std::move(apps)); request_sender_ = std::make_unique<RequestSender>(config_); request_sender_->Send(
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc index a809a0c3..a14c9aa 100644 --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -186,19 +186,19 @@ cookies_store: "user" setting: "This feature cannot be disabled." chrome_policy { - URLBlacklist { - URLBlacklist: { entries: '*' } + URLBlocklist { + URLBlocklist: { entries: '*' } } } chrome_policy { - URLWhitelist { - URLWhitelist { } + URLAllowlist { + URLAllowlist { } } } } comments: "Chrome would be unable to navigate to websites without this type of " - "request. Using either URLBlacklist or URLWhitelist policies (or a " + "request. Using either URLBlocklist or URLAllowlist policies (or a " "combination of both) limits the scope of these requests." )");
diff --git a/content/browser/notifications/platform_notification_service_proxy.cc b/content/browser/notifications/platform_notification_service_proxy.cc index 1589c4c..5dada90 100644 --- a/content/browser/notifications/platform_notification_service_proxy.cc +++ b/content/browser/notifications/platform_notification_service_proxy.cc
@@ -65,7 +65,7 @@ base::OnceClosure task; if (status == blink::ServiceWorkerStatusCode::kOk && - registration->scope().DeprecatedGetOriginAsURL() == data.origin) { + registration->key().origin().GetURL() == data.origin) { DoDisplayNotification(data, registration->scope(), std::move(callback)); } else { std::move(callback).Run(/* success= */ false, /* notification_id= */ "");
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index d341c50..496dad2 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc
@@ -4907,15 +4907,12 @@ } } - // [frame-src] or [fenced-frame-src] + // [frame-src] if (parent_policies && !IsAllowedByCSPDirective( parent_policies->content_security_policies, &parent_context, - frame_tree_node_->IsFencedFrameRoot() - ? network::mojom::CSPDirectiveName::FencedFrameSrc - : network::mojom::CSPDirectiveName::FrameSrc, - has_followed_redirect, url_upgraded_after_redirect, is_response_check, - disposition)) { + network::mojom::CSPDirectiveName::FrameSrc, has_followed_redirect, + url_upgraded_after_redirect, is_response_check, disposition)) { error = net::ERR_BLOCKED_BY_CSP; } @@ -4942,21 +4939,16 @@ const PolicyContainerPolicies* parent_policies = policy_container_navigation_bundle_->ParentPolicies(); DCHECK(!parent == !parent_policies); - bool set_parent_for_nested_frame_tree = - !parent && - (frame_tree_node()->current_frame_host()->InsidePortal() || - frame_tree_node()->IsFencedFrameRoot()) && - frame_tree_node()->render_manager()->GetOuterDelegateNode(); - if (set_parent_for_nested_frame_tree) { + if (!parent && frame_tree_node()->current_frame_host()->InsidePortal() && + frame_tree_node()->render_manager()->GetOuterDelegateNode()) { parent = frame_tree_node() ->render_manager() ->GetOuterDelegateNode() ->current_frame_host() ->GetParent(); - // TODO(antoniosartori): If we want to keep checking frame-src for portals - // or fenced frames, consider storing a snapshot of the parent policies in - // the `policy_container_navigation_bundle_` at the beginning of the - // navigation. + // TODO(antoniosartori): If we want to keep checking frame-src for portals, + // consider storing a snapshot of the parent policies in the + // `policy_container_navigation_bundle_` at the beginning of the navigation. parent_policies = &parent->policy_container_host()->policies(); }
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h index 45ba79f..06ffe99 100644 --- a/content/browser/renderer_host/navigation_request.h +++ b/content/browser/renderer_host/navigation_request.h
@@ -1114,10 +1114,10 @@ bool is_response_check, network::CSPContext::CheckCSPDisposition disposition); - // Checks if CSP allows the navigation. This will check the frame-src, - // fenced-frame-src and navigate-to directives. Returns net::OK if the checks - // pass, and net::ERR_ABORTED or net::ERR_BLOCKED_BY_CSP depending on which - // checks fail. + // Checks if CSP allows the navigation. This will check the frame-src and + // navigate-to directives. + // Returns net::OK if the checks pass, and net::ERR_ABORTED or + // net::ERR_BLOCKED_BY_CSP depending on which checks fail. net::Error CheckCSPDirectives( RenderFrameHostCSPContext parent_context, const PolicyContainerPolicies* parent_policies,
diff --git a/content/browser/renderer_host/render_frame_host_csp_context.cc b/content/browser/renderer_host/render_frame_host_csp_context.cc index f58d7b7d..7da7b72 100644 --- a/content/browser/renderer_host/render_frame_host_csp_context.cc +++ b/content/browser/renderer_host/render_frame_host_csp_context.cc
@@ -34,13 +34,12 @@ // separate renderers, in the event of one of them being compromised. // See https://crbug.com/633306. // - // We need to sanitize the `blocked_url` only for frame-src and - // fenced-frame-src. All other directive checks pass as `blocked_url` the - // initial URL (before redirects), which the renderer already knows. check in - // the browser is reporting to the wrong frame. + // We need to sanitize the `blocked_url` only for frame-src. All other + // directive checks pass as `blocked_url` the initial URL (before redirects), + // which the renderer already knows. + // check in the browser is reporting to the wrong frame. bool sanitize_blocked_url = - directive == network::mojom::CSPDirectiveName::FrameSrc || - directive == network::mojom::CSPDirectiveName::FencedFrameSrc; + directive == network::mojom::CSPDirectiveName::FrameSrc; bool sanitize_source_location = true; // There is no need to sanitize data when it is same-origin with the current
diff --git a/content/browser/renderer_host/render_frame_host_csp_context.h b/content/browser/renderer_host/render_frame_host_csp_context.h index 3f083cd..d340b79b 100644 --- a/content/browser/renderer_host/render_frame_host_csp_context.h +++ b/content/browser/renderer_host/render_frame_host_csp_context.h
@@ -5,7 +5,6 @@ #ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_FRAME_HOST_CSP_CONTEXT_H_ #define CONTENT_BROWSER_RENDERER_HOST_RENDER_FRAME_HOST_CSP_CONTEXT_H_ -#include "content/common/content_export.h" #include "services/network/public/cpp/content_security_policy/csp_context.h" class GURL; @@ -17,7 +16,7 @@ // RenderFrameHostCSPContext is a network::CSPContext that reports Content // Security Policy violations through the mojo connection between a // RenderFrameHostImpl and its corresponding LocalFrame. -class CONTENT_EXPORT RenderFrameHostCSPContext : public network::CSPContext { +class RenderFrameHostCSPContext : public network::CSPContext { public: // Construct a new RenderFrameHostCSPContext reporting CSP violations through // `render_frame_host`. The parameter `render_frame_host` can be null, in
diff --git a/content/browser/renderer_host/render_frame_host_csp_context_unittest.cc b/content/browser/renderer_host/render_frame_host_csp_context_unittest.cc deleted file mode 100644 index e408a26..0000000 --- a/content/browser/renderer_host/render_frame_host_csp_context_unittest.cc +++ /dev/null
@@ -1,32 +0,0 @@ -// Copyright 2022 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 "content/browser/renderer_host/render_frame_host_csp_context.h" - -#include "content/browser/renderer_host/render_frame_host_impl.h" -#include "services/network/public/mojom/content_security_policy.mojom.h" -#include "services/network/public/mojom/source_location.mojom.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -namespace content { - -TEST(RenderFrameHostCSPContextTest, SanitizeDataForUseInCspViolation) { - RenderFrameHostCSPContext context(/*render_frame_host=*/nullptr); - - GURL blocked_url("http://a.com/login?password=1234"); - auto source_location = - network::mojom::SourceLocation::New("http://a.com/login", 10u, 20u); - - context.SanitizeDataForUseInCspViolation( - /*is_redirect=*/false, network::mojom::CSPDirectiveName::FencedFrameSrc, - &blocked_url, source_location.get()); - - EXPECT_EQ(blocked_url, blocked_url.DeprecatedGetOriginAsURL()); - EXPECT_EQ(source_location->url, "http://a.com/"); - EXPECT_EQ(source_location->line, 0u); - EXPECT_EQ(source_location->column, 0u); -} - -} // namespace content \ No newline at end of file
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index fe5a66d..6cb871e 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -6314,6 +6314,7 @@ if (validated_params.selection_start_offset < 0) { bad_message::ReceivedBadMessage( GetProcess(), bad_message::RFH_NEGATIVE_SELECTION_START_OFFSET); + return; } delegate_->ShowContextMenu(*this, std::move(context_menu_client),
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc index adfed60b..827b9a1 100644 --- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc +++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
@@ -274,20 +274,20 @@ "be done by disabling cookie and site data under Settings, Content " "Settings, Cookies." chrome_policy { - URLBlacklist { - URLBlacklist: { entries: '*' } + URLBlocklist { + URLBlocklist: { entries: '*' } } } chrome_policy { - URLWhitelist { - URLWhitelist { } + URLAllowlist { + URLAllowlist { } } } } comments: "Chrome would be unable to use service workers if this feature were " "disabled, which could result in a degraded experience for websites that " - "register a service worker. Using either URLBlacklist or URLWhitelist " + "register a service worker. Using either URLBlocklist or URLAllowlist " "policies (or a combination of both) limits the scope of these requests." )");
diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc index e2fff33..c4cc11b 100644 --- a/content/browser/webui/url_data_manager_backend.cc +++ b/content/browser/webui/url_data_manager_backend.cc
@@ -169,7 +169,6 @@ network::mojom::CSPDirectiveName::ChildSrc, network::mojom::CSPDirectiveName::ConnectSrc, network::mojom::CSPDirectiveName::DefaultSrc, - network::mojom::CSPDirectiveName::FencedFrameSrc, network::mojom::CSPDirectiveName::FormAction, network::mojom::CSPDirectiveName::FrameSrc, network::mojom::CSPDirectiveName::ImgSrc,
diff --git a/content/browser/worker_host/worker_script_fetcher.cc b/content/browser/worker_host/worker_script_fetcher.cc index 99831e64..729de4d7 100644 --- a/content/browser/worker_host/worker_script_fetcher.cc +++ b/content/browser/worker_host/worker_script_fetcher.cc
@@ -70,13 +70,13 @@ cookies_store: "user" setting: "This request can be prevented by disabling JavaScript." chrome_policy { - URLBlacklist { - URLBlacklist: { entries: '*' } + URLBlocklist { + URLBlocklist: { entries: '*' } } } chrome_policy { - URLWhitelist { - URLWhitelist { } + URLAllowlist { + URLAllowlist { } } } }
diff --git a/content/public/browser/url_data_source.cc b/content/public/browser/url_data_source.cc index fc37ef1..016cd43 100644 --- a/content/public/browser/url_data_source.cc +++ b/content/public/browser/url_data_source.cc
@@ -96,7 +96,6 @@ : std::string(); case network::mojom::CSPDirectiveName::BlockAllMixedContent: case network::mojom::CSPDirectiveName::ConnectSrc: - case network::mojom::CSPDirectiveName::FencedFrameSrc: case network::mojom::CSPDirectiveName::FrameSrc: case network::mojom::CSPDirectiveName::FontSrc: case network::mojom::CSPDirectiveName::ImgSrc:
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 8ad95792..6bf9eeb0 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -630,6 +630,21 @@ const base::Feature kPrivacySandboxAggregationService = { "PrivacySandboxAggregationService", base::FEATURE_DISABLED_BY_DEFAULT}; +// Enables Private Network Access checks for all types of web workers. +// +// This affects initial worker script fetches, fetches initiated by workers +// themselves, and service worker update fetches. +// +// The exact checks run are the same as for other document subresources, and +// depend on the state of other Private Network Access feature flags: +// +// - `kBlockInsecurePrivateNetworkRequests` +// - `kPrivateNetworkAccessSendPreflights` +// - `kPrivateNetworkAccessRespectPreflightResults` +// +const base::Feature kPrivateNetworkAccessForWorkers = { + "PrivateNetworkAccessForWorkers", base::FEATURE_DISABLED_BY_DEFAULT}; + // Requires that CORS preflight requests succeed before sending private network // requests. This flag implies `kPrivateNetworkAccessSendPreflights`. // See: https://wicg.github.io/private-network-access/#cors-preflight
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index 43ecc66..69a554b 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -156,6 +156,7 @@ CONTENT_EXPORT extern const base::Feature kPepperCrossOriginRedirectRestriction; CONTENT_EXPORT extern const base::Feature kHighPriorityBeforeUnload; CONTENT_EXPORT extern const base::Feature kPrivacySandboxAggregationService; +CONTENT_EXPORT extern const base::Feature kPrivateNetworkAccessForWorkers; CONTENT_EXPORT extern const base::Feature kPrivateNetworkAccessRespectPreflightResults; CONTENT_EXPORT extern const base::Feature kPrivateNetworkAccessSendPreflights;
diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc index a44da8a..2036d25 100644 --- a/content/public/common/content_switch_dependent_feature_overrides.cc +++ b/content/public/common/content_switch_dependent_feature_overrides.cc
@@ -78,6 +78,9 @@ std::cref(features::kWarnAboutSecurePrivateNetworkRequests), base::FeatureList::OVERRIDE_ENABLE_FEATURE}, {switches::kEnableExperimentalWebPlatformFeatures, + std::cref(features::kPrivateNetworkAccessForWorkers), + base::FeatureList::OVERRIDE_ENABLE_FEATURE}, + {switches::kEnableExperimentalWebPlatformFeatures, std::cref(features::kPrivateNetworkAccessRespectPreflightResults), base::FeatureList::OVERRIDE_ENABLE_FEATURE}, {switches::kEnableExperimentalWebPlatformFeatures,
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index bd5fd570..ea088448 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -2188,7 +2188,6 @@ "../browser/renderer_host/policy_container_host_unittest.cc", "../browser/renderer_host/policy_container_navigation_bundle_unittest.cc", "../browser/renderer_host/recently_destroyed_hosts_unittest.cc", - "../browser/renderer_host/render_frame_host_csp_context_unittest.cc", "../browser/renderer_host/render_frame_host_impl_unittest.cc", "../browser/renderer_host/render_frame_host_manager_unittest.cc", "../browser/renderer_host/render_frame_host_permissions_policy_unittest.cc",
diff --git a/content/test/data/accessibility/html/selectmenu-expected-fuchsia.txt b/content/test/data/accessibility/html/selectmenu-expected-fuchsia.txt index 118f96d..6045787 100644 --- a/content/test/data/accessibility/html/selectmenu-expected-fuchsia.txt +++ b/content/test/data/accessibility/html/selectmenu-expected-fuchsia.txt
@@ -3,7 +3,7 @@ ++++UNKNOWN ++++++UNKNOWN ++++++++UNKNOWN hidden -++++++++++UNKNOWN focusable label='Option 1' actions='{DEFAULT}' +++++++++++UNKNOWN focusable actions='{DEFAULT}' value='Option 1' ++++++++++++UNKNOWN actions='{DEFAULT}' ++++++++++++++STATIC_TEXT label='Option 1' ++++++++++++++++UNKNOWN label='Option 1' @@ -12,8 +12,8 @@ ++++++++++UNKNOWN hidden ++++++UNKNOWN ++++++++UNKNOWN hidden -++++++++++UNKNOWN label='Custom selectmenu button' actions='{DEFAULT}' +++++++++++UNKNOWN actions='{DEFAULT}' value='Custom selectmenu button' ++++++++++++STATIC_TEXT label='Custom selectmenu button' ++++++++++++++UNKNOWN label='Custom selectmenu button' ++++++++UNKNOWN hidden -++++++++++UNKNOWN hidden \ No newline at end of file +++++++++++UNKNOWN hidden
diff --git a/docs/accessibility/os/chromevox_on_desktop_linux.md b/docs/accessibility/os/chromevox_on_desktop_linux.md index 5b46ecf..6331449 100644 --- a/docs/accessibility/os/chromevox_on_desktop_linux.md +++ b/docs/accessibility/os/chromevox_on_desktop_linux.md
@@ -103,10 +103,10 @@ Pick the latest version and ``` -VERSION=1.49.3.7 +VERSION=1.49.3.14 TMPDIR=$(mktemp -d) -gsutil cp gs://chromeos-localmirror/distfiles/espeak-ng-$VERSION.tar.gz $TMPDIR -tar -C $TMPDIR -xvf $TMPDIR/espeak-ng-$VERSION.tar.gz +gsutil cp gs://chromeos-localmirror/distfiles/espeak-ng-$VERSION.tar.xz $TMPDIR +tar -C $TMPDIR -xvf $TMPDIR/espeak-ng-$VERSION.tar.xz sudo mkdir -p /usr/share/chromeos-assets/speech_synthesis/espeak-ng/ sudo chown -R $(whoami) /usr/share/chromeos-assets/ cp -r $TMPDIR/espeak-ng/chrome-extension/* /usr/share/chromeos-assets/speech_synthesis/espeak-ng
diff --git a/docs/accessibility/overview.md b/docs/accessibility/overview.md index be0f55b9..06256e6 100644 --- a/docs/accessibility/overview.md +++ b/docs/accessibility/overview.md
@@ -106,8 +106,8 @@ and if you call IAccessible::get_accName, it returns "How old are you?". Other methods let you walk the tree. -The Linux accessibility API, (ATK)[https://gnome.pages.gitlab.gnome.org/atk/], -is similar to (IAccessible2)[https://wiki.linuxfoundation.org/accessibility/iaccessible2/start], +The Linux accessibility API, [ATK](https://gnome.pages.gitlab.gnome.org/atk/), +is similar to [IAccessible2](https://wiki.linuxfoundation.org/accessibility/iaccessible2/start), aka IA2. Historical note: IA2 was developed to extend MSAA/IAccessible to add richer document support, in a way that was harmonious with ATK, in order to simplify implementing them both within the same product. Both APIs are @@ -208,10 +208,10 @@ and inspecting a tree directly. Note that you may want to enable the 'Internal' option. Click 'show accessibility tree' for a particular tab, then click again to refresh that tree. -* Using the [https://developer.chrome.com/extensions/automation]( -Automation API). -* Installing the [https://github.com/google/automation-inspector]( -Automation Inspector Chrome extension). +* Using the [Automation API]( +https://developer.chrome.com/extensions/automation). +* Installing the [Automation Inspector Chrome extension]( +https://github.com/google/automation-inspector). * Building and using [ax_dump_tree or ax_dump_events](tools/accessibility/inspect/README.md). These can be used to view accessibility trees and events from any application on Windows, Mac or Linux.
diff --git a/docs/contributing.md b/docs/contributing.md index a74baa6..d0d21ff 100644 --- a/docs/contributing.md +++ b/docs/contributing.md
@@ -50,8 +50,12 @@ ## Legal stuff -All contributors must complete the contributor license agreement. For -individual contributors, please complete the [Individual Contributor License +All contributors must have valid Gerrit/Google accounts (which means you must +be [old enough to manage your own +account](https://support.google.com/accounts/answer/1350409)) and complete the +contributor license agreement. + +For individual contributors, please complete the [Individual Contributor License Agreement][individual-cla] online. Corporate contributors must fill out the [Corporate Contributor License Agreement][corporate-cla] and send it to us as described on that page.
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_condition.cc b/extensions/browser/api/declarative_webrequest/webrequest_condition.cc index c3b1ec6..e9e07ad 100644 --- a/extensions/browser/api/declarative_webrequest/webrequest_condition.cc +++ b/extensions/browser/api/declarative_webrequest/webrequest_condition.cc
@@ -127,12 +127,13 @@ } // Verify that we are dealing with a Condition whose type we understand. - std::string instance_type; - if (!condition_dict->GetString(keys::kInstanceTypeKey, &instance_type)) { + const std::string* instance_type = + condition_dict->FindStringKey(keys::kInstanceTypeKey); + if (!instance_type) { *error = kConditionWithoutInstanceType; return nullptr; } - if (instance_type != keys::kRequestMatcherType) { + if (*instance_type != keys::kRequestMatcherType) { *error = kExpectedOtherConditionType; return nullptr; }
diff --git a/extensions/browser/api/printer_provider/printer_provider_api.cc b/extensions/browser/api/printer_provider/printer_provider_api.cc index 564e8b9..d2b8705 100644 --- a/extensions/browser/api/printer_provider/printer_provider_api.cc +++ b/extensions/browser/api/printer_provider/printer_provider_api.cc
@@ -70,23 +70,26 @@ void UpdatePrinterWithExtensionInfo(base::DictionaryValue* printer, const Extension* extension) { - std::string internal_printer_id; - CHECK(printer->GetString("id", &internal_printer_id)); + std::string* internal_printer_id = printer->FindStringKey("id"); + CHECK(internal_printer_id); printer->SetString("id", - GeneratePrinterId(extension->id(), internal_printer_id)); + GeneratePrinterId(extension->id(), *internal_printer_id)); printer->SetString("extensionId", extension->id()); printer->SetString("extensionName", extension->name()); - std::u16string printer_name; - if (printer->GetString("name", &printer_name) && - base::i18n::AdjustStringForLocaleDirection(&printer_name)) { - printer->SetString("name", printer_name); + std::string* printer_name = printer->FindStringKey("name"); + if (printer_name) { + std::u16string u16_printer_name = base::UTF8ToUTF16(*printer_name); + if (base::i18n::AdjustStringForLocaleDirection(&u16_printer_name)) + printer->SetString("name", u16_printer_name); } - std::u16string printer_description; - if (printer->GetString("description", &printer_description) && - base::i18n::AdjustStringForLocaleDirection(&printer_description)) { - printer->SetString("description", printer_description); + std::string* printer_description = printer->FindStringKey("description"); + if (printer_description) { + std::u16string u16_printer_description = + base::UTF8ToUTF16(*printer_description); + if (base::i18n::AdjustStringForLocaleDirection(&u16_printer_description)) + printer->SetString("description", u16_printer_description); } }
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc index 58afc41e..62df11c 100644 --- a/extensions/browser/api/web_request/web_request_api.cc +++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -271,8 +271,11 @@ bool FromHeaderDictionary(const base::DictionaryValue* header_value, std::string* name, std::string* out_value) { - if (!header_value->GetString(keys::kHeaderNameKey, name)) + const std::string* name_ptr = + header_value->FindStringKey(keys::kHeaderNameKey); + if (!name) return false; + *name = *name_ptr; // We require either a "value" or a "binaryValue" entry. const base::Value* value = header_value->FindKey(keys::kHeaderValueKey); @@ -2833,13 +2836,14 @@ const base::DictionaryValue* credentials_value = nullptr; EXTENSION_FUNCTION_VALIDATE( auth_credentials_value->GetAsDictionary(&credentials_value)); - std::u16string username; - std::u16string password; - EXTENSION_FUNCTION_VALIDATE( - credentials_value->GetString(keys::kUsernameKey, &username)); - EXTENSION_FUNCTION_VALIDATE( - credentials_value->GetString(keys::kPasswordKey, &password)); - response->auth_credentials = net::AuthCredentials(username, password); + const std::string* username = + credentials_value->FindStringKey(keys::kUsernameKey); + const std::string* password = + credentials_value->FindStringKey(keys::kPasswordKey); + EXTENSION_FUNCTION_VALIDATE(username); + EXTENSION_FUNCTION_VALIDATE(password); + response->auth_credentials = net::AuthCredentials( + base::UTF8ToUTF16(*username), base::UTF8ToUTF16(*password)); } }
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index 386a50d..56b2139 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -23961,7 +23961,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -24032,7 +24032,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -24109,7 +24109,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -24180,7 +24180,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -29691,7 +29691,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -30777,7 +30777,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -30848,7 +30848,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -32810,7 +32810,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -32887,7 +32887,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -32958,7 +32958,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -33029,7 +33029,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -33100,7 +33100,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -33171,7 +33171,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -36624,7 +36624,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -36703,7 +36703,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -37539,7 +37539,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -37613,7 +37613,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -37684,7 +37684,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -40820,7 +40820,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -40897,7 +40897,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -40974,7 +40974,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -42129,7 +42129,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -42208,7 +42208,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -42287,7 +42287,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -42366,7 +42366,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -42858,7 +42858,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -42929,7 +42929,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -43000,7 +43000,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -43071,7 +43071,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -44228,7 +44228,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -44299,7 +44299,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -48764,7 +48764,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -48851,7 +48851,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -56370,6 +56370,10 @@ value: 5 } experiments { + key: "luci.recipes.use_python3" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57283,7 +57287,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -63610,7 +63614,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -65412,7 +65416,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -65592,7 +65596,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -69973,7 +69977,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -70057,7 +70061,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -73415,7 +73419,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -77067,7 +77071,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -77154,7 +77158,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -77241,7 +77245,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -77963,7 +77967,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -78047,7 +78051,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -78131,7 +78135,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -78215,7 +78219,7 @@ } experiments { key: "luci.recipes.use_python3" - value: 5 + value: 25 } experiments { key: "luci.use_realms" @@ -81321,25 +81325,33 @@ dimensions: "os:Mac" dimensions: "pool:luci.chromium.webrtc.fyi" exe { - cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" - cipd_version: "refs/heads/main" - cmd: "luciexe" + cipd_package: "infra/chromium/bootstrapper/${platform}" + cipd_version: "latest" + cmd: "bootstrapper" } properties: '{' - ' "$build/goma": {' - ' "rpc_extra_params": "?prod",' - ' "server_host": "goma.chromium.org",' - ' "use_luci_auth": true' + ' "$bootstrap/exe": {' + ' "exe": {' + ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' + ' "cipd_version": "refs/heads/main",' + ' "cmd": [' + ' "luciexe"' + ' ]' + ' }' ' },' - ' "$recipe_engine/resultdb/test_presentation": {' - ' "column_keys": [],' - ' "grouping_keys": [' - ' "status",' - ' "v.test_suite"' - ' ]' + ' "$bootstrap/properties": {' + ' "properties_file": "infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder/properties.textpb",' + ' "top_level_project": {' + ' "ref": "refs/heads/main",' + ' "repo": {' + ' "host": "chromium.googlesource.com",' + ' "project": "chromium/src"' + ' }' + ' }' ' },' ' "builder_group": "chromium.webrtc.fyi",' + ' "led_builder_is_bootstrapped": true,' ' "recipe": "chromium"' '}' execution_timeout_secs: 7200 @@ -81407,20 +81419,33 @@ dimensions: "os:Mac" dimensions: "pool:luci.chromium.webrtc.fyi" exe { - cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" - cipd_version: "refs/heads/main" - cmd: "luciexe" + cipd_package: "infra/chromium/bootstrapper/${platform}" + cipd_version: "latest" + cmd: "bootstrapper" } properties: '{' - ' "$recipe_engine/resultdb/test_presentation": {' - ' "column_keys": [],' - ' "grouping_keys": [' - ' "status",' - ' "v.test_suite"' - ' ]' + ' "$bootstrap/exe": {' + ' "exe": {' + ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' + ' "cipd_version": "refs/heads/main",' + ' "cmd": [' + ' "luciexe"' + ' ]' + ' }' + ' },' + ' "$bootstrap/properties": {' + ' "properties_file": "infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Tester/properties.textpb",' + ' "top_level_project": {' + ' "ref": "refs/heads/main",' + ' "repo": {' + ' "host": "chromium.googlesource.com",' + ' "project": "chromium/src"' + ' }' + ' }' ' },' ' "builder_group": "chromium.webrtc.fyi",' + ' "led_builder_is_bootstrapped": true,' ' "recipe": "chromium"' '}' execution_timeout_secs: 7200
diff --git a/infra/config/recipes.star b/infra/config/recipes.star index e50c5717..a6a8ff6 100644 --- a/infra/config/recipes.star +++ b/infra/config/recipes.star
@@ -97,14 +97,14 @@ build_recipe( name = "recipe:angle_chromium", experiments = { - "luci.recipes.use_python3": 5, + "luci.recipes.use_python3": 25, }, ) build_recipe( name = "recipe:angle_chromium_trybot", experiments = { - "luci.recipes.use_python3": 5, + "luci.recipes.use_python3": 25, }, ) @@ -216,6 +216,9 @@ build_recipe( name = "recipe:presubmit", + experiments = { + "luci.recipes.use_python3": 1, + }, ) build_recipe(
diff --git a/infra/config/subprojects/webrtc/webrtc.fyi.star b/infra/config/subprojects/webrtc/webrtc.fyi.star index 57e97c3a..442bdd3 100644 --- a/infra/config/subprojects/webrtc/webrtc.fyi.star +++ b/infra/config/subprojects/webrtc/webrtc.fyi.star
@@ -91,7 +91,7 @@ triggered_by = ["WebRTC Chromium FYI Linux Builder"], ) -builder( +base_builder( name = "WebRTC Chromium FYI Mac Builder", goma_backend = goma.backend.RBE_PROD, os = os.MAC_ANY, @@ -103,7 +103,7 @@ os = os.MAC_ANY, ) -builder( +base_builder( name = "WebRTC Chromium FYI Mac Tester", os = os.MAC_ANY, triggered_by = ["WebRTC Chromium FYI Mac Builder"],
diff --git a/ios/chrome/app/startup/BUILD.gn b/ios/chrome/app/startup/BUILD.gn index 711a06d..a53397aab 100644 --- a/ios/chrome/app/startup/BUILD.gn +++ b/ios/chrome/app/startup/BUILD.gn
@@ -88,6 +88,7 @@ "//ios/components/webui:url_constants", "//ios/net", "//ios/public/provider/chrome/browser", + "//ios/public/provider/chrome/browser/app_utils:app_utils_api", "//ios/web", "//ios/web/public/init", ]
diff --git a/ios/chrome/app/startup/provider_registration.mm b/ios/chrome/app/startup/provider_registration.mm index 06dd5c8..a076585 100644 --- a/ios/chrome/app/startup/provider_registration.mm +++ b/ios/chrome/app/startup/provider_registration.mm
@@ -5,6 +5,7 @@ #include "ios/chrome/app/startup/provider_registration.h" #include "base/check.h" +#include "ios/public/provider/chrome/browser/app_utils/app_utils_api.h" #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -14,6 +15,9 @@ @implementation ProviderRegistration + (void)registerProviders { + // Needs to happen before any function of the provider API is used. + provider::Initialize(); + std::unique_ptr<ios::ChromeBrowserProvider> provider = ios::CreateChromeBrowserProvider();
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 52f3a926..94b6447a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -143,6 +143,7 @@ <translation id="2271351792809375263">يمكنك استخدام كلمات المرور المحفوظة على Chrome في التطبيقات الأخرى على جهازك.</translation> <translation id="2273327106802955778">قائمة "المزيد"</translation> <translation id="2286505070150039482">النص المُحدَّد</translation> +<translation id="2299218006564889602">يتم تشفير كلمات المرور على جهازك قبل حفظها في "مدير كلمات المرور" من Google.</translation> <translation id="2302742851632557585">تغيير كلمة المرور على الموقع الإلكتروني</translation> <translation id="2316709634732130529">استخدام كلمة المرور المقترحة</translation> <translation id="2320166752086256636">إخفاء لوحة المفاتيح</translation> @@ -546,6 +547,7 @@ <translation id="6066301408025741299">انقر للإلغاء.</translation> <translation id="60829778314739003">قبول ومتابعة</translation> <translation id="6084848228346514841">اختيار علامات التبويب</translation> +<translation id="6103540626693881831">التشفير على الجهاز فقط</translation> <translation id="6108923351542677676">الإعداد قيد التقدّم…</translation> <translation id="6119050551270742952">صفحة الويب الحالية في وضع التصفح المتخفي</translation> <translation id="6122191549521593678">متصل</translation> @@ -765,6 +767,7 @@ <translation id="797413074872316787">للمزامنة والتخصيص على جميع الأجهزة، عليك تفعيل المزامنة.</translation> <translation id="7978018860671536736">3. النقر على AutoFill Passwords (الملء التلقائي لكلمات المرور)</translation> <translation id="7982789257301363584">الشبكة</translation> +<translation id="7987685713885608670">لتوفير مزيد من الأمان، يتم تشفير كلمات المرور على جهازك قبل حفظها في "مدير كلمات المرور" من Google.</translation> <translation id="7993619969781047893">قد تتوقف الميزات عن العمل في بعض المواقع الإلكترونية.</translation> <translation id="800361585186029508">فتح عناوين URL التي تم إدخالها في Google Chrome</translation> <translation id="802154636333426148">تعذّر التنزيل</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index 9e0047e..b9f5712 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">ইনক’গনিট’ ম’ডটো উপলব্ধ নহয়</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">জুম ইন কৰক</translation> +<translation id="6583087784430677195">অফ কৰিবলৈ<ph name="BEGIN_LINK" />ছেটিং<ph name="END_LINK" /> খোলক আৰু পাছৱৰ্ড স্বয়ংক্ৰিয়ভাৱে পূৰ হোৱা সুবিধাটোলৈ যাওক।</translation> <translation id="6585618849026997638">এটা বুকমাৰ্ক যোগ দি আপুনি আপোনাৰ বাবে গুৰুত্বপূর্ণ এখন পৃষ্ঠালৈ উভতি যাব পাৰে</translation> <translation id="6603393121510733479">আপোনাৰ প্ৰতিষ্ঠানে ব্যক্তিগত ব্ৰাউজিং অফ কৰিছে। <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index b75000c89..c44d9a9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">Рэжым інкогніта недаступны</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Павялічыць</translation> +<translation id="6583087784430677195">Для выключэння адкрыйце <ph name="BEGIN_LINK" />Налады<ph name="END_LINK" /> і перайдзіце ў раздзел "Аўтазапаўненне пароляў".</translation> <translation id="6585618849026997638">Каб мець магчымасць вярнуцца да важнай для вас старонкі пазней, можна дадаць закладку</translation> <translation id="6603393121510733479">Ваша арганізацыя адключыла прыватны прагляд. <ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index e4500f9..fb69b68 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -614,6 +614,7 @@ <translation id="6524918542306337007">Режимът „инкогнито“ не е налице</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Приближаване</translation> +<translation id="6583087784430677195">За да изключите функцията, отворете <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" /> и след това AutoFill Passwords.</translation> <translation id="6585618849026997638">Можете да се върнете на важна за вас страница, като добавите отметка</translation> <translation id="6603393121510733479">Организацията ви е изключила режима за частно сърфиране. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 75864c9..a540059e3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Utilitza les contrasenyes que tens desades a Chrome en altres aplicacions del teu dispositiu</translation> <translation id="2273327106802955778">Més opcions del menú</translation> <translation id="2286505070150039482">Text marcat</translation> +<translation id="2299218006564889602">Les contrasenyes s'encripten al dispositiu abans de desar-les al gestor de contrasenyes de Google.</translation> <translation id="2302742851632557585">Canvia la contrasenya al lloc web</translation> <translation id="2316709634732130529">Utilitza la contrasenya suggerida</translation> <translation id="2320166752086256636">Amaga el teclat</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Toca per cancel·lar.</translation> <translation id="60829778314739003">Accepta i continua</translation> <translation id="6084848228346514841">Selecciona pestanyes</translation> +<translation id="6103540626693881831">Encriptació al dispositiu</translation> <translation id="6108923351542677676">Configuració en curs...</translation> <translation id="6119050551270742952">La pàgina web actual està en mode d'incògnit</translation> <translation id="6122191549521593678">En línia</translation> @@ -612,6 +614,7 @@ <translation id="6524918542306337007">El mode d'incògnit no està disponible</translation> <translation id="6537746030088321027">exemple.cat</translation> <translation id="6561262006871132942">Amplia</translation> +<translation id="6583087784430677195">Per desactivar aquesta funció, obre <ph name="BEGIN_LINK" />Configuració<ph name="END_LINK" /> i ves a Emplenament automàtic de contrasenyes.</translation> <translation id="6585618849026997638">Afegeix adreces d'interès per tornar a pàgines que consideris importants</translation> <translation id="6603393121510733479">La teva organització ha desactivat la navegació privada. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> @@ -763,6 +766,7 @@ <translation id="797413074872316787">Per sincronitzar i personalitzar el contingut en tots els dispositius, activa la sincronització.</translation> <translation id="7978018860671536736">3. Toca Emplenament automàtic de contrasenyes.</translation> <translation id="7982789257301363584">Xarxa</translation> +<translation id="7987685713885608670">Per a una seguretat addicional, encripta les contrasenyes al dispositiu abans de desar-les al gestor de contrasenyes de Google.</translation> <translation id="7993619969781047893">Pot ser que les funcions d'alguns llocs web no funcionin</translation> <translation id="800361585186029508">Obre els URL introduïts a Google Chrome.</translation> <translation id="802154636333426148">Error de baixada</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index cc74682..d6296c6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -614,6 +614,7 @@ <translation id="6524918542306337007">Anonymní režim není k dispozici</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Přiblížit</translation> +<translation id="6583087784430677195">Pokud tuto funkci chcete vypnout, otevřete <ph name="BEGIN_LINK" />Nastavení<ph name="END_LINK" /> a přejděte na Automatické vyplnění hesel.</translation> <translation id="6585618849026997638">Na stránky, které si přidáte do záložek, se budete moci snadno rychle vrátit</translation> <translation id="6603393121510733479">Vaše organizace vypnula soukromé prohlížení. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 7ac7450..2077558 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">Inkognitotilstand er ikke tilgængelig</translation> <translation id="6537746030088321027">eksempel.dk</translation> <translation id="6561262006871132942">Zoom ind</translation> +<translation id="6583087784430677195">Du kan deaktivere funktionen ved at åbne <ph name="BEGIN_LINK" />Indstillinger<ph name="END_LINK" /> og gå til Autoudfyld adgangskoder.</translation> <translation id="6585618849026997638">Du kan vende tilbage til en side, der er vigtig for dig, ved at tilføje et bogmærke</translation> <translation id="6603393121510733479">Din organisation har deaktiveret privat browsing. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index 8e9efd2a..f8f0365 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Sie können in Chrome gespeicherte Passwörter in anderen Apps auf Ihrem Gerät nutzen</translation> <translation id="2273327106802955778">Menü "Mehr"</translation> <translation id="2286505070150039482">Markierter Text</translation> +<translation id="2299218006564889602">Ihre Passwörter werden auf Ihrem Gerät verschlüsselt, bevor sie im Passwortmanager von Google gespeichert werden.</translation> <translation id="2302742851632557585">Passwort auf der Website ändern</translation> <translation id="2316709634732130529">Vorgeschlagenes Passwort verwenden</translation> <translation id="2320166752086256636">Tastatur ausblenden</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Zum Abbrechen tippen</translation> <translation id="60829778314739003">Akzeptieren und fortfahren</translation> <translation id="6084848228346514841">Tabs auswählen</translation> +<translation id="6103540626693881831">Verschlüsselung auf dem Gerät</translation> <translation id="6108923351542677676">Einrichtung läuft...</translation> <translation id="6119050551270742952">Die aktuelle Webseite ist im Inkognitomodus</translation> <translation id="6122191549521593678">Online</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Aktivieren Sie die Synchronisierung, um geräteübergreifend zu synchronisieren und zu personalisieren.</translation> <translation id="7978018860671536736">3. Tippen Sie auf „Passwörter automatisch ausfüllen“</translation> <translation id="7982789257301363584">Netzwerk</translation> +<translation id="7987685713885608670">Für zusätzliche Sicherheit können Sie Passwörter auf Ihrem Gerät verschlüsseln lassen, bevor sie im Passwortmanager von Google gespeichert werden.</translation> <translation id="7993619969781047893">Funktionen auf manchen Websites funktionieren möglicherweise nicht mehr</translation> <translation id="800361585186029508">Öffnet die eingegebenen URLs in Google Chrome.</translation> <translation id="802154636333426148">Downloadfehler</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index 447a5dc..e8cccfa4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">El modo Incógnito no está disponible</translation> <translation id="6537746030088321027">ejemplo.com</translation> <translation id="6561262006871132942">Acercar</translation> +<translation id="6583087784430677195">Para desactivar esta función, abre <ph name="BEGIN_LINK" />Configuración<ph name="END_LINK" /> y ve a Autocompletar contraseñas.</translation> <translation id="6585618849026997638">Agrega un favorito para poder regresar a una página que consideres importante</translation> <translation id="6603393121510733479">Tu organización desactivó la navegación privada. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index f289fd0..62370f6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Usa las contraseñas que has guardado en Chrome en otras aplicaciones de tu dispositivo</translation> <translation id="2273327106802955778">Menú más</translation> <translation id="2286505070150039482">Texto resaltado</translation> +<translation id="2299218006564889602">Tus contraseñas se cifran en tu dispositivo antes de que se guarden en el gestor de contraseñas de Google.</translation> <translation id="2302742851632557585">Cambiar contraseña en el sitio web</translation> <translation id="2316709634732130529">Usar contraseña sugerida</translation> <translation id="2320166752086256636">Ocultar teclado</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Toca para cancelar.</translation> <translation id="60829778314739003">Aceptar y continuar</translation> <translation id="6084848228346514841">Seleccionar pestañas</translation> +<translation id="6103540626693881831">Cifrado en el dispositivo</translation> <translation id="6108923351542677676">Configuración en curso…</translation> <translation id="6119050551270742952">Sitio actual en modo incógnito</translation> <translation id="6122191549521593678">Online</translation> @@ -612,6 +614,7 @@ <translation id="6524918542306337007">El modo de incógnito no está disponible</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Ampliar</translation> +<translation id="6583087784430677195">Para desactivar esta función, abre <ph name="BEGIN_LINK" />Ajustes<ph name="END_LINK" /> y ve a Autorellenar contraseñas.</translation> <translation id="6585618849026997638">Si añades un marcador a una página que consideres importante, podrás volver a ella más tarde.</translation> <translation id="6603393121510733479">Tu organización ha desactivado la navegación privada. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> @@ -763,6 +766,7 @@ <translation id="797413074872316787">Activa la sincronización para sincronizar y personalizar todos tus dispositivos.</translation> <translation id="7978018860671536736">3. Toca Autorrellenar contraseñas</translation> <translation id="7982789257301363584">Red</translation> +<translation id="7987685713885608670">Para una mayor seguridad, cifra las contraseñas en tu dispositivo antes de que se guarden en el gestor de contraseñas de Google.</translation> <translation id="7993619969781047893">Es posible que las funciones de algunos sitios no funcionen correctamente</translation> <translation id="800361585186029508">Abre las URL introducidas en Google Chrome.</translation> <translation id="802154636333426148">No se ha podido descargar el archivo</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 652f8cc..55b7821 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Kasutage Chrome'i salvestatud paroole oma seadme muudes rakendustes</translation> <translation id="2273327106802955778">Rohkem menüü-üksusi</translation> <translation id="2286505070150039482">Esiletõstetud tekst</translation> +<translation id="2299218006564889602">Paroolid krüpteeritakse teie seadmes, enne kui need salvestatakse Google'i paroolihaldurisse.</translation> <translation id="2302742851632557585">Muuda veebisaidi parooli</translation> <translation id="2316709634732130529">Kasuta soovitatud parooli</translation> <translation id="2320166752086256636">Peida klaviatuur</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Tühistamiseks puudutage.</translation> <translation id="60829778314739003">Nõustu ja jätka</translation> <translation id="6084848228346514841">Valige vahelehed</translation> +<translation id="6103540626693881831">Krüpteerimine seadmes</translation> <translation id="6108923351542677676">Seadistamine on pooleli ...</translation> <translation id="6119050551270742952">Praegune veebileht on inkognito režiimis</translation> <translation id="6122191549521593678">Onlain</translation> @@ -612,6 +614,7 @@ <translation id="6524918542306337007">Inkognito režiim pole saadaval</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Suumi sisse</translation> +<translation id="6583087784430677195">Väljalülitamiseks avage rakendus <ph name="BEGIN_LINK" />Seaded<ph name="END_LINK" /> ja jaotis Paroolide automaattäide.</translation> <translation id="6585618849026997638">Saate enda jaoks olulisele lehele naasta, lisades järjehoidja</translation> <translation id="6603393121510733479">Teie organisatsioon lülitas privaatse sirvimise välja. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation> @@ -763,6 +766,7 @@ <translation id="797413074872316787">Seadmete vahel sünkroonimiseks ja isikupärastamiseks lülitage sünkroonimine sisse.</translation> <translation id="7978018860671536736">3. Puudutage valikut AutoFill Passwords</translation> <translation id="7982789257301363584">Võrk</translation> +<translation id="7987685713885608670">Turvalisuse suurendamiseks krüpteerige paroolid oma seadmes, enne kui need salvestatakse Google'i paroolihaldurisse.</translation> <translation id="7993619969781047893">Mõne saidi funktsioonid ei pruugi töötada.</translation> <translation id="800361585186029508">Sisestatud URL-id avatakse Google Chrome'is.</translation> <translation id="802154636333426148">Allalaadimine ebaõnnestus</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index 36d6d2e..569d3b0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">از گذرواژههای ذخیرهشده در Chrome در دیگر برنامههای دستگاهتان استفاده کنید</translation> <translation id="2273327106802955778">منوی بیشتر</translation> <translation id="2286505070150039482">نوشتار برجستهشده</translation> +<translation id="2299218006564889602">گذرواژههایتان قبلاز ذخیره شدن در «مدیر گذرواژه Google» در دستگاهتان رمزگذاری میشود.</translation> <translation id="2302742851632557585">گذرواژه را در وبسایت تغییر دهید</translation> <translation id="2316709634732130529">استفاده از گذرواژه پیشنهادی</translation> <translation id="2320166752086256636">پنهان کردن صفحهکلید</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">برای لغو ضربه بزنید.</translation> <translation id="60829778314739003">پذیرش و ادامه</translation> <translation id="6084848228346514841">انتخاب برگهها</translation> +<translation id="6103540626693881831">رمزگذاری دروندستگاهی</translation> <translation id="6108923351542677676">تنظیم در حال انجام است...</translation> <translation id="6119050551270742952">صفحه وب کنونی در حالت ناشناس است</translation> <translation id="6122191549521593678">آنلاین</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">برای همگامسازی و شخصیسازی در همه دستگاهها، همگامسازی را روشن کنید.</translation> <translation id="7978018860671536736">۳. روی AutoFill Passwords (تکمیل خودکار گذرواژهها) ضربه بزنید</translation> <translation id="7982789257301363584">شبکه</translation> +<translation id="7987685713885608670">برای افزایش ایمنی، گذرواژهها را قبلاز ذخیره شدن در «مدیر گذرواژه Google» در دستگاهتان رمزگذاری میکند.</translation> <translation id="7993619969781047893">ویژگیهای بعضی از سایتها ممکن است درست کار نکنند</translation> <translation id="800361585186029508">نشانیهای وب واردشده در Google Chrome را باز میکند.</translation> <translation id="802154636333426148">بارگیری نشد</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index f3d1a7f..20d64a8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Käytä Chromeen tallennettuja salasanojasi muissa laitteen sovelluksissa</translation> <translation id="2273327106802955778">Lisäasetusvalikko</translation> <translation id="2286505070150039482">Korostettu teksti</translation> +<translation id="2299218006564889602">Salasanat salataan laitteella ennen niiden tallentamista Googlen Salasanojen ylläpitoon.</translation> <translation id="2302742851632557585">Vaihda salasana verkkosivustolla</translation> <translation id="2316709634732130529">Käytä salasanaehdotusta</translation> <translation id="2320166752086256636">Piilota näppäimistö</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Peru napauttamalla.</translation> <translation id="60829778314739003">Hyväksy ja jatka</translation> <translation id="6084848228346514841">Valitse välilehdet</translation> +<translation id="6103540626693881831">Laitteen salaus</translation> <translation id="6108923351542677676">Synkronointia valmistellaan…</translation> <translation id="6119050551270742952">Nykyinen verkkosivu on incognito-tilassa</translation> <translation id="6122191549521593678">Online</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Ota synkronointi käyttöön, niin sisältö synkronoidaan ja personoidaan eri laitteilla.</translation> <translation id="7978018860671536736">3. Valitse Automaattisen täytön salasanat</translation> <translation id="7982789257301363584">Verkko</translation> +<translation id="7987685713885608670">Salasanat kannattaa salata turvallisuussyistä laitteella ennen niiden tallentamista Googlen Salasanojen ylläpitoon.</translation> <translation id="7993619969781047893">Joidenkin sivustojen ominaisuudet saattavat lakata toimimasta</translation> <translation id="800361585186029508">Avaa syötetyt URL-osoitteet Google Chromessa.</translation> <translation id="802154636333426148">Lataus epäonnistui.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index df054fc..c9c2726 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Gamitin ang mga password na na-save mo sa iba pang app sa iyong device</translation> <translation id="2273327106802955778">Higit pang menu</translation> <translation id="2286505070150039482">Naka-highlight na Text</translation> +<translation id="2299218006564889602">Ine-encrypt ang iyong mga password sa device mo bago i-save ang mga ito sa Google Password Manager.</translation> <translation id="2302742851632557585">Palitan ang Password sa Website</translation> <translation id="2316709634732130529">Gamitin ang Iminumungkahing Password</translation> <translation id="2320166752086256636">Itago ang keyboard</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Pindutin upang kanselahin.</translation> <translation id="60829778314739003">Tanggapin at Magpatuloy</translation> <translation id="6084848228346514841">Pumili ng Mga Tab</translation> +<translation id="6103540626693881831">On-device na Pag-encrypt</translation> <translation id="6108923351542677676">Kasalukuyang sine-setup…</translation> <translation id="6119050551270742952">Nasa Incognito ang Kasalukuyang Webpage</translation> <translation id="6122191549521593678">Online</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Para mag-sync at mag-personalize sa mga device, i-on ang pag-sync.</translation> <translation id="7978018860671536736">3. I-tap ang I-autofill ang Mga Password</translation> <translation id="7982789257301363584">Network</translation> +<translation id="7987685713885608670">Para sa dagdag na kaligtasan, i-encrypt ang mga password sa iyong device bago i-save ang mga ito sa Google Password Manager.</translation> <translation id="7993619969781047893">Posibleng masira ang mga feature sa ilang site</translation> <translation id="800361585186029508">Binubuksan ang mga inilagay na URL sa Google Chrome.</translation> <translation id="802154636333426148">Hindi na-download</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index f597749..ac06b91 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">Le mode de navigation privée n'est pas offert</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Zoom avant</translation> +<translation id="6583087784430677195">Pour désactiver, ouvrez <ph name="BEGIN_LINK" />Réglages<ph name="END_LINK" /> et accédez à remplissage automatique des mots de passe.</translation> <translation id="6585618849026997638">Vous pouvez revenir à une page importante pour vous en ajoutant un favori</translation> <translation id="6603393121510733479">Votre organisation a désactivé la navigation privée. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index 22df45c..8c05beb2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">O modo de incógnito non está dispoñible</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Achegar</translation> +<translation id="6583087784430677195">Para desactivar esta función, abre <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" /> (Configuración) e vai a AutoFill Passwords (Autocompletar contrasinais).</translation> <translation id="6585618849026997638">Engade un marcador para volver acceder a unha páxina que consideres importante</translation> <translation id="6603393121510733479">A túa organización desactivou a navegación privada. <ph name="BEGIN_LINK" />Máis información<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index bd56294..34d95be 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">તમે Chromeમાં સાચવેલા પાસવર્ડનો તમારા ડિવાઇસની અન્ય ઍપમાં ઉપયોગ કરો</translation> <translation id="2273327106802955778">વધુ મેનૂ</translation> <translation id="2286505070150039482">હાઇલાઇટ કરેલી ટેક્સ્ટ</translation> +<translation id="2299218006564889602">તમારા પાસવર્ડને Google પાસવર્ડ મેનેજરમાં સાચવવામાં આવે એ પહેલાં તેમને તમારા ડિવાઇસમાં એન્ક્રિપ્ટ કરવામાં આવે છે.</translation> <translation id="2302742851632557585">વેબસાઇટ પર પાસવર્ડ બદલો</translation> <translation id="2316709634732130529">સૂચવેલ પાસવર્ડનો ઉપયોગ કરો</translation> <translation id="2320166752086256636">કીબોર્ડ છુપાવો</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">રદ કરવા માટે ટેપ કરો.</translation> <translation id="60829778314739003">સ્વીકારો અને આગળ વધો</translation> <translation id="6084848228346514841">કોઈ ટૅબ પસંદ કરો</translation> +<translation id="6103540626693881831">ડિવાઇસ પર એન્ક્રિપ્શન</translation> <translation id="6108923351542677676">સેટઅપની પ્રક્રિયા ચાલુ છે...</translation> <translation id="6119050551270742952">વર્તમાન વેબપેજ છૂપા મોડમાં છે</translation> <translation id="6122191549521593678">ઓનલાઇન</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">એકથી વધુ ડિવાઇસને સિંક અને મનગમતા બનાવવા માટે, સિંકની સુવિધા ચાલુ કરો.</translation> <translation id="7978018860671536736">3. પાસવર્ડ માટે ઑટોમૅટિક રીતે ભરવાની સુવિધા પર ટૅપ કરો</translation> <translation id="7982789257301363584">નેટવર્ક</translation> +<translation id="7987685713885608670">વધારાની સલામતી માટે, તમારા પાસવર્ડ Google પાસવર્ડ મેનેજરમાં સાચવવામાં આવે એ પહેલાં એમને તમારા ડિવાઇસમાં એન્ક્રિપ્ટ કરો.</translation> <translation id="7993619969781047893">અમુક સાઇટ પરની સુવિધાઓને કદાચ બંધ કરવામાં આવી શકે</translation> <translation id="800361585186029508">ઇનપુટ કરેલા URLsને Google Chromeમાં ખોલે છે.</translation> <translation id="802154636333426148">ડાઉનલોડ નિષ્ફળ થયું</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index a5f73824..516555c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -614,6 +614,7 @@ <translation id="6524918542306337007">Az inkognitó mód nem áll rendelkezésre</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Nagyítás</translation> +<translation id="6583087784430677195">A kikapcsoláshoz nyissa meg a <ph name="BEGIN_LINK" />Beállítások<ph name="END_LINK" /> menüt, és lépjen a Jelszavak automatikus kitöltése ponthoz.</translation> <translation id="6585618849026997638">A fontos oldalakra könyvjelző felvételével térhet vissza a későbbiekben.</translation> <translation id="6603393121510733479">Szervezete kikapcsolta az inkognitó módban való böngészést. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 019a40a2..02220fd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">Ինկոգնիտո ռեժիմը հասանելի չէ</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Մեծացնել</translation> +<translation id="6583087784430677195">Անջատելու համար բացեք <ph name="BEGIN_LINK" />Կարգավորումները<ph name="END_LINK" /> և անցեք «Գաղտնաբառերի ինքնալրացում»։</translation> <translation id="6585618849026997638">Էջանշեք կարևոր էջերը, որպեսզի կարողանաք վերադառնալ դրանց</translation> <translation id="6603393121510733479">Ձեր կազմակերպությունն անջատել է ինկոգնիտո ռեժիմը։ <ph name="BEGIN_LINK" />Իմանալ ավելին<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 1549cd2b..b5f69bc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Gunakan sandi yang Anda simpan ke Chrome di aplikasi lain pada perangkat</translation> <translation id="2273327106802955778">Menu lainnya</translation> <translation id="2286505070150039482">Teks yang Ditandai</translation> +<translation id="2299218006564889602">Sandi Anda dienkripsi di perangkat sebelum disimpan ke Pengelola Sandi Google.</translation> <translation id="2302742851632557585">Ubah Sandi di Situs</translation> <translation id="2316709634732130529">Gunakan Sandi yang Disarankan</translation> <translation id="2320166752086256636">Sembunyikan keyboard</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Ketuk untuk membatalkan.</translation> <translation id="60829778314739003">Setujui dan Lanjutkan</translation> <translation id="6084848228346514841">Pilih Tab</translation> +<translation id="6103540626693881831">Enkripsi di Perangkat</translation> <translation id="6108923351542677676">Penyiapan sedang berlangsung...</translation> <translation id="6119050551270742952">Halaman Web saat ini sedang dalam Mode Samaran</translation> <translation id="6122191549521593678">Online</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Untuk menyinkronkan dan mempersonalisasi berbagai perangkat, aktifkan sinkronisasi.</translation> <translation id="7978018860671536736">3. Ketuk AutoFill Passwords</translation> <translation id="7982789257301363584">Jaringan</translation> +<translation id="7987685713885608670">Untuk keamanan tambahan, enkripsi sandi di perangkat Anda sebelum disimpan ke Pengelola Sandi Google.</translation> <translation id="7993619969781047893">Fitur pada beberapa situs mungkin error</translation> <translation id="800361585186029508">Membuka URL yang dimasukkan di Google Chrome.</translation> <translation id="802154636333426148">Download gagal</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index e043893f..4ee8887b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">Huliðsstilling er ekki tiltæk</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Auka aðdrátt</translation> +<translation id="6583087784430677195">Opnaðu <ph name="BEGIN_LINK" />Stillingar<ph name="END_LINK" /> og síðan „Sjálfvirk útfylling aðgangsorða“ til að slökkva.</translation> <translation id="6585618849026997638">Þú getur komist aftur á mikilvæga síðu á einfaldan hátt með því að setja inn bókamerki</translation> <translation id="6603393121510733479">Fyrirtækið þitt slökkti á óskráðri vefnotkun. <ph name="BEGIN_LINK" />Frekari upplýsingar<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 3509c5e..f1455530 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">יש להשתמש בסיסמאות ששמרת ב-Chrome לאפליקציות אחרות במכשיר</translation> <translation id="2273327106802955778">התפריט 'עוד'</translation> <translation id="2286505070150039482">הטקסט המודגש</translation> +<translation id="2299218006564889602">הסיסמאות שלך מוצפנות במכשיר לפני שהן נשמרות במנהל הסיסמאות של Google.</translation> <translation id="2302742851632557585">שינוי הסיסמה באתר</translation> <translation id="2316709634732130529">שימוש בסיסמה המוצעת</translation> <translation id="2320166752086256636">הסתרת מקלדת</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">יש להקיש כדי לבטל.</translation> <translation id="60829778314739003">אישור והמשך</translation> <translation id="6084848228346514841">בחירת כרטיסיות</translation> +<translation id="6103540626693881831">הצפנה במכשיר</translation> <translation id="6108923351542677676">ההגדרה מתבצעת…</translation> <translation id="6119050551270742952">דף האינטרנט הנוכחי מוצג במצב אנונימי</translation> <translation id="6122191549521593678">אונליין</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">כדי לסנכרן ולהתאים אישית את החוויה במכשירים שונים, צריך להפעיל את הסנכרון.</translation> <translation id="7978018860671536736">3. מקישים על 'מילוי אוטומטי של סיסמאות'</translation> <translation id="7982789257301363584">רשת</translation> +<translation id="7987685713885608670">כדי לשפר את הבטיחות, כדאי להצפין את הסיסמאות במכשיר שלך לפני שהן נשמרות במנהל הסיסמאות של Google.</translation> <translation id="7993619969781047893">ייתכן שהתכונות של חלק מהאתרים לא יפעלו כראוי</translation> <translation id="800361585186029508">פתיחת כתובות ה-URL שהוזנו ב-Google Chrome.</translation> <translation id="802154636333426148">ההורדה נכשלה</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index 5ddaa2d..e8b63e7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Chrome-да сақталған құпия сөздерді құрылғыңыздағы басқа қолданбаларда пайдаланыңыз.</translation> <translation id="2273327106802955778">"Тағы" мәзірі</translation> <translation id="2286505070150039482">Бөлектелген мәтін</translation> +<translation id="2299218006564889602">Құрылғыдағы құпия сөздер Google Құпия сөздер реттегішіне сақтамас бұрын шифрланады.</translation> <translation id="2302742851632557585">Құпия сөзді веб-сайтта өзгерту</translation> <translation id="2316709634732130529">Ұсынылған құпия сөзді қолдану</translation> <translation id="2320166752086256636">Пернетақтаны жасыру</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Болдырмау үшін түртіңіз.</translation> <translation id="60829778314739003">Қабылдап, жалғастыру</translation> <translation id="6084848228346514841">Қойындыларды таңдау</translation> +<translation id="6103540626693881831">Құрылғыда шифрлау</translation> <translation id="6108923351542677676">Орнатылуда…</translation> <translation id="6119050551270742952">Ағымдағы веб-бет инкогнито режимінде</translation> <translation id="6122191549521593678">Онлайн</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Барлық құрылғыда синхрондау және жекелендіру үшін синхрондау функциясын қосыңыз.</translation> <translation id="7978018860671536736">3. "Құпия сөздерді автотолтыру" дегенді түртіңіз.</translation> <translation id="7982789257301363584">Желі</translation> +<translation id="7987685713885608670">Қосымша қауіпсіздікті қамтамасыз ету үшін құрылғыдағы құпия сөздерді Google Құпия сөздер реттегішіне сақтамас бұрын шифрлаңыз.</translation> <translation id="7993619969781047893">Кейбір сайттағы функциялар дұрыс жұмыс істемеуі мүмкін.</translation> <translation id="800361585186029508">Google Chrome браузерінде енгізілген URL мекенжайларын ашады.</translation> <translation id="802154636333426148">Жүктеу сәтсіз аяқталды</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index 5cfc3e3..0764953 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿನ ಇತರ ಆ್ಯಪ್ಗಳಲ್ಲಿ ನೀವು Chrome ನಲ್ಲಿ ಉಳಿಸಿದ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಬಳಸಿ</translation> <translation id="2273327106802955778">ಹೆಚ್ಚಿನ ಮೆನು</translation> <translation id="2286505070150039482">ಹೈಲೈಟ್ ಮಾಡಿದ ಪಠ್ಯ</translation> +<translation id="2299218006564889602">ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು Google ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕದಲ್ಲಿ ಉಳಿಸುವ ಮೊದಲು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗುತ್ತದೆ</translation> <translation id="2302742851632557585">ವೆಬ್ಸೈಟ್ನಲ್ಲಿ ಪಾಸ್ವರ್ಡ್ ಬದಲಾಯಿಸಿ</translation> <translation id="2316709634732130529">ಸೂಚಿಸಿರುವ ಪಾಸ್ವರ್ಡ್ ಬಳಸಿ</translation> <translation id="2320166752086256636">ಕೀಬೋರ್ಡ್ ಮರೆಮಾಡಿ</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">ರದ್ದುಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="60829778314739003">ಸಮ್ಮತಿಸಿ ಮತ್ತು ಮುಂದುವರಿಯಿರಿ</translation> <translation id="6084848228346514841">ಟ್ಯಾಬ್ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation> +<translation id="6103540626693881831">ಸಾಧನದಲ್ಲಿನ ಎನ್ಕ್ರಿಪ್ಶನ್</translation> <translation id="6108923351542677676">ಸೆಟಪ್ ಪ್ರಗತಿಯಲ್ಲಿದೆ...</translation> <translation id="6119050551270742952">ಪ್ರಸ್ತುತ ವೆಬ್ ಪುಟವು ಅಜ್ಞಾತ ಮೋಡ್ನಲ್ಲಿದೆ</translation> <translation id="6122191549521593678">ಆನ್ಲೈನ್</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">ಸಾಧನಗಳಾದ್ಯಂತ ಸಿಂಕ್ ಮಾಡಲು ಮತ್ತು ವೈಯಕ್ತೀಕರಿಸಲು, ಸಿಂಕ್ ಆನ್ ಮಾಡಿ.</translation> <translation id="7978018860671536736">3. ಸ್ವಯಂ ಭರ್ತಿ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="7982789257301363584">ನೆಟ್ವರ್ಕ್</translation> +<translation id="7987685713885608670">ಹೆಚ್ಚಿನ ಸುರಕ್ಷತೆಗಾಗಿ, ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು Google ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕದಲ್ಲಿ ಉಳಿಸುವ ಮೊದಲು ಅವುಗಳನ್ನು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿ.</translation> <translation id="7993619969781047893">ಕೆಲವು ಸೈಟ್ಗಳಲ್ಲಿನ ಫೀಚರ್ಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಬಹುದು</translation> <translation id="800361585186029508">Google Chrome ನಲ್ಲಿ ಇನ್ಪುಟ್ ಮಾಡಿದ URL ಗಳನ್ನು ತೆರೆಯುತ್ತದೆ.</translation> <translation id="802154636333426148">ಡೌನ್ಲೋಡ್ ವಿಫಲಗೊಂಡಿದೆ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 87ed60b..4ffc96a9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">기기의 다른 앱에서 Chrome에 저장한 비밀번호를 사용하세요</translation> <translation id="2273327106802955778">더보기 메뉴</translation> <translation id="2286505070150039482">강조표시된 텍스트</translation> +<translation id="2299218006564889602">비밀번호를 기기 내에서 암호화한 후 Google 비밀번호 관리자에 저장합니다</translation> <translation id="2302742851632557585">웹사이트에서 비밀번호 변경</translation> <translation id="2316709634732130529">추천 비밀번호 사용</translation> <translation id="2320166752086256636">키보드 숨기기</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">취소하려면 탭하세요.</translation> <translation id="60829778314739003">동의 및 계속</translation> <translation id="6084848228346514841">탭 선택</translation> +<translation id="6103540626693881831">기기 내 암호화</translation> <translation id="6108923351542677676">설정 진행 중...</translation> <translation id="6119050551270742952">현재 시크릿 모드에서 웹페이지 사용 중</translation> <translation id="6122191549521593678">온라인</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">모든 기기에서 동기화 및 맞춤설정하려면 동기화를 사용 설정하세요</translation> <translation id="7978018860671536736">3. AutoFill Passwords(비밀번호 자동 완성)를 탭합니다.</translation> <translation id="7982789257301363584">네트워크</translation> +<translation id="7987685713885608670">보안 강화를 위해 비밀번호를 기기 내에서 암호화한 후 Google 비밀번호 관리자에 저장합니다</translation> <translation id="7993619969781047893">일부 사이트에서는 기능이 작동하지 않을 수 있음</translation> <translation id="800361585186029508">입력된 URL을 Chrome에서 엽니다.</translation> <translation id="802154636333426148">다운로드 실패</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index 9249432e..cc720dc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">Inkognito režīms nav pieejams</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Tuvināt</translation> +<translation id="6583087784430677195">Atveriet sadaļu <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" /> (Iestatījumi) un pārejiet uz iestatījumu “AutoFill Passwords” (Automātiska paroļu aizpilde), lai to izslēgtu.</translation> <translation id="6585618849026997638">Varat pievienot grāmatzīmi, lai varētu atgriezties vajadzīgajā lapā</translation> <translation id="6603393121510733479">Jūsu organizācija izslēdza privātu pārlūkošanu. <ph name="BEGIN_LINK" />Uzzināt vairāk<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 8d59262..67827c0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">तुम्ही Chrome मध्ये सेव्ह केलेले पासवर्ड तुमच्या डिव्हाइसवरील इतर ॲप्समध्ये वापरा</translation> <translation id="2273327106802955778">अधिक मेनू</translation> <translation id="2286505070150039482">हायलाइट केलेला मजकूर</translation> +<translation id="2299218006564889602">तुमचे पासवर्ड हे Google पासवर्ड व्यवस्थापक यामध्ये सेव्ह केले जाण्यापूर्वी ते तुमच्या डिव्हाइसवर एंक्रिप्ट केले जातात.</translation> <translation id="2302742851632557585">वेबसाइट वर पासवर्ड बदला</translation> <translation id="2316709634732130529">सुचवलेला पासवर्ड वापरा</translation> <translation id="2320166752086256636">कीबोर्ड लपवा</translation> @@ -546,6 +547,7 @@ <translation id="6066301408025741299">रद्द करण्यासाठी टॅप करा.</translation> <translation id="60829778314739003">स्वीकारा आणि पुढे सुरू ठेवा</translation> <translation id="6084848228346514841">टॅब निवडा</translation> +<translation id="6103540626693881831">डिव्हाइसवरील एंक्रिप्शन</translation> <translation id="6108923351542677676">सेटअप प्रगती पथावर आहे...</translation> <translation id="6119050551270742952">सध्याचे वेबपेज गुप्त मोडमध्ये सुरू आहे</translation> <translation id="6122191549521593678">ऑनलाइन</translation> @@ -766,6 +768,7 @@ <translation id="797413074872316787">सर्व डिव्हाइसवर सिंक आणि पर्सनलाइझ करण्यासाठी, सिंक सुरू करा.</translation> <translation id="7978018860671536736">३. AutoFill पासवर्ड वर टॅप करा</translation> <translation id="7982789257301363584">नेटवर्क</translation> +<translation id="7987685713885608670">अतिरिक्त सुरक्षिततेसाठी, पासवर्ड हे Google पासवर्ड व्यवस्थापक यामध्ये सेव्ह केले जाण्यापूर्वी ते तुमच्या डिव्हाइसवर एंक्रिप्ट करा.</translation> <translation id="7993619969781047893">काही साइटवरील वैशिष्ट्यांमध्ये खंड पडू शकतो</translation> <translation id="800361585186029508">Google Chrome मध्ये इनपुट केलेल्या URL उघडते.</translation> <translation id="802154636333426148">डाउनलोड अयशस्वी झाले</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 7f7abf1..7650c4d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Gunakan kata laluan yang anda simpan pada Chrome dalam apl lain pada peranti anda</translation> <translation id="2273327106802955778">Lagi menu</translation> <translation id="2286505070150039482">Teks Yang Diserlahkan</translation> +<translation id="2299218006564889602">Kata laluan anda disulitkan pada peranti sebelum disimpan ke Pengurus Kata Laluan Google.</translation> <translation id="2302742851632557585">Tukar Kata Laluan pada Tapak Web</translation> <translation id="2316709634732130529">Gunakan Kata Laluan yang Dicadangkan</translation> <translation id="2320166752086256636">Sembunyikan papan kekunci</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Ketik untuk membatalkan.</translation> <translation id="60829778314739003">Terima dan Teruskan</translation> <translation id="6084848228346514841">Pilih Tab</translation> +<translation id="6103540626693881831">Penyulitan pada Peranti</translation> <translation id="6108923351542677676">Persediaan sedang berjalan...</translation> <translation id="6119050551270742952">Halaman web semasa dalam mod Inkognito</translation> <translation id="6122191549521593678">Dalam talian</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Hidupkan penyegerakan untuk melakukan penyegerakan dan pemperibadian pada semua peranti.</translation> <translation id="7978018860671536736">3. Ketik Kata Laluan Autolengkap</translation> <translation id="7982789257301363584">Rangkaian</translation> +<translation id="7987685713885608670">Untuk keselamatan tambahan, sulitkan kata laluan pada peranti sebelum disimpan ke Pengurus Kata Laluan Google.</translation> <translation id="7993619969781047893">Ciri pada sesetengah tapak mungkin rosak</translation> <translation id="800361585186029508">Membuka URL yang dimasukkan dalam Google Chrome.</translation> <translation id="802154636333426148">Muat turun gagal</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index 80a18a2..e07aaa7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Bruk passordene du har lagret i Chrome, i andre apper på enheten</translation> <translation id="2273327106802955778">Mer-menyen</translation> <translation id="2286505070150039482">Markert tekst</translation> +<translation id="2299218006564889602">Passordene dine krypteres på enheten før de lagres i Google Passordlagring.</translation> <translation id="2302742851632557585">Bytt passord på nettstedet</translation> <translation id="2316709634732130529">Bruk foreslått passord</translation> <translation id="2320166752086256636">Skjul tastaturet</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Trykk for å avbryte.</translation> <translation id="60829778314739003">Godta og fortsett</translation> <translation id="6084848228346514841">Velg faner</translation> +<translation id="6103540626693881831">Kryptering på enheten</translation> <translation id="6108923351542677676">Konfigurasjon pågår …</translation> <translation id="6119050551270742952">Den gjeldende nettsiden er på inkognito</translation> <translation id="6122191549521593678">Pålogget</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">For å synkronisere flere enheter og gi dem samme personlige preg, slå på synkronisering.</translation> <translation id="7978018860671536736">3. Trykk på Autofyll passord</translation> <translation id="7982789257301363584">Nettverk</translation> +<translation id="7987685713885608670">For ekstra trygghet kan du kryptere passord på enheten før de lagres i Google Passordlagring.</translation> <translation id="7993619969781047893">Det kan hende at funksjoner på enkelte nettsteder slutter å fungere</translation> <translation id="800361585186029508">Åpner de oppgitte nettadressene i Google Chrome.</translation> <translation id="802154636333426148">Nedlastingen mislyktes</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb index 227ac13..3f8cf99 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">ਤੁਹਾਡੇ ਡੀਵਾਈਸ 'ਤੇ ਹੋਰ ਐਪਾਂ ਵਿੱਚ ਤੁਹਾਡੇ ਵੱਲੋਂ Chrome 'ਤੇ ਰੱਖਿਅਤ ਕੀਤੇ ਗਏ ਪਾਸਵਰਡਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ</translation> <translation id="2273327106802955778">ਹੋਰ ਮੀਨੂ</translation> <translation id="2286505070150039482">ਉਜਾਗਰ ਕੀਤੀ ਲਿਖਤ</translation> +<translation id="2299218006564889602">Google ਪਾਸਵਰਡ ਪ੍ਰਬੰਧਕ 'ਤੇ ਰੱਖਿਅਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ 'ਤੇ ਇਨਕ੍ਰਿਪਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।</translation> <translation id="2302742851632557585">ਵੈੱਬਸਾਈਟ 'ਤੇ ਪਾਸਵਰਡ ਬਦਲੋ</translation> <translation id="2316709634732130529">ਸੁਝਾਇਆ ਪਾਸਵਰਡ ਵਰਤੋ</translation> <translation id="2320166752086256636">ਕੀ-ਬੋਰਡ ਲੁੁਕਾਓ</translation> @@ -543,6 +544,7 @@ <translation id="6066301408025741299">ਰੱਦ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।</translation> <translation id="60829778314739003">ਸਵੀਕਾਰ ਕਰੋ ਅਤੇ ਜਾਰੀ ਰੱਖੋ</translation> <translation id="6084848228346514841">ਟੈਬਾਂ ਚੁਣੋ</translation> +<translation id="6103540626693881831">ਡੀਵਾਈਸ 'ਤੇ ਇਨਕ੍ਰਿਪਸ਼ਨ</translation> <translation id="6108923351542677676">ਸੈਟਅਪ ਚਾਲੂ ਹੈ...</translation> <translation id="6119050551270742952">ਵਰਤਮਾਨ ਵੈੱਬਪੰਨਾ ਇਨਕੋਗਨਿਟੋ 'ਤੇ</translation> <translation id="6122191549521593678">ਆਨਲਾਈਨ</translation> @@ -762,6 +764,7 @@ <translation id="797413074872316787">ਡੀਵਾਈਸਾਂ ਵਿਚਾਲੇ ਸਿੰਕ ਕਰਨ ਅਤੇ ਵਿਅਕਤੀਗਤ ਬਣਾਉਣ ਲਈ, ਸਿੰਕ ਚਾਲੂ ਕਰੋ।</translation> <translation id="7978018860671536736">3. ਆਟੋਫਿਲ ਪਾਸਵਰਡ 'ਤੇ ਟੈਪ ਕਰੋ</translation> <translation id="7982789257301363584">ਨੈੱਟਵਰਕ</translation> +<translation id="7987685713885608670">ਵਾਧੂ ਸੁਰੱਖਿਆ ਲਈ, Google ਪਾਸਵਰਡ ਪ੍ਰਬੰਧਕ 'ਤੇ ਰੱਖਿਅਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪਾਸਵਰਡਾਂ ਨੂੰ ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ ਇਨਕ੍ਰਿਪਟ ਕਰੋ।</translation> <translation id="7993619969781047893">ਸ਼ਾਇਦ ਕੁਝ ਸਾਈਟਾਂ 'ਤੇ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਠੀਕ ਤਰੀਕੇ ਨਾਲ ਕੰਮ ਨਾ ਕਰਨ</translation> <translation id="800361585186029508">ਦਾਖਲ ਕੀਤੇ URL ਨੂੰ Google Chrome ਵਿੱਚ ਖੋਲ੍ਹਦਾ ਹੈ।</translation> <translation id="802154636333426148">ਡਾਊਨਲੋਡ ਅਸਫਲ ਰਿਹਾ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 9aaeb44..25e848a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Используйте пароли, сохраненные в Chrome, в других приложениях на устройстве.</translation> <translation id="2273327106802955778">Меню "Ещё"</translation> <translation id="2286505070150039482">Выделенный текст</translation> +<translation id="2299218006564889602">Ваши пароли шифруются на устройстве и только потом сохраняются в Диспетчере паролей Google.</translation> <translation id="2302742851632557585">Сменить пароль на сайте</translation> <translation id="2316709634732130529">Использовать предложенный пароль</translation> <translation id="2320166752086256636">Скрыть клавиатуру</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Нажмите, чтобы отменить загрузку</translation> <translation id="60829778314739003">Принять и продолжить</translation> <translation id="6084848228346514841">Выберите вкладки</translation> +<translation id="6103540626693881831">Шифрование на устройстве</translation> <translation id="6108923351542677676">Настройка…</translation> <translation id="6119050551270742952">Открыто в режиме инкогнито</translation> <translation id="6122191549521593678">Онлайн</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Чтобы синхронизировать и персонализировать данные на всех устройствах, включите синхронизацию.</translation> <translation id="7978018860671536736">3. Нажмите "Автозаполнение пароля".</translation> <translation id="7982789257301363584">Сеть</translation> +<translation id="7987685713885608670">В целях повышения безопасности шифруйте пароли на устройстве, прежде чем они будут сохраняться в Диспетчере паролей Google.</translation> <translation id="7993619969781047893">Некоторые функции на сайтах могут работать некорректно</translation> <translation id="800361585186029508">Введенные URL будут открываться в Google Chrome.</translation> <translation id="802154636333426148">Ошибка скачивания</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb index 1dc5975..c1d416b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">ඔබගේ උපාංගයේ වෙනත් යෙදුම්වල ඔබ Chrome වෙත සුරැකි මුරපද භාවිත කරන්න</translation> <translation id="2273327106802955778">තව මෙනුව</translation> <translation id="2286505070150039482">උද්දීපනය කළ පෙළ</translation> +<translation id="2299218006564889602">ඔබගේ මුරපදය Google මුරපද කළමනාකරු වෙත සුරැකීමට පෙර ඔබගේ උපාංගයේ සංකේතනය කර ඇත.</translation> <translation id="2302742851632557585">වෙබ් අඩවිය මත මුරපදය වෙනස් කරන්න</translation> <translation id="2316709634732130529">යෝජිත මුරපදය භාවිත කරන්න</translation> <translation id="2320166752086256636">යතුරු පුවරුව සඟවන්න</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">අවලංගු කිරීමට තට්ටු කරන්න.</translation> <translation id="60829778314739003">පිළිගෙන ඉදිරියට යන්න</translation> <translation id="6084848228346514841">ටැබ තෝරන්න</translation> +<translation id="6103540626693881831">උපාංගයේ සංකේතනය</translation> <translation id="6108923351542677676">පිහිටුවීම දැනට සිදුවෙමින් පවතී...</translation> <translation id="6119050551270742952">වත්මන් වෙබ් පිටු අප්රසිද්ධ මත තිබේ</translation> <translation id="6122191549521593678">සබැඳි</translation> @@ -612,6 +614,7 @@ <translation id="6524918542306337007">අප්රසිද්ධ ප්රකාරය ලබා ගත නොහැකිය</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">විශාලන කරන්න</translation> +<translation id="6583087784430677195">ක්රියාවිරහිත කිරීමට, <ph name="BEGIN_LINK" />සැකසීම්<ph name="END_LINK" /> විවෘත කර මුරපද ස්වයං පිරවුම වෙත යන්න.</translation> <translation id="6585618849026997638">පිටුසනක් එක් කිරීමෙන් ඔබට වැදගත් වන පිටුවකට ආපසු පැමිණීමට ඔබට හැකිය</translation> <translation id="6603393121510733479">ඔබගේ සංවිධානය රහසිගත බ්රවුස් කිරීම ක්රියාවිරහිත කර දැමීය. <ph name="BEGIN_LINK" />තව දැන ගන්න<ph name="END_LINK" /></translation> @@ -763,6 +766,7 @@ <translation id="797413074872316787">උපාංග හරහා සමමුහුර්ත සහ පෞද්ගලිකකරණය කිරීමට, සමමුහුර්තය ක්රියාත්මක කරන්න.</translation> <translation id="7978018860671536736">3. ස්වයං පිරවුම් මුරපද තට්ටු කරන්න</translation> <translation id="7982789257301363584">ජාලය</translation> +<translation id="7987685713885608670">එක් කළ ආරක්ෂාව සඳහා, Google මුරපද කළමනාකරු වෙත සුරැකීමට පෙර ඔබගේ උපාංගයේ මුරපද සංකේතනය කරන්න.</translation> <translation id="7993619969781047893">සමහර වෙබ් අඩවි මත විශේෂාංග කැඩී ගිය හැක</translation> <translation id="800361585186029508">ආදාන කළ URL ටික Google Chrome තුළින් විවෘත කරයි.</translation> <translation id="802154636333426148">බාගැනීම අසමත් විය</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index f7c0beb..c544bc8a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Používajte heslá, ktoré ste si uložili do Chromu, v ďalších aplikáciách v zariadení</translation> <translation id="2273327106802955778">Ponuka Viac</translation> <translation id="2286505070150039482">Zvýraznený text</translation> +<translation id="2299218006564889602">Heslá sú šifrované v zariadení ešte pred ich uložením do správcu hesiel Google.</translation> <translation id="2302742851632557585">Zmeniť heslo na webe</translation> <translation id="2316709634732130529">Použiť navrhnuté heslo</translation> <translation id="2320166752086256636">Skryť klávesnicu</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Sťahovanie zrušíte klepnutím.</translation> <translation id="60829778314739003">Súhlasiť a pokračovať</translation> <translation id="6084848228346514841">Výber kariet</translation> +<translation id="6103540626693881831">Šifrovanie v zariadení</translation> <translation id="6108923351542677676">Inštaluje sa...</translation> <translation id="6119050551270742952">Aktuálna webová stránka je v anonymnom režime</translation> <translation id="6122191549521593678">Online</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Ak chcete synchronizovať a prispôsobovať viaceré zariadenia, zapnite synchronizáciu.</translation> <translation id="7978018860671536736">3. Klepnite na Automatické dopĺňanie hesiel</translation> <translation id="7982789257301363584">Sieť</translation> +<translation id="7987685713885608670">V záujme zvýšenia zabezpečenia šifrujte heslá v zariadení ešte pred ich uložením do správcu hesiel Google.</translation> <translation id="7993619969781047893">Funkcie na niektorých weboch môžu zlyhávať</translation> <translation id="800361585186029508">Otvorí zadané webové adresy v prehliadači Google Chrome.</translation> <translation id="802154636333426148">Stiahnutie zlyhalo</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb index fe767988..f82b8ee 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">Modaliteti "i fshehtë" nuk ofrohet</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Zmadho</translation> +<translation id="6583087784430677195">Për ta fikur, hap <ph name="BEGIN_LINK" />Cilësimet<ph name="END_LINK" /> dhe shko te "Plotësimi automatik i fjalëkalimeve".</translation> <translation id="6585618849026997638">Mund të kthehesh te një faqe që është e rëndësishme për ty duke shtuar një faqeshënues</translation> <translation id="6603393121510733479">Organizata jote ka çaktivizuar shfletimin privat. <ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index d3d950a..e83f19f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Tumia manenosiri uliyohifadhi kwenye Chrome, katika programu zingine kwenye kifaa chako</translation> <translation id="2273327106802955778">Menyu zaidi</translation> <translation id="2286505070150039482">Maandishi Yaliyoangaziwa</translation> +<translation id="2299218006564889602">Manenosiri yako husimbwa kwa njia fiche kwenye kifaa chako kabla hayajahifadhiwa kwenye Kidhibiti cha Manenosiri cha Google.</translation> <translation id="2302742851632557585">Badilisha Nenosiri kwenye Tovuti</translation> <translation id="2316709634732130529">Tumia Nenosiri Linalopendekezwa</translation> <translation id="2320166752086256636">Ficha kibodi</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Gusa ili kughairi.</translation> <translation id="60829778314739003">Kubali na Uendelee</translation> <translation id="6084848228346514841">Chagua Vichupo</translation> +<translation id="6103540626693881831">Usimbaji Fiche Kwenye Kifaa</translation> <translation id="6108923351542677676">Usanidi unaendelea...</translation> <translation id="6119050551270742952">Ukurasa wa sasa wa Wavuti uko katika Hali Fiche</translation> <translation id="6122191549521593678">Mtandaoni</translation> @@ -612,6 +614,7 @@ <translation id="6524918542306337007">Hali Fiche Haipatikani</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Vuta karibu</translation> +<translation id="6583087784430677195">Ili uzime, fungua <ph name="BEGIN_LINK" />Mipangilio<ph name="END_LINK" /> kisha uende kwenye sehemu ya Kujaza Manenosiri Kiotomatiki.</translation> <translation id="6585618849026997638">Unaweza kurudi kwenye ukurasa ambao ni muhimu kwako kwa kuuweka alamisho.</translation> <translation id="6603393121510733479">Shirika lako limezima kipengele cha kuvinjari kwa faragha. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation> @@ -763,6 +766,7 @@ <translation id="797413074872316787">Ili usawazishe na uweke mapendeleo kwenye vifaa mbalimbali, washa kipengele cha kusawazisha.</translation> <translation id="7978018860671536736">3. Gusa 'Jaza Manenosiri Kiotomatiki'</translation> <translation id="7982789257301363584">Mtandao</translation> +<translation id="7987685713885608670">Ili kuimarisha usalama, simba manenosiri kwa njia fiche kwenye kifaa chako kabla hayajahifadhiwa kwenye Kidhibiti cha Manenosiri cha Google.</translation> <translation id="7993619969781047893">Huenda vipengele kwenye baadhi ya tovuti vikakosa kufanya kazi</translation> <translation id="800361585186029508">Hufungua URL zilizowekwa katika Google Chrome.</translation> <translation id="802154636333426148">Haikuweza kupakua</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index 1499bfa..13fd86b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Chromeமில் நீங்கள் சேமித்துள்ள கடவுச்சொற்களை உங்கள் சாதனத்தில் உள்ள பிற ஆப்ஸில் பயன்படுத்தலாம்</translation> <translation id="2273327106802955778">மேலும் விருப்பங்களுக்கான மெனு</translation> <translation id="2286505070150039482">ஹைலைட் செய்யப்பட்ட வார்த்தைகள்</translation> +<translation id="2299218006564889602">Google கடவுச்சொல் நிர்வாகியில் சேமிக்கப்படுவதற்கு முன்பு உங்கள் சாதனத்தில் கடவுச்சொற்கள் என்க்ரிப்ஷன் செய்யப்படுகின்றன.</translation> <translation id="2302742851632557585">இணையதளத்தில் கடவுச்சொல்லை மாற்றுங்கள்</translation> <translation id="2316709634732130529">பரிந்துரைக்கப்பட்ட கடவுச்சொல்லைப் பயன்படுத்து</translation> <translation id="2320166752086256636">கீபோர்டை மறை</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">ரத்துசெய்ய தட்டவும்.</translation> <translation id="60829778314739003">ஏற்றுக்கொண்டு, தொடர்க</translation> <translation id="6084848228346514841">தாவல்களைத் தேர்ந்தெடுக்கவும்</translation> +<translation id="6103540626693881831">சாதன என்க்ரிப்ஷன்</translation> <translation id="6108923351542677676">அமைவு செயலிலுள்ளது...</translation> <translation id="6119050551270742952">இந்த இணையப் பக்கம் மறைநிலையில் உள்ளது</translation> <translation id="6122191549521593678">ஆன்லைன்</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">ஒத்திசைவை இயக்கி அனைத்துச் சாதனங்களிலும் ஒத்திசைக்கவும் பிரத்தியேகமாக்கவும்.</translation> <translation id="7978018860671536736">3. 'கடவுச்சொற்களைத் தானாக நிரப்பு' என்பதைத் தட்டவும்</translation> <translation id="7982789257301363584">நெட்வொர்க்</translation> +<translation id="7987685713885608670">கூடுதல் பாதுகாப்பைப் பெற, Google கடவுச்சொல் நிர்வாகியில் சேமிக்கப்படுவதற்கு முன்பு உங்கள் சாதனத்தில் கடவுச்சொற்கள் என்க்ரிப்ஷன் செய்யப்படும்.</translation> <translation id="7993619969781047893">சில தளங்களிலுள்ள அம்சங்கள் செயல்படாமல் போகக்கூடும்</translation> <translation id="800361585186029508">உள்ளிடப்பட்ட URLகளை Google Chromeமில் திறக்கும்.</translation> <translation id="802154636333426148">பதிவிறக்க முடியவில்லை</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index c59779b..ae8bf3d7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -252,7 +252,7 @@ <translation id="3244271242291266297">MM</translation> <translation id="3252394070589632019"><ph name="VALUE" />, <ph name="ADDITIONAL_INFO" />, <ph name="NUM_SUGGESTIONS" />లో <ph name="INDEX" /></translation> <translation id="3268451620468152448">ఓపెన్ టాబ్లు</translation> -<translation id="3272527697863656322">రద్దు చేయి</translation> +<translation id="3272527697863656322">రద్దు చేయండి</translation> <translation id="3277021493514034324">సైట్ అడ్రస్ కాపీ చేయబడింది</translation> <translation id="3285962946108803577">పేజీని షేర్ చేయి...</translation> <translation id="3290875554372353449">ఖాతాను ఎంచుకోండి</translation> @@ -420,7 +420,7 @@ <translation id="4860895144060829044">కాల్ చేయండి</translation> <translation id="4872323082491632254">పాస్వర్డ్లను చెక్ చేయండి</translation> <translation id="4881695831933465202">తెరువు</translation> -<translation id="4901778704868714008">సేవ్ చేయి...</translation> +<translation id="4901778704868714008">సేవ్ చేయండి...</translation> <translation id="4904877109095351937">చదివినట్లు గుర్తు పెట్టు</translation> <translation id="4908869848243824489">Google ద్వారా Discover</translation> <translation id="4930268273022498155">ఇప్పటికే ఉన్న డేటాను తొలగించండి. మీరు <ph name="USER_EMAIL1" />కు వెనక్కు వెళ్లడం ద్వారా దాన్ని తిరిగి పొందవచ్చు.</translation> @@ -461,7 +461,7 @@ <translation id="5271549068863921519">పాస్వర్డ్ను సేవ్ చేయి</translation> <translation id="5295239312320826323"><ph name="USER_EMAIL" /> ఖాతాను తీసివేయాలా?</translation> <translation id="5300589172476337783">చూపించు</translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5339316356165661760">సింక్ను ఆన్ చేయి</translation> <translation id="5360976571138293719">గోప్యత, భద్రత, అలాగే డేటా సేకరణకు సంబంధించిన మరిన్ని సెట్టింగ్ల కోసం, <ph name="BEGIN_LINK" />Google సర్వీస్ల<ph name="END_LINK" />ను చూడండి.</translation> <translation id="5388358297987318779">చిత్రాన్ని తెరువు</translation> @@ -619,7 +619,7 @@ <translation id="6603393121510733479">మీ సంస్థ, ప్రైవేట్ బ్రౌజింగ్ను ఆఫ్ చేసింది. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> <translation id="6610002944194042868">అనువాదం ఎంపికలు</translation> -<translation id="6620279676667515405">రద్దు చేయి</translation> +<translation id="6620279676667515405">రద్దు చేయండి</translation> <translation id="6624219055418309072">అజ్ఞాత మోడ్లో బ్లాక్ చేయండి</translation> <translation id="6628106477656132239">గడువు ముగింపు తేదీ చెల్లదు</translation> <translation id="6634432609054530164">మీ సంస్థ అజ్ఞాత మోడ్ను ఆఫ్ చేసింది</translation> @@ -737,7 +737,7 @@ <translation id="7638584964844754484">రహస్య పదబంధం చెల్లదు</translation> <translation id="7646772052135772216">పాస్వర్డ్ సింక్ పనిచేయడం లేదు</translation> <translation id="7649070708921625228">సహాయం</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7671141431838911305">ఇన్స్టాల్ చేయి</translation> <translation id="7701040980221191251">ఏదీ లేదు</translation> <translation id="7741325291586284254">కొత్త అజ్ఞాత ట్యాబ్ పేజీ</translation> @@ -790,7 +790,7 @@ <translation id="8156478151976189188">పాస్వర్డ్ సింక్ పనిచేయడం లేదు</translation> <translation id="8193953846147532858"><ph name="BEGIN_LINK" />మీ పరికరాలు<ph name="END_LINK" /> · <ph name="EMAIL" /></translation> <translation id="8197543752516192074">పేజీని అనువదించు</translation> -<translation id="8205564605687841303">రద్దు చేయి</translation> +<translation id="8205564605687841303">రద్దు చేయండి</translation> <translation id="8206354486702514201">ఈ సెట్టింగ్ మీ నిర్వాహకుడి ద్వారా అమలు చేయబడింది.</translation> <translation id="8225985093977202398">కాష్ చిత్రాలు, ఫైళ్లు</translation> <translation id="8237382152611443140">ఆటోఫిల్ పాస్వర్డ్ సెట్టింగ్లను తెరవండి</translation> @@ -835,7 +835,7 @@ <translation id="8620640915598389714">ఎడిట్</translation> <translation id="863090005774946393">మీ సంస్థ మీ బ్రౌజర్ను మేనేజ్ చేస్తోంది. కొన్ని ఫీచర్లు డిజేబుల్ కావచ్చు.</translation> <translation id="8636825310635137004">మీ ఇతర పరికరాల నుండి మీ ట్యాబ్లను పొందడానికి, సింక్ను ఆన్ చేయండి</translation> -<translation id="8654802032646794042">రద్దు చేయి</translation> +<translation id="8654802032646794042">రద్దు చేయండి</translation> <translation id="8668210798914567634">ఈ పేజీ మీ పఠన లిస్ట్కు సేవ్ చేయబడింది.</translation> <translation id="8680787084697685621">ఖాతా సైన్-ఇన్ వివరాల గడువు తేదీ ముగిసింది.</translation> <translation id="8691262314411702087">దేన్ని సమకాలీకరించాలో ఎంచుకోండి</translation> @@ -891,7 +891,7 @@ <translation id="9200875785104711666"><ph name="TIME" /> రో. క్రితం</translation> <translation id="9203116392574189331">హ్యాండ్ఆఫ్</translation> <translation id="9223358826628549784">క్రాష్ రిపోర్ట్ పంపబడింది.</translation> -<translation id="952704832371081537">రద్దు చేయి</translation> +<translation id="952704832371081537">రద్దు చేయండి</translation> <translation id="981498610235328462">మీ సంస్థ మిమ్మల్ని కొన్ని ఖాతాలతో మాత్రమే సైన్ ఇన్ చేయడానికి అనుమతిస్తుంది. అనుమతించబడని ఖాతాలు దాచబడతాయి.</translation> <translation id="984509647832111802">సింక్ పని చేయడం లేదు.</translation> <translation id="988141524645182168">ఇతర పరికరాలు</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index c979966..c8f86ed8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Chrome'da kayıtlı şifrelerinizi cihazınızdaki diğer uygulamalarda kullanın</translation> <translation id="2273327106802955778">Diğer menüsü</translation> <translation id="2286505070150039482">Vurgulanan Metin</translation> +<translation id="2299218006564889602">Şifreleriniz Google Şifre Yöneticisi'ne kaydedilmeden önce cihazınızda şifrelenir.</translation> <translation id="2302742851632557585">Web sitesindeki şifreyi değiştirme</translation> <translation id="2316709634732130529">Önerilen Şifreyi Kullan</translation> <translation id="2320166752086256636">Klavyeyi gizle</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">İptal etmek için hafifçe vurun.</translation> <translation id="60829778314739003">Kabul Et ve Devam Et</translation> <translation id="6084848228346514841">Sekme Seçin</translation> +<translation id="6103540626693881831">Cihaz Üzerinde Şifreleme</translation> <translation id="6108923351542677676">Kurulum devam ediyor…</translation> <translation id="6119050551270742952">Geçerli Web sayfası Gizli modda</translation> <translation id="6122191549521593678">Çevrimiçi</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Cihazlar arasında senkronizasyon ve kişiselleştirme yapmak için senkronizasyonu etkinleştirin.</translation> <translation id="7978018860671536736">3. Parolaları Otomatik Doldur seçeneğine dokunun</translation> <translation id="7982789257301363584">Ağ</translation> +<translation id="7987685713885608670">Ek güvenlik için, Google Şifre Yöneticisi'ne kaydedilmeden önce şifrelerinizi cihazınızda şifreleyin.</translation> <translation id="7993619969781047893">Bazı sitelerdeki özellikler çalışmayabilir</translation> <translation id="800361585186029508">Girilen URL'leri Google Chrome'da açar.</translation> <translation id="802154636333426148">İndirilemedi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 9daf5b2..c94ecbc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -612,6 +612,7 @@ <translation id="6524918542306337007">Режим анонімного перегляду недоступний</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">Наблизити</translation> +<translation id="6583087784430677195">Щоб вимкнути, відкрийте <ph name="BEGIN_LINK" />Параметри<ph name="END_LINK" /> та перейдіть у розділ "Автозаповнення паролів".</translation> <translation id="6585618849026997638">Щоб повернутися на важливу сторінку пізніше, додайте закладку</translation> <translation id="6603393121510733479">Адміністратор вашої організації вимкнув режим анонімного перегляду. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index 5f6d86f..91306a2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">وہ پاس ورڈز استعمال کریں جو آپ نے اپنے آلے پر موجود دیگر ایپس میں Chrome میں محفوظ کیے ہیں</translation> <translation id="2273327106802955778">مزید مینو</translation> <translation id="2286505070150039482">نمایاں کردہ ٹیکسٹ</translation> +<translation id="2299218006564889602">آپ کے پاس ورڈز Google پاس ورڈ مینیجر میں محفوظ ہونے سے پہلے آپ کے آلے پر مرموز ہو ہوتا ہے۔</translation> <translation id="2302742851632557585">ویب سائٹ پر پاس ورڈ تبدیل کریں</translation> <translation id="2316709634732130529">تجویز کردہ پاس ورڈ استعمال کریں</translation> <translation id="2320166752086256636">کی بورڈ چھپائیں</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">منسوخ کرنے کیلئے تھپتھپائیں۔</translation> <translation id="60829778314739003">قبول کریں اور جاری رکھیں</translation> <translation id="6084848228346514841">ٹیبز منتخب کریں</translation> +<translation id="6103540626693881831">آلے پر مرموزکاری</translation> <translation id="6108923351542677676">سیٹ اپ جاری ہے…</translation> <translation id="6119050551270742952">موجودہ ویب صفحہ پوشیدگی پر ہے</translation> <translation id="6122191549521593678">آن لائن</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">سبھی آلات پر سِنک کرنے اور ذاتی نوعیت سازی کیلئے، سِنک کو آن کریں۔</translation> <translation id="7978018860671536736">3۔ آٹو فل پاس ورڈز پر تھپتھپائیں</translation> <translation id="7982789257301363584">نیٹ ورک</translation> +<translation id="7987685713885608670">اضافی حفاظت کے لیے، پاس ورڈز کو Google پاس ورڈ مینیجر میں محفوظ کرنے سے پہلے اپنے آلے پر مرموز کریں۔</translation> <translation id="7993619969781047893">کچھ سائٹس پر خصوصیات میں خلل ہو سکتا ہے۔</translation> <translation id="800361585186029508">درج کردہ URLs کو Google Chrome میں کھولتا ہے۔</translation> <translation id="802154636333426148">ڈاؤن لوڈ ناکام ہوگیا</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb index 15d4207c..3382632 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Chromeda saqlangan parollarni qurilmadagi boshqa ilovalarda ishlating</translation> <translation id="2273327106802955778">Batafsil menyusi</translation> <translation id="2286505070150039482">Belgilangan matn</translation> +<translation id="2299218006564889602">Parollaringiz Google Parollar menejeriga saqlanishidan oldin qurilmangizda shifrlangan</translation> <translation id="2302742851632557585">Saytdagi parolni yangilash</translation> <translation id="2316709634732130529">Taklif qilingan parolni ishlatish</translation> <translation id="2320166752086256636">Klaviaturani berkitish</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Bekor qilish uchun bu yerga bosing.</translation> <translation id="60829778314739003">Qabul qilish va davom etish</translation> <translation id="6084848228346514841">Varaqlarni tanlang</translation> +<translation id="6103540626693881831">Qurilmada shifrlash</translation> <translation id="6108923351542677676">Sozlanmoqda...</translation> <translation id="6119050551270742952">Bu sahifa inkognito rejimida</translation> <translation id="6122191549521593678">Onlayn</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Barcha qurilmalarda sinxronlash va o‘zingizga moslash uchun sinxronizatsiyani yoqing.</translation> <translation id="7978018860671536736">3. Parollarni avtomatik kiritish uchun bosing</translation> <translation id="7982789257301363584">Tarmoq</translation> +<translation id="7987685713885608670">Xavfsizlikni yanada oshirish uchun parolingizni Google Parollar menejeriga saqlashdan oldin qurilmangizda shifrlang</translation> <translation id="7993619969781047893">Ayrim saytlardagi funksiyalar ishalamay qolishi mumkin</translation> <translation id="800361585186029508">Kiritiladigan URL manzillarni Google Chrome orqali ochadi.</translation> <translation id="802154636333426148">Yuklab olib bo‘lmadi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index a86c8f6..69e73d8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">Sử dụng mật khẩu bạn đã lưu vào Chrome cho các ứng dụng khác trên thiết bị của bạn</translation> <translation id="2273327106802955778">Menu khác</translation> <translation id="2286505070150039482">Văn bản được đánh dấu</translation> +<translation id="2299218006564889602">Mật khẩu của bạn được mã hoá trên thiết bị trước khi lưu vào Trình quản lý mật khẩu của Google.</translation> <translation id="2302742851632557585">Đổi mật khẩu trên trang web</translation> <translation id="2316709634732130529">Sử dụng mật khẩu đề xuất</translation> <translation id="2320166752086256636">Ẩn bàn phím</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">Nhấn để hủy.</translation> <translation id="60829778314739003">Đồng ý và tiếp tục</translation> <translation id="6084848228346514841">Chọn các thẻ</translation> +<translation id="6103540626693881831">Mã hoá trên thiết bị</translation> <translation id="6108923351542677676">Đang thiết lập…</translation> <translation id="6119050551270742952">Trang web hiện tại đang ở chế độ ẩn danh</translation> <translation id="6122191549521593678">Trực tuyến</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">Để đồng bộ hóa và cá nhân hóa trên các thiết bị, hãy bật tính năng đồng bộ hóa.</translation> <translation id="7978018860671536736">3. Nhấn vào Tự động điền mật khẩu</translation> <translation id="7982789257301363584">Mạng</translation> +<translation id="7987685713885608670">Để tăng mức độ an toàn, hãy mã hoá mật khẩu trên thiết bị trước khi lưu vào Trình quản lý mật khẩu của Google.</translation> <translation id="7993619969781047893">Các tính năng trên một số trang web có thể hoạt động không đúng cách</translation> <translation id="800361585186029508">Mở URL đã nhập trong Google Chrome.</translation> <translation id="802154636333426148">Tải xuống không thành công</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index 0ace1c7..e2892d8e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">在设备上的其他应用内使用已保存到 Chrome 中的密码</translation> <translation id="2273327106802955778">“更多”菜单</translation> <translation id="2286505070150039482">突出显示的文字</translation> +<translation id="2299218006564889602">系统会先在设备上对您的密码进行加密,然后再将其保存到 Google 密码管理器中。</translation> <translation id="2302742851632557585">在网站上更改密码</translation> <translation id="2316709634732130529">使用建议的密码</translation> <translation id="2320166752086256636">隐藏键盘</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">点按可取消。</translation> <translation id="60829778314739003">接受并继续</translation> <translation id="6084848228346514841">选择标签页</translation> +<translation id="6103540626693881831">设备上加密</translation> <translation id="6108923351542677676">正在设置…</translation> <translation id="6119050551270742952">当前网页处于无痕模式</translation> <translation id="6122191549521593678">在线</translation> @@ -612,6 +614,7 @@ <translation id="6524918542306337007">无痕模式不可用</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">放大</translation> +<translation id="6583087784430677195">如需关闭此功能,请打开<ph name="BEGIN_LINK" />设置<ph name="END_LINK" />,然后转至“自动填充密码”。</translation> <translation id="6585618849026997638">您可以为重要网页添加书签以便返回查看</translation> <translation id="6603393121510733479">贵单位关闭了无痕浏览。 <ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> @@ -763,6 +766,7 @@ <translation id="797413074872316787">若要在您的所有设备上保持同步并获享个性化体验,请开启同步功能。</translation> <translation id="7978018860671536736">3. 点按“自动填充密码”</translation> <translation id="7982789257301363584">网络</translation> +<translation id="7987685713885608670">为了提高安全性,请先在设备上对密码进行加密,然后再将其保存到 Google 密码管理器中。</translation> <translation id="7993619969781047893">某些网站上的功能可能会无法正常运作</translation> <translation id="800361585186029508">在 Google Chrome 中打开输入的网址。</translation> <translation id="802154636333426148">下载失败</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb index 950a286..636bd7c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -612,7 +612,7 @@ <translation id="6524918542306337007">無法使用無痕模式</translation> <translation id="6537746030088321027">example.com</translation> <translation id="6561262006871132942">放大</translation> -<translation id="6583087784430677195">如要關閉,請開啟「<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />」並前往「自動填入密碼」部分。</translation> +<translation id="6583087784430677195">如要關閉,請開啟「<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />」並前往「自動填入密碼」。</translation> <translation id="6585618849026997638">您可新增書籤,以便快速返回您認為重要的網頁</translation> <translation id="6603393121510733479">您的機構已關閉私密瀏覽功能。 <ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index d6efab67..1089ea3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -142,6 +142,7 @@ <translation id="2271351792809375263">在裝置上的其他應用程式使用儲存在 Chrome 中的密碼</translation> <translation id="2273327106802955778">[更多] 選單</translation> <translation id="2286505070150039482">醒目顯示的文字</translation> +<translation id="2299218006564889602">系統會先在裝置上將密碼加密,再儲存至 Google 密碼管理員。</translation> <translation id="2302742851632557585">變更網站上的密碼</translation> <translation id="2316709634732130529">使用建議的密碼</translation> <translation id="2320166752086256636">隱藏鍵盤</translation> @@ -545,6 +546,7 @@ <translation id="6066301408025741299">輕觸即可取消。</translation> <translation id="60829778314739003">接受並繼續</translation> <translation id="6084848228346514841">選取分頁</translation> +<translation id="6103540626693881831">裝置端加密</translation> <translation id="6108923351542677676">設定中…</translation> <translation id="6119050551270742952">目前的網頁處於無痕模式</translation> <translation id="6122191549521593678">線上</translation> @@ -764,6 +766,7 @@ <translation id="797413074872316787">如要在所有裝置上保持同步並享有個人化體驗,請開啟同步功能。</translation> <translation id="7978018860671536736">3. 輕觸 [自動填入密碼]</translation> <translation id="7982789257301363584">網路</translation> +<translation id="7987685713885608670">為進一步加強安全性,系統會先在裝置上將密碼加密,再儲存至 Google 密碼管理員。</translation> <translation id="7993619969781047893">某些網站的功能可能無法正常運作</translation> <translation id="800361585186029508">在 Google Chrome 中開啟輸入的網址。</translation> <translation id="802154636333426148">下載失敗</translation>
diff --git a/ios/chrome/browser/flags/BUILD.gn b/ios/chrome/browser/flags/BUILD.gn index 68ab7f3..34c2f71 100644 --- a/ios/chrome/browser/flags/BUILD.gn +++ b/ios/chrome/browser/flags/BUILD.gn
@@ -68,7 +68,7 @@ "//ios/chrome/browser/ui/tab_switcher/tab_grid:features", "//ios/chrome/browser/ui/toolbar_container:feature_flags", "//ios/chrome/browser/web:feature_flags", - "//ios/public/provider/chrome/browser", + "//ios/public/provider/chrome/browser/app_utils:app_utils_api", "//ios/web/common", "//ios/web/common:user_agent", "//ios/web/common:web_view_creation_util",
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 19710e1..d6fd4ab 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -81,7 +81,7 @@ #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/browser/web/features.h" #include "ios/chrome/grit/ios_strings.h" -#include "ios/public/provider/chrome/browser/chrome_browser_provider.h" +#include "ios/public/provider/chrome/browser/app_utils/app_utils_api.h" #include "ios/web/common/features.h" #include "ios/web/common/user_agent.h" #include "ios/web/common/web_view_creation_util.h" @@ -1045,8 +1045,7 @@ command_line->AppendSwitch(switches::kDisableThirdPartyKeyboardWorkaround); } - ios::GetChromeBrowserProvider().AppendSwitchesFromExperimentalSettings( - defaults, command_line); + provider::AppendSwitchesFromExperimentalSettings(defaults, command_line); } void MonitorExperimentalSettingsChanges() {
diff --git a/ios/chrome/browser/main/BUILD.gn b/ios/chrome/browser/main/BUILD.gn index 660d0de..b3b3c34 100644 --- a/ios/chrome/browser/main/BUILD.gn +++ b/ios/chrome/browser/main/BUILD.gn
@@ -69,7 +69,7 @@ "//ios/chrome/browser/web_state_list:agents", "//ios/chrome/browser/web_state_list:session_metrics", "//ios/chrome/browser/web_state_list/web_usage_enabler", - "//ios/public/provider/chrome/browser", + "//ios/public/provider/chrome/browser/app_utils:app_utils_api", ] configs += [ "//build/config/compiler:enable_arc" ] }
diff --git a/ios/chrome/browser/main/browser_agent_util.mm b/ios/chrome/browser/main/browser_agent_util.mm index 9fa9fa1..a32edde 100644 --- a/ios/chrome/browser/main/browser_agent_util.mm +++ b/ios/chrome/browser/main/browser_agent_util.mm
@@ -31,7 +31,7 @@ #import "ios/chrome/browser/web_state_list/view_source_browser_agent.h" #import "ios/chrome/browser/web_state_list/web_state_list_metrics_browser_agent.h" #import "ios/chrome/browser/web_state_list/web_usage_enabler/web_usage_enabler_browser_agent.h" -#include "ios/public/provider/chrome/browser/chrome_browser_provider.h" +#include "ios/public/provider/chrome/browser/app_utils/app_utils_api.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -94,5 +94,5 @@ // This needs to be called last in case any downstream browser agents need to // access upstream agents created earlier in this function. - ios::GetChromeBrowserProvider().AttachBrowserAgents(browser); + provider::AttachBrowserAgents(browser); }
diff --git a/ios/chrome/browser/policy_url_blocking/policy_url_blocking_egtest.mm b/ios/chrome/browser/policy_url_blocking/policy_url_blocking_egtest.mm index 30de0f8..651539a 100644 --- a/ios/chrome/browser/policy_url_blocking/policy_url_blocking_egtest.mm +++ b/ios/chrome/browser/policy_url_blocking/policy_url_blocking_egtest.mm
@@ -38,7 +38,7 @@ } -// Tests the URLBlocklist and URLWhitelist enterprise policies. +// Tests the URLBlocklist and URLAllowlist enterprise policies. @interface PolicyURLBlockingTestCase : ChromeTestCase @end
diff --git a/ios/chrome/browser/ui/settings/password/passwords_in_other_apps/passwords_in_other_apps_view_controller.mm b/ios/chrome/browser/ui/settings/password/passwords_in_other_apps/passwords_in_other_apps_view_controller.mm index 2b82e5d..ee67039 100644 --- a/ios/chrome/browser/ui/settings/password/passwords_in_other_apps/passwords_in_other_apps_view_controller.mm +++ b/ios/chrome/browser/ui/settings/password/passwords_in_other_apps/passwords_in_other_apps_view_controller.mm
@@ -77,6 +77,10 @@ NSArray<NSLayoutConstraint*>* turnOffInstructionViewConstraints; @property(nonatomic, strong) UINavigationBar* navigationBar; @property(nonatomic, strong) UINavigationBarAppearance* defaultAppearance; + +// Whether the image is currently being calculated; used to prevent infinite +// recursions caused by |viewDidLayoutSubviews|. +@property(nonatomic, assign) BOOL calculatingImageSize; @end @interface PasswordsInOtherAppsViewController () < @@ -287,10 +291,6 @@ - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - // Rescale image here as on iPad the view height isn't correctly set during - // -viewDidLoad. - self.imageView.image = [self createOrUpdateImage:self.imageView.image]; - if (self.navigationController && [self.navigationController isKindOfClass:[SettingsNavigationController class]]) { @@ -320,6 +320,20 @@ } } +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + // Prevents potential recursive calls to |viewDidLayoutSubviews|. + if (self.calculatingImageSize) { + return; + } + // Rescale image here as on iPad the view height isn't correctly set before + // subviews are laid out. + self.calculatingImageSize = YES; + self.imageView.image = [self createOrUpdateImage:self.imageView.image]; + self.calculatingImageSize = NO; +} + - (void)didMoveToParentViewController:(UIViewController*)parent { [super didMoveToParentViewController:parent]; if (!parent) {
diff --git a/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm b/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm index 8f9e3b2..ec67642 100644 --- a/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm +++ b/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm
@@ -61,6 +61,9 @@ // it. The view should only be lazily instanciated when read externally. @property(nonatomic, strong, readwrite) UIView* topSpecificContentView; +// Whether the image is currently being calculated; used to prevent infinite +// recursions caused by |viewDidLayoutSubviews|. +@property(nonatomic, assign) BOOL calculatingImageSize; @end @implementation PromoStyleViewController @@ -300,12 +303,6 @@ - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - // Rescale image here as on iPad the view height isn't correctly set during - // -viewDidLoad. - self.imageView.image = [self scaleSourceImage:self.bannerImage - currentImage:self.imageView.image - toSize:[self computeBannerImageSize]]; - // Reset |didReachBottom| to make sure that its value is correctly updated // to reflect the scrolling state when the view reappears and is refreshed // (e.g., when getting back from a full screen view that was hidding this @@ -337,6 +334,22 @@ }); } +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + // Prevents potential recursive calls to |viewDidLayoutSubviews|. + if (self.calculatingImageSize) { + return; + } + // Rescale image here as on iPad the view height isn't correctly set before + // subviews are laid out. + self.calculatingImageSize = YES; + self.imageView.image = [self scaleSourceImage:self.bannerImage + currentImage:self.imageView.image + toSize:[self computeBannerImageSize]]; + self.calculatingImageSize = NO; +} + - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator: (id<UIViewControllerTransitionCoordinator>)coordinator {
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hi.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hi.xtb index 84dccfab..3913997 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hi.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hi.xtb
@@ -27,7 +27,7 @@ <translation id="4452240207605337349">पासवर्ड सेव नहीं किया जा सका</translation> <translation id="4818780572497527258">Got it</translation> <translation id="5118084770294029567">सभी पासवर्ड</translation> -<translation id="5148402015874782921">रद्द करें</translation> +<translation id="5148402015874782921">अभी नहीं</translation> <translation id="5366190986669335938">Chrome में सेव पासवर्ड, किसी भी ऐप्लिकेशन से ऐक्सेस करें.</translation> <translation id="579113627088729016">ऑटोमैटिक जानकारी भरने की सुविधा चालू करें</translation> <translation id="5824290706342306555">शुरू करने के लिए, Chrome में कुछ पासवर्ड सेव करें या अपने Google खाते में साइन इन करें.</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_te.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_te.xtb index 8c575e43..6963babb0 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_te.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_te.xtb
@@ -27,7 +27,7 @@ <translation id="4452240207605337349">పాస్వర్డ్ను సేవ్ చేయడం సాధ్యం కాదు</translation> <translation id="4818780572497527258">అర్థమైంది</translation> <translation id="5118084770294029567">అన్ని పాస్వర్డ్లు</translation> -<translation id="5148402015874782921">రద్దు చేయి</translation> +<translation id="5148402015874782921">రద్దు చేయండి</translation> <translation id="5366190986669335938">మీరు Chromeలో సేవ్ చేసే పాస్వర్డ్లను ఏ యాప్ నుండి అయినా యాక్సెస్ చేయండి.</translation> <translation id="579113627088729016">ఆటోఫిల్ను ఆన్ చేయి</translation> <translation id="5824290706342306555">ప్రారంభించడానికి కొన్ని పాస్వర్డ్లను Chromeలో సేవ్ చేయండి లేదా మీ Google ఖాతాతో సైన్ ఇన్ చేయండి.</translation>
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn index 1422fc3..95959fa 100644 --- a/ios/chrome/test/BUILD.gn +++ b/ios/chrome/test/BUILD.gn
@@ -125,6 +125,7 @@ "//ios/chrome/test:test_support", "//ios/components/webui:url_constants", "//ios/public/provider/chrome/browser", + "//ios/public/provider/chrome/browser/app_utils:app_utils_api", "//ios/web/public", "//ios/web/public/test", "//testing/gtest",
diff --git a/ios/chrome/test/ios_chrome_unit_test_suite.mm b/ios/chrome/test/ios_chrome_unit_test_suite.mm index db718a3..73305b0f 100644 --- a/ios/chrome/test/ios_chrome_unit_test_suite.mm +++ b/ios/chrome/test/ios_chrome_unit_test_suite.mm
@@ -13,6 +13,7 @@ #include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/test/testing_application_context.h" #include "ios/components/webui/web_ui_url_constants.h" +#import "ios/public/provider/chrome/browser/app_utils/app_utils_api.h" #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" #import "ios/web/public/web_client.h" #include "testing/gtest/include/gtest/gtest.h" @@ -39,6 +40,8 @@ ~IOSChromeUnitTestSuiteInitializer() override {} void OnTestStart(const testing::TestInfo& test_info) override { + provider::Initialize(); + chrome_browser_provider_ = ios::CreateChromeBrowserProvider(); ios::ChromeBrowserProvider* previous_provider = ios::SetChromeBrowserProvider(chrome_browser_provider_.get());
diff --git a/ios/public/provider/chrome/browser/BUILD.gn b/ios/public/provider/chrome/browser/BUILD.gn index 90b15e1..00784f22 100644 --- a/ios/public/provider/chrome/browser/BUILD.gn +++ b/ios/public/provider/chrome/browser/BUILD.gn
@@ -13,6 +13,7 @@ deps = [ "//base", "//components/metrics", + "//ios/public/provider/chrome/browser/app_utils:app_utils_api", "//ios/public/provider/chrome/browser/mailto", "//ios/public/provider/chrome/browser/signin", "//ios/web/public",
diff --git a/ios/public/provider/chrome/browser/chrome_browser_provider.mm b/ios/public/provider/chrome/browser/chrome_browser_provider.mm index e78a741..d0f9d99 100644 --- a/ios/public/provider/chrome/browser/chrome_browser_provider.mm +++ b/ios/public/provider/chrome/browser/chrome_browser_provider.mm
@@ -8,6 +8,7 @@ #include "base/check.h" #include "components/metrics/metrics_provider.h" +#import "ios/public/provider/chrome/browser/app_utils/app_utils_api.h" #import "ios/public/provider/chrome/browser/mailto/mailto_handler_provider.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" @@ -47,7 +48,10 @@ void ChromeBrowserProvider::AppendSwitchesFromExperimentalSettings( NSUserDefaults* experimental_settings, - base::CommandLine* command_line) const {} + base::CommandLine* command_line) const { + provider::AppendSwitchesFromExperimentalSettings(experimental_settings, + command_line); +} void ChromeBrowserProvider::Initialize() const {} @@ -73,7 +77,9 @@ return nil; } -void ChromeBrowserProvider::AttachBrowserAgents(Browser* browser) const {} +void ChromeBrowserProvider::AttachBrowserAgents(Browser* browser) const { + provider::AttachBrowserAgents(browser); +} id<LogoVendor> ChromeBrowserProvider::CreateLogoVendor( Browser* browser,
diff --git a/media/base/audio_processing.h b/media/base/audio_processing.h index 7113736e..ea86ac39 100644 --- a/media/base/audio_processing.h +++ b/media/base/audio_processing.h
@@ -57,6 +57,30 @@ force_apm_creation == b.force_apm_creation; } + bool NeedWebrtcAudioProcessing() const { + // TODO(https://crbug.com/1269364): Legacy iOS-specific behavior; + // reconsider. +#if defined(OS_IOS) + if (stereo_mirroring) + return true; +#else + if (echo_cancellation || automatic_gain_control) { + return true; + } +#endif + +#if !defined(OS_ANDROID) + if (force_apm_creation) + return true; +#endif + + return noise_suppression || high_pass_filter || transient_noise_suppression; + } + + bool NeedAudioModification() const { + return NeedWebrtcAudioProcessing() || stereo_mirroring; + } + // Stringifies the settings for human-readable logging. std::string ToString() const; };
diff --git a/media/webrtc/audio_processor.cc b/media/webrtc/audio_processor.cc index ccde078..96cd5c5 100644 --- a/media/webrtc/audio_processor.cc +++ b/media/webrtc/audio_processor.cc
@@ -33,34 +33,7 @@ namespace media { namespace { - constexpr int kBuffersPerSecond = 100; // 10 ms per buffer. - -// Creates a WebRTC audio processing module, if required by the processing -// settings. -rtc::scoped_refptr<webrtc::AudioProcessing> -MaybeCreateWebRtcAudioProcessingModule( - const AudioProcessingSettings& settings) { - // TODO(https://crbug.com/1269364): Share this logic with - // MediaStreamAudioProcessor::WouldModifyAudio(). -#if defined(OS_ANDROID) - const bool force_apm_creation = false; -#else - const bool force_apm_creation = settings.force_apm_creation; -#endif - - // Return immediately if none of the effects requiring webrtc::AudioProcessing - // are enabled. For example, the stereo mirroring effect is handled directly - // in the AudioProcessor implementation. - if (!settings.echo_cancellation && !force_apm_creation && - !settings.noise_suppression && !settings.high_pass_filter && - !settings.automatic_gain_control && - !settings.transient_noise_suppression) { - return nullptr; - } - - return media::CreateWebRtcAudioProcessingModule(settings); -} } // namespace // Wraps AudioBus to provide access to the array of channel pointers, since this @@ -217,21 +190,122 @@ AudioProcessor::AudioProcessor( DeliverProcessedAudioCallback deliver_processed_audio_callback, LogCallback log_callback, - const AudioProcessingSettings& settings) + const AudioProcessingSettings& settings, + const media::AudioParameters& input_format) : settings_(settings), webrtc_audio_processing_( - MaybeCreateWebRtcAudioProcessingModule(settings)), + media::CreateWebRtcAudioProcessingModule(settings)), log_callback_(std::move(log_callback)), - playout_delay_(base::TimeDelta()), + input_format_(input_format), deliver_processed_audio_callback_( std::move(deliver_processed_audio_callback)), audio_delay_stats_reporter_(kBuffersPerSecond) { - DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); DCHECK(deliver_processed_audio_callback_); DCHECK(log_callback_); SendLogMessage(base::StringPrintf( "%s({multi_channel_capture_processing=%s})", __func__, settings_.multi_channel_capture_processing ? "true" : "false")); + + DCHECK(input_format_.IsValid()); + SendLogMessage( + base::StringPrintf("%s({input_format_=[%s]})", __func__, + input_format_.AsHumanReadableString().c_str())); + + // TODO(crbug/881275): For now, we assume fixed parameters for the output when + // audio processing is enabled, to match the previous behavior. We should + // either use the input parameters (in which case, audio processing will + // convert at output) or ideally, have a backchannel from the sink to know + // what format it would prefer. + const int output_sample_rate = + webrtc_audio_processing_ ? +#if BUILDFLAG(IS_CHROMECAST) + std::min(media::kAudioProcessingSampleRateHz, + input_format_.sample_rate()) +#else + media::kAudioProcessingSampleRateHz +#endif // BUILDFLAG(IS_CHROMECAST) + : input_format_.sample_rate(); + + // The output channels from the fifo is normally the same as input. + int fifo_output_channels = input_format_.channels(); + + media::ChannelLayout output_channel_layout; + if (!webrtc_audio_processing_) { + if (input_format_.channel_layout() == + media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC) { + // Special case for if we have a keyboard mic channel on the input and no + // audio processing is used. We will then have the fifo strip away that + // channel. So we use stereo as output layout, and also change the output + // channels for the fifo. + output_channel_layout = media::CHANNEL_LAYOUT_STEREO; + fifo_output_channels = ChannelLayoutToChannelCount(output_channel_layout); + } else { + output_channel_layout = input_format.channel_layout(); + } + } else if (settings_.multi_channel_capture_processing) { + // The number of output channels is equal to the number of input channels. + // If the media stream audio processor receives stereo input it will output + // stereo. To reduce computational complexity, APM will not perform full + // multichannel processing unless any sink requests more than one channel. + // If the input is multichannel but the sinks are not interested in more + // than one channel, APM will internally downmix the signal to mono and + // process it. The processed mono signal will then be upmixed to same number + // of channels as the input before leaving the media stream audio processor. + // If a sink later requests stereo, APM will start performing true stereo + // processing. There will be no need to change the output format. + + // The keyboard mic channel shall not be part of the output. + if (input_format_.channel_layout() == + media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC) { + output_channel_layout = media::CHANNEL_LAYOUT_STEREO; + } else { + output_channel_layout = input_format.channel_layout(); + } + } else { + output_channel_layout = media::CHANNEL_LAYOUT_MONO; + } + + // webrtc::AudioProcessing requires a 10 ms chunk size. We use this native + // size when processing is enabled. When disabled we use the same size as + // the source if less than 10 ms. + // + // TODO(ajm): This conditional buffer size appears to be assuming knowledge of + // the sink based on the source parameters. PeerConnection sinks seem to want + // 10 ms chunks regardless, while WebAudio sinks want less, and we're assuming + // we can identify WebAudio sinks by the input chunk size. Less fragile would + // be to have the sink actually tell us how much it wants (as in the above + // todo). + int processing_frames = input_format.sample_rate() / 100; + int output_frames = output_sample_rate / 100; + if (!webrtc_audio_processing_ && + input_format.frames_per_buffer() < output_frames) { + processing_frames = input_format.frames_per_buffer(); + output_frames = processing_frames; + } + + output_format_ = media::AudioParameters( + media::AudioParameters::AUDIO_PCM_LOW_LATENCY, output_channel_layout, + output_sample_rate, output_frames); + if (output_channel_layout == media::CHANNEL_LAYOUT_DISCRETE) { + // Explicitly set number of channels for discrete channel layouts. + output_format_.set_channels_for_discrete(input_format.channels()); + } + SendLogMessage( + base::StringPrintf("%s => (output_format=[%s])", __func__, + output_format_.AsHumanReadableString().c_str())); + SendLogMessage(base::StringPrintf( + "%s => (FIFO: processing_frames=%d, output_channels=%d)", __func__, + processing_frames, fifo_output_channels)); + + capture_fifo_ = std::make_unique<AudioProcessorCaptureFifo>( + input_format.channels(), fifo_output_channels, + input_format.frames_per_buffer(), processing_frames, + input_format.sample_rate()); + + if (webrtc_audio_processing_) { + output_bus_ = std::make_unique<AudioProcessorCaptureBus>( + output_format_.channels(), output_frames); + } } AudioProcessor::~AudioProcessor() { @@ -239,12 +313,6 @@ OnStopDump(); } -void AudioProcessor::OnCaptureFormatChanged( - const media::AudioParameters& input_format) { - DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); - InitializeCaptureFifo(input_format); -} - void AudioProcessor::ProcessCapturedAudio(const media::AudioBus& audio_source, base::TimeTicks audio_capture_time, int num_preferred_channels, @@ -392,113 +460,6 @@ return webrtc_audio_processing_->GetStatistics(); } -// Called on the owning sequence. -void AudioProcessor::InitializeCaptureFifo( - const media::AudioParameters& input_format) { - DCHECK(input_format.IsValid()); - SendLogMessage( - base::StringPrintf("%s({input_format=[%s]})", __func__, - input_format.AsHumanReadableString().c_str())); - - input_format_ = input_format; - - // TODO(crbug/881275): For now, we assume fixed parameters for the output when - // audio processing is enabled, to match the previous behavior. We should - // either use the input parameters (in which case, audio processing will - // convert at output) or ideally, have a backchannel from the sink to know - // what format it would prefer. - const int output_sample_rate = - webrtc_audio_processing_ ? -#if BUILDFLAG(IS_CHROMECAST) - std::min(media::kAudioProcessingSampleRateHz, - input_format.sample_rate()) -#else - media::kAudioProcessingSampleRateHz -#endif // BUILDFLAG(IS_CHROMECAST) - : input_format.sample_rate(); - - // The output channels from the fifo is normally the same as input. - int fifo_output_channels = input_format.channels(); - - media::ChannelLayout output_channel_layout; - if (!webrtc_audio_processing_) { - if (input_format.channel_layout() == - media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC) { - // Special case for if we have a keyboard mic channel on the input and no - // audio processing is used. We will then have the fifo strip away that - // channel. So we use stereo as output layout, and also change the output - // channels for the fifo. - output_channel_layout = media::CHANNEL_LAYOUT_STEREO; - fifo_output_channels = ChannelLayoutToChannelCount(output_channel_layout); - } else { - output_channel_layout = input_format.channel_layout(); - } - } else if (settings_.multi_channel_capture_processing) { - // The number of output channels is equal to the number of input channels. - // If the media stream audio processor receives stereo input it will output - // stereo. To reduce computational complexity, APM will not perform full - // multichannel processing unless any sink requests more than one channel. - // If the input is multichannel but the sinks are not interested in more - // than one channel, APM will internally downmix the signal to mono and - // process it. The processed mono signal will then be upmixed to same number - // of channels as the input before leaving the media stream audio processor. - // If a sink later requests stereo, APM will start performing true stereo - // processing. There will be no need to change the output format. - - // The keyboard mic channel shall not be part of the output. - if (input_format.channel_layout() == - media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC) { - output_channel_layout = media::CHANNEL_LAYOUT_STEREO; - } else { - output_channel_layout = input_format.channel_layout(); - } - } else { - output_channel_layout = media::CHANNEL_LAYOUT_MONO; - } - - // webrtc::AudioProcessing requires a 10 ms chunk size. We use this native - // size when processing is enabled. When disabled we use the same size as - // the source if less than 10 ms. - // - // TODO(ajm): This conditional buffer size appears to be assuming knowledge of - // the sink based on the source parameters. PeerConnection sinks seem to want - // 10 ms chunks regardless, while WebAudio sinks want less, and we're assuming - // we can identify WebAudio sinks by the input chunk size. Less fragile would - // be to have the sink actually tell us how much it wants (as in the above - // todo). - int processing_frames = input_format.sample_rate() / 100; - int output_frames = output_sample_rate / 100; - if (!webrtc_audio_processing_ && - input_format.frames_per_buffer() < output_frames) { - processing_frames = input_format.frames_per_buffer(); - output_frames = processing_frames; - } - - output_format_ = media::AudioParameters( - media::AudioParameters::AUDIO_PCM_LOW_LATENCY, output_channel_layout, - output_sample_rate, output_frames); - if (output_channel_layout == media::CHANNEL_LAYOUT_DISCRETE) { - // Explicitly set number of channels for discrete channel layouts. - output_format_.set_channels_for_discrete(input_format.channels()); - } - SendLogMessage( - base::StringPrintf("%s => (output_format=[%s])", __func__, - output_format_.AsHumanReadableString().c_str())); - SendLogMessage(base::StringPrintf( - "%s => (FIFO: processing_frames=%d, output_channels=%d)", __func__, - processing_frames, fifo_output_channels)); - - capture_fifo_ = std::make_unique<AudioProcessorCaptureFifo>( - input_format.channels(), fifo_output_channels, - input_format.frames_per_buffer(), processing_frames, - input_format.sample_rate()); - - if (webrtc_audio_processing_) { - output_bus_ = std::make_unique<AudioProcessorCaptureBus>( - output_format_.channels(), output_frames); - } -} - absl::optional<double> AudioProcessor::ProcessData( const float* const* process_ptrs, int process_frames,
diff --git a/media/webrtc/audio_processor.h b/media/webrtc/audio_processor.h index 22ed873..967c563 100644 --- a/media/webrtc/audio_processor.h +++ b/media/webrtc/audio_processor.h
@@ -60,21 +60,18 @@ // |deliver_processed_audio_callback| is used to deliver frames of processed // capture audio, from ProcessCapturedAudio(), and has to be valid for as long // as ProcessCapturedAudio() may be called. |log_callback| is used for logging - // messages on the owning sequence. + // messages on the owning sequence. |input_format| is a format of the capture + // data. AudioProcessor(DeliverProcessedAudioCallback deliver_processed_audio_callback, LogCallback log_callback, - const AudioProcessingSettings& settings); + const AudioProcessingSettings& settings, + const media::AudioParameters& input_format); ~AudioProcessor(); AudioProcessor(const AudioProcessor&) = delete; AudioProcessor& operator=(const AudioProcessor&) = delete; - // Called when the format of the capture data has changed. - // The caller is responsible for stopping the capture processing before - // calling this method. - void OnCaptureFormatChanged(const media::AudioParameters& source_params); - // Processes and delivers capture audio in chunks of <= 10 ms to // |deliver_processed_audio_callback_|: Each call to ProcessCapturedAudio() // method triggers zero or more calls to |deliver_processed_audio_callback_|, @@ -100,8 +97,8 @@ int sample_rate, base::TimeDelta audio_delay); - // The format of the processed capture output audio from the processor. - // Is constant between calls to OnCaptureFormatChanged(). + // The format of the processed capture output audio from the processor; + // constant throughout AudioProcessor lifetime. const media::AudioParameters& OutputFormat() const; // Accessor to check if WebRTC audio processing is enabled or not. @@ -122,6 +119,7 @@ // Starts a new diagnostic audio recording (aecdump). If an aecdump recording // is already ongoing, it is stopped before starting the new one. void OnStartDump(base::File dump_file); + // Stops any ongoing aecdump. void OnStopDump(); @@ -146,10 +144,6 @@ private: friend class AudioProcessorTest; - // Helper to initialize the capture converter. - void InitializeCaptureFifo(const media::AudioParameters& input_format) - VALID_CONTEXT_REQUIRED(owning_sequence_); - // Called by ProcessCapturedAudio(). // Returns the new microphone volume in the range of |0.0, 1.0], or unset if // the volume should not be updated. @@ -180,9 +174,11 @@ // processing and resampling algorithms. const rtc::scoped_refptr<webrtc::AudioProcessing> webrtc_audio_processing_; - // Members accessed only by the owning sequence. + // Members accessed only by the owning sequence: + // Used by SendLogMessage. const LogCallback log_callback_ GUARDED_BY_CONTEXT(owning_sequence_); + // Low-priority task queue for doing AEC dump recordings. It has to // created/destroyed on the same sequence and it must outlive // any aecdump recording in |webrtc_audio_processing_|. @@ -191,21 +187,27 @@ // Cached value for the playout delay latency. Accessed on both capture and // playout threads. - std::atomic<base::TimeDelta> playout_delay_; + std::atomic<base::TimeDelta> playout_delay_{base::TimeDelta()}; - // These members are configured on the owning sequence while the capture - // thread is not running, and are used on the capture thread. + // Members configured on the owning sequence in the constructor and + // used on the capture thread: + // FIFO to provide capture audio in chunks of up to 10 ms. std::unique_ptr<AudioProcessorCaptureFifo> capture_fifo_; + // Receives APM processing output. std::unique_ptr<AudioProcessorCaptureBus> output_bus_; - // Input and output formats for capture processing. - media::AudioParameters input_format_; + + // Input and output formats for capture processing. |output_format_| is + // initialized once in the constructor, so is essentially const as well. + const media::AudioParameters input_format_; media::AudioParameters output_format_; - // Members accessed only on the capture thread. + // Members accessed only on the capture thread: + // Consumer of processed capture audio in ProcessCapturedAudio(). const DeliverProcessedAudioCallback deliver_processed_audio_callback_; + // Observed maximum number of preferred output channels. Used for not // performing audio processing on more channels than the sinks are interested // in. The value is a maximum over time and can increase but never decrease. @@ -213,13 +215,16 @@ // Module (APM) will output max_num_preferred_output_channels_ channels as // long as it does not exceed the number of channels of the output format. int max_num_preferred_output_channels_ = 1; + // For reporting audio delay stats. media::AudioDelayStatsReporter audio_delay_stats_reporter_; - // Members accessed only on the playout thread. + // Members accessed only on the playout thread: + // Indicates whether the audio processor playout signal has ever had // asymmetric left and right channel content. bool assume_upmixed_mono_playout_ = true; + // Counters to avoid excessively logging errors on a real-time thread. size_t unsupported_buffer_size_log_count_ = 0; size_t apm_playout_error_code_log_count_ = 0;
diff --git a/media/webrtc/audio_processor_test.cc b/media/webrtc/audio_processor_test.cc index c6065cd8..d2bc32e 100644 --- a/media/webrtc/audio_processor_test.cc +++ b/media/webrtc/audio_processor_test.cc
@@ -210,9 +210,8 @@ AudioProcessingSettings settings{.multi_channel_capture_processing = use_multichannel_processing}; AudioProcessor audio_processor(mock_capture_callback_.Get(), - LogCallbackForTesting(), settings); + LogCallbackForTesting(), settings, params_); EXPECT_TRUE(audio_processor.has_webrtc_audio_processing()); - audio_processor.OnCaptureFormatChanged(params_); VerifyDefaultComponents(audio_processor); const int expected_output_channels = @@ -228,9 +227,8 @@ // Turn off the default settings and pass it to AudioProcessor. DisableDefaultSettings(settings); AudioProcessor audio_processor(mock_capture_callback_.Get(), - LogCallbackForTesting(), settings); + LogCallbackForTesting(), settings, params_); EXPECT_FALSE(audio_processor.has_webrtc_audio_processing()); - audio_processor.OnCaptureFormatChanged(params_); ProcessDataAndVerifyFormat(audio_processor, mock_capture_callback_, params_.sample_rate(), params_.channels(), @@ -247,9 +245,6 @@ const bool use_multichannel_processing = GetParam(); AudioProcessingSettings settings{.multi_channel_capture_processing = use_multichannel_processing}; - AudioProcessor audio_processor(mock_capture_callback_.Get(), - LogCallbackForTesting(), settings); - EXPECT_TRUE(audio_processor.has_webrtc_audio_processing()); static const int kSupportedSampleRates[] = { 8000, @@ -269,7 +264,9 @@ media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, sample_rate, buffer_size); - audio_processor.OnCaptureFormatChanged(params); + AudioProcessor audio_processor(mock_capture_callback_.Get(), + LogCallbackForTesting(), settings, params); + EXPECT_TRUE(audio_processor.has_webrtc_audio_processing()); VerifyDefaultComponents(audio_processor); int expected_sample_rate = @@ -296,7 +293,7 @@ &temp_file_path)); { AudioProcessor audio_processor(mock_capture_callback_.Get(), - LogCallbackForTesting(), settings); + LogCallbackForTesting(), settings, params_); // Start and stop recording. audio_processor.OnStartDump(base::File( @@ -331,7 +328,7 @@ &temp_file_path_b)); { AudioProcessor audio_processor(mock_capture_callback_.Get(), - LogCallbackForTesting(), settings); + LogCallbackForTesting(), settings, params_); // Start a recording. audio_processor.OnStartDump(base::File( @@ -394,9 +391,9 @@ // Turn on the stereo channels mirroring. settings.stereo_mirroring = true; AudioProcessor audio_processor(mock_capture_callback_.Get(), - LogCallbackForTesting(), settings); + LogCallbackForTesting(), settings, + source_params); EXPECT_EQ(audio_processor.has_webrtc_audio_processing(), use_apm); - audio_processor.OnCaptureFormatChanged(source_params); // There's no sense in continuing if this fails. ASSERT_EQ(2, audio_processor.OutputFormat().channels()); @@ -456,14 +453,12 @@ const bool use_multichannel_processing = GetParam(); AudioProcessingSettings settings{.multi_channel_capture_processing = use_multichannel_processing}; - AudioProcessor audio_processor(mock_capture_callback_.Get(), - LogCallbackForTesting(), settings); - EXPECT_TRUE(audio_processor.has_webrtc_audio_processing()); - media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC, 48000, 480); - audio_processor.OnCaptureFormatChanged(params); + AudioProcessor audio_processor(mock_capture_callback_.Get(), + LogCallbackForTesting(), settings, params); + EXPECT_TRUE(audio_processor.has_webrtc_audio_processing()); const int expected_output_channels = use_multichannel_processing ? params_.channels() : 1; @@ -478,16 +473,15 @@ // enabled. TEST_F(AudioProcessorTest, DiscreteChannelLayout) { AudioProcessingSettings settings; - AudioProcessor audio_processor(mock_capture_callback_.Get(), - LogCallbackForTesting(), settings); - EXPECT_TRUE(audio_processor.has_webrtc_audio_processing()); media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_DISCRETE, 48000, 480); // Test both 1 and 2 discrete channels. for (int channels = 1; channels <= 2; ++channels) { params.set_channels_for_discrete(channels); - audio_processor.OnCaptureFormatChanged(params); + AudioProcessor audio_processor(mock_capture_callback_.Get(), + LogCallbackForTesting(), settings, params); + EXPECT_TRUE(audio_processor.has_webrtc_audio_processing()); } } @@ -501,15 +495,13 @@ ProcessedAudioIsDeliveredAsSoonAsPossibleWithShortBuffers) { MockProcessedCaptureCallback mock_capture_callback; AudioProcessingSettings settings; - AudioProcessor audio_processor(mock_capture_callback.Get(), - LogCallbackForTesting(), settings); - ASSERT_TRUE(audio_processor.has_webrtc_audio_processing()); - // Set buffer size to 4 ms. media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 48000 * 4 / 1000); - audio_processor.OnCaptureFormatChanged(params); + AudioProcessor audio_processor(mock_capture_callback.Get(), + LogCallbackForTesting(), settings, params); + ASSERT_TRUE(audio_processor.has_webrtc_audio_processing()); int output_sample_rate = audio_processor.OutputFormat().sample_rate(); std::unique_ptr<media::AudioBus> data_bus = media::AudioBus::Create(params.channels(), params.frames_per_buffer()); @@ -552,15 +544,13 @@ ProcessedAudioIsDeliveredAsSoonAsPossibleWithLongBuffers) { MockProcessedCaptureCallback mock_capture_callback; AudioProcessingSettings settings; - AudioProcessor audio_processor(mock_capture_callback.Get(), - LogCallbackForTesting(), settings); - ASSERT_TRUE(audio_processor.has_webrtc_audio_processing()); - // Set buffer size to 35 ms. media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 48000 * 35 / 1000); - audio_processor.OnCaptureFormatChanged(params); + AudioProcessor audio_processor(mock_capture_callback.Get(), + LogCallbackForTesting(), settings, params); + ASSERT_TRUE(audio_processor.has_webrtc_audio_processing()); int output_sample_rate = audio_processor.OutputFormat().sample_rate(); std::unique_ptr<media::AudioBus> data_bus = media::AudioBus::Create(params.channels(), params.frames_per_buffer()); @@ -593,15 +583,13 @@ MockProcessedCaptureCallback mock_capture_callback; AudioProcessingSettings settings; DisableDefaultSettings(settings); - AudioProcessor audio_processor(mock_capture_callback.Get(), - LogCallbackForTesting(), settings); - ASSERT_FALSE(audio_processor.has_webrtc_audio_processing()); - // Set buffer size to 4 ms. media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 48000 * 4 / 1000); - audio_processor.OnCaptureFormatChanged(params); + AudioProcessor audio_processor(mock_capture_callback.Get(), + LogCallbackForTesting(), settings, params); + ASSERT_FALSE(audio_processor.has_webrtc_audio_processing()); int output_sample_rate = audio_processor.OutputFormat().sample_rate(); std::unique_ptr<media::AudioBus> data_bus = media::AudioBus::Create(params.channels(), params.frames_per_buffer()); @@ -631,15 +619,13 @@ MockProcessedCaptureCallback mock_capture_callback; AudioProcessingSettings settings; DisableDefaultSettings(settings); - AudioProcessor audio_processor(mock_capture_callback.Get(), - LogCallbackForTesting(), settings); - ASSERT_FALSE(audio_processor.has_webrtc_audio_processing()); - // Set buffer size to 35 ms. media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 48000 * 35 / 1000); - audio_processor.OnCaptureFormatChanged(params); + AudioProcessor audio_processor(mock_capture_callback.Get(), + LogCallbackForTesting(), settings, params); + ASSERT_FALSE(audio_processor.has_webrtc_audio_processing()); int output_sample_rate = audio_processor.OutputFormat().sample_rate(); std::unique_ptr<media::AudioBus> data_bus = media::AudioBus::Create(params.channels(), params.frames_per_buffer()); @@ -664,28 +650,29 @@ 1.0, false); } -TEST(AudioProcessorRequiresPlayoutReferenceTest, - TrueWhenEchoCancellationIsEnabled) { +TEST_F(AudioProcessorTest, + RequiresPlayoutReferenceWhenEchoCancellationIsEnabled) { MockProcessedCaptureCallback mock_capture_callback; AudioProcessingSettings settings; DisableDefaultSettings(settings); settings.echo_cancellation = true; AudioProcessor audio_processor(mock_capture_callback.Get(), - LogCallbackForTesting(), settings); + LogCallbackForTesting(), settings, params_); EXPECT_TRUE(audio_processor.RequiresPlayoutReference()); } -TEST(AudioProcessorRequiresPlayoutReferenceTest, TrueWhenGainControlIsEnabled) { +TEST_F(AudioProcessorTest, RequiresPlayoutReferenceWhenGainControlIsEnabled) { MockProcessedCaptureCallback mock_capture_callback; AudioProcessingSettings settings; DisableDefaultSettings(settings); settings.automatic_gain_control = true; AudioProcessor audio_processor(mock_capture_callback.Get(), - LogCallbackForTesting(), settings); + LogCallbackForTesting(), settings, params_); EXPECT_TRUE(audio_processor.RequiresPlayoutReference()); } -TEST(AudioProcessorRequiresPlayoutReferenceTest, FalseWhenAecAndAgcIsDisabled) { +TEST_F(AudioProcessorTest, + DoesNotRequirePlayoutReferenceWhenAecAndAgcIsDisabled) { MockProcessedCaptureCallback mock_capture_callback; AudioProcessingSettings settings; // Disable effects that need the playout signal. @@ -699,7 +686,7 @@ settings.stereo_mirroring = true; settings.force_apm_creation = true; AudioProcessor audio_processor(mock_capture_callback.Get(), - LogCallbackForTesting(), settings); + LogCallbackForTesting(), settings, params_); EXPECT_FALSE(audio_processor.RequiresPlayoutReference()); }
diff --git a/media/webrtc/helpers.cc b/media/webrtc/helpers.cc index 524b41a..da3ba0d2 100644 --- a/media/webrtc/helpers.cc +++ b/media/webrtc/helpers.cc
@@ -247,6 +247,9 @@ rtc::scoped_refptr<webrtc::AudioProcessing> CreateWebRtcAudioProcessingModule( const AudioProcessingSettings& settings) { + if (!settings.NeedWebrtcAudioProcessing()) + return nullptr; + webrtc::AudioProcessingBuilder ap_builder; if (settings.echo_cancellation) { ap_builder.SetEchoControlFactory(
diff --git a/media/webrtc/helpers.h b/media/webrtc/helpers.h index 138f2ff7..b04eaa0 100644 --- a/media/webrtc/helpers.h +++ b/media/webrtc/helpers.h
@@ -36,6 +36,7 @@ // Creates and configures a `webrtc::AudioProcessing` audio processing module // (APM), based on the provided parameters and on features and field trials. +// Returns nullptr if settings.NeedWebrtcAudioProcessing() is false. COMPONENT_EXPORT(MEDIA_WEBRTC) rtc::scoped_refptr<webrtc::AudioProcessing> CreateWebRtcAudioProcessingModule( const AudioProcessingSettings& settings);
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl index 3df2b67..d382e271 100644 --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl +++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -478,10 +478,9 @@ mojo::Message* message, std::unique_ptr<mojo::MessageReceiverWithStatus> responder) { {%- if interface.methods %} - const bool message_is_sync = message->has_flag(mojo::Message::kFlagIsSync); - const uint64_t request_id = message->request_id(); - ALLOW_UNUSED_LOCAL(message_is_sync); - ALLOW_UNUSED_LOCAL(request_id); + [[maybe_unused]] const bool message_is_sync = + message->has_flag(mojo::Message::kFlagIsSync); + [[maybe_unused]] const uint64_t request_id = message->request_id(); switch (message->header()->name) { {%- for method in interface.methods %} case internal::k{{class_name}}_{{method.name}}_Name: {
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module-shared.cc.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module-shared.cc.tmpl index 6d4cff4..38234e8 100644 --- a/mojo/public/tools/bindings/generators/cpp_templates/module-shared.cc.tmpl +++ b/mojo/public/tools/bindings/generators/cpp_templates/module-shared.cc.tmpl
@@ -9,7 +9,6 @@ #include <ostream> #include <utility> -#include "base/compiler_specific.h" #include "base/strings/stringprintf.h" #include "mojo/public/cpp/bindings/lib/validate_params.h" #include "mojo/public/cpp/bindings/lib/validation_errors.h" @@ -74,4 +73,3 @@ {{enum_trace_format_traits(enum)}} {%- endif %} {%- endfor %} -
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module-shared.h.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module-shared.h.tmpl index 8f9fad74..29aca23 100644 --- a/mojo/public/tools/bindings/generators/cpp_templates/module-shared.h.tmpl +++ b/mojo/public/tools/bindings/generators/cpp_templates/module-shared.h.tmpl
@@ -43,7 +43,6 @@ #include <utility> {%- if not contains_only_enums %} -#include "base/compiler_specific.h" #include "mojo/public/cpp/bindings/array_data_view.h" #include "mojo/public/cpp/bindings/enum_traits.h" #include "mojo/public/cpp/bindings/interface_data_view.h"
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl index 4b24764..51bf73d 100644 --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl +++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl
@@ -27,8 +27,8 @@ // NOTE: The memory backing |object| may be smaller than |sizeof(*object)| if // the message comes from an older version. - const {{class_name}}* object = static_cast<const {{class_name}}*>(data); - ALLOW_UNUSED_LOCAL(object); + [[maybe_unused]] const {{class_name}}* object = + static_cast<const {{class_name}}*>(data); {#- Before validating fields introduced at a certain version, we need to add a version check, which makes sure we skip further validation if |object|
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl index feff229..aa34ab2 100644 --- a/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl +++ b/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl
@@ -23,7 +23,6 @@ } const {{class_name}}* object = static_cast<const {{class_name}}*>(data); - ALLOW_UNUSED_LOCAL(object); if (inlined && object->is_null()) return true;
diff --git a/net/data/ssl/ev_roots/certs/3f99cc474acfce4dfed58794665e478d1547739f2e780f1bb4ca9b133097d401.pem b/net/data/ssl/ev_roots/certs/3f99cc474acfce4dfed58794665e478d1547739f2e780f1bb4ca9b133097d401.pem new file mode 100644 index 0000000..aac6949 --- /dev/null +++ b/net/data/ssl/ev_roots/certs/3f99cc474acfce4dfed58794665e478d1547739f2e780f1bb4ca9b133097d401.pem
@@ -0,0 +1,53 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 67:74:9d:8d:77:d8:3b:6a:db:22:f4:ff:59:e2:bf:ce + Signature Algorithm: ecdsa-with-SHA384 + Issuer: C = GR, O = Hellenic Academic and Research Institutions CA, CN = HARICA TLS ECC Root CA 2021 + Validity + Not Before: Feb 19 11:01:10 2021 GMT + Not After : Feb 13 11:01:09 2045 GMT + Subject: C = GR, O = Hellenic Academic and Research Institutions CA, CN = HARICA TLS ECC Root CA 2021 + Subject Public Key Info: + Public Key Algorithm: id-ecPublicKey + Public-Key: (384 bit) + pub: + 04:38:08:fe:b1:a0:96:d2:7a:ac:af:49:3a:d0:c0: + e0:c3:3b:28:aa:f1:72:6d:65:00:47:88:84:fc:9a: + 26:6b:aa:4b:ba:6c:04:0a:88:5e:17:f2:55:87:fc: + 30:b0:34:e2:34:58:57:1a:84:53:e9:30:d9:a9:f2: + 96:74:c3:51:1f:58:49:31:cc:98:4e:60:11:87:75: + d3:72:94:90:4f:9b:10:25:2a:a8:78:2d:be:90:41: + 58:90:15:72:a7:a1:b7 + ASN1 OID: secp384r1 + NIST CURVE: P-384 + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + C9:1B:53:81:12:FE:04:D5:16:D1:AA:BC:9A:6F:B7:A0:95:19:6E:CA + X509v3 Key Usage: critical + Digital Signature, Certificate Sign, CRL Sign + Signature Algorithm: ecdsa-with-SHA384 + 30:64:02:30:11:de:ae:f8:dc:4e:88:b0:a9:f0:22:ad:c2:51: + 40:ef:60:71:2d:ee:8f:02:c4:5d:03:70:49:a4:92:ea:c5:14: + 88:70:a6:d3:0d:b0:aa:ca:2c:40:9c:fb:e9:82:6e:9a:02:30: + 2b:47:9a:07:c6:d1:c2:81:7c:ca:0b:96:18:41:1b:a3:f4:30: + 09:9e:b5:23:28:0d:9f:14:b6:3c:53:a2:4c:06:69:7d:fa:6c: + 91:c6:2a:49:45:e6:ec:b7:13:e1:3a:6c +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw +CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh +cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v +dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG +A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg +Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 +KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y +STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD +AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw +SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN +nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/44b545aa8a25e65a73ca15dc27fc36d24c1cb9953a066539b11582dc487b4833.pem b/net/data/ssl/ev_roots/certs/44b545aa8a25e65a73ca15dc27fc36d24c1cb9953a066539b11582dc487b4833.pem new file mode 100644 index 0000000..56ab584 --- /dev/null +++ b/net/data/ssl/ev_roots/certs/44b545aa8a25e65a73ca15dc27fc36d24c1cb9953a066539b11582dc487b4833.pem
@@ -0,0 +1,54 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: ecdsa-with-SHA256 + Issuer: C = GR, L = Athens, O = Hellenic Academic and Research Institutions Cert. Authority, CN = Hellenic Academic and Research Institutions ECC RootCA 2015 + Validity + Not Before: Jul 7 10:37:12 2015 GMT + Not After : Jun 30 10:37:12 2040 GMT + Subject: C = GR, L = Athens, O = Hellenic Academic and Research Institutions Cert. Authority, CN = Hellenic Academic and Research Institutions ECC RootCA 2015 + Subject Public Key Info: + Public Key Algorithm: id-ecPublicKey + Public-Key: (384 bit) + pub: + 04:92:a0:41:e8:4b:82:84:5c:e2:f8:31:11:99:86: + 64:4e:09:25:2f:9d:41:2f:0a:ae:35:4f:74:95:b2: + 51:64:6b:8d:6b:e6:3f:70:95:f0:05:44:47:a6:72: + 38:50:76:95:02:5a:8e:ae:28:9e:f9:2d:4e:99:ef: + 2c:48:6f:4c:25:29:e8:d1:71:5b:df:1d:c1:75:37: + b4:d7:fa:7b:7a:42:9c:6a:0a:56:5a:7c:69:0b:aa: + 80:09:24:6c:7e:c1:46 + ASN1 OID: secp384r1 + NIST CURVE: P-384 + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + B4:22:0B:82:99:24:01:0E:9C:BB:E4:0E:FD:BF:FB:97:20:93:99:2A + Signature Algorithm: ecdsa-with-SHA256 + 30:64:02:30:67:ce:16:62:38:a2:ac:62:45:a7:a9:95:24:c0: + 1a:27:9c:32:3b:c0:c0:d5:ba:a9:e7:f8:04:43:53:85:ee:52: + 21:de:9d:f5:25:83:3e:9e:58:4b:2f:d7:67:13:0e:21:02:30: + 05:e1:75:01:de:68:ed:2a:1f:4d:4c:09:08:0d:ec:4b:ad:64: + 17:28:e7:75:ce:45:65:72:21:17:cb:22:41:0e:8c:13:98:38: + 9a:54:6d:9b:ca:e2:7c:ea:02:58:22:91 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/5d56499be4d2e08bcfcad08a3e38723d50503bde706948e42f55603019e528ae.pem b/net/data/ssl/ev_roots/certs/5d56499be4d2e08bcfcad08a3e38723d50503bde706948e42f55603019e528ae.pem new file mode 100644 index 0000000..cfad833 --- /dev/null +++ b/net/data/ssl/ev_roots/certs/5d56499be4d2e08bcfcad08a3e38723d50503bde706948e42f55603019e528ae.pem
@@ -0,0 +1,119 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 0a:01:42:80:00:00:01:45:23:c8:44:b5:00:00:00:02 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = US, O = IdenTrust, CN = IdenTrust Commercial Root CA 1 + Validity + Not Before: Jan 16 18:12:23 2014 GMT + Not After : Jan 16 18:12:23 2034 GMT + Subject: C = US, O = IdenTrust, CN = IdenTrust Commercial Root CA 1 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (4096 bit) + Modulus: + 00:a7:50:19:de:3f:99:3d:d4:33:46:f1:6f:51:61: + 82:b2:a9:4f:8f:67:89:5d:84:d9:53:dd:0c:28:d9: + d7:f0:ff:ae:95:43:72:99:f9:b5:5d:7c:8a:c1:42: + e1:31:50:74:d1:81:0d:7c:cd:9b:21:ab:43:e2:ac: + ad:5e:86:6e:f3:09:8a:1f:5a:32:bd:a2:eb:94:f9: + e8:5c:0a:ec:ff:98:d2:af:71:b3:b4:53:9f:4e:87: + ef:92:bc:bd:ec:4f:32:30:88:4b:17:5e:57:c4:53: + c2:f6:02:97:8d:d9:62:2b:bf:24:1f:62:8d:df:c3: + b8:29:4b:49:78:3c:93:60:88:22:fc:99:da:36:c8: + c2:a2:d4:2c:54:00:67:35:6e:73:bf:02:58:f0:a4: + dd:e5:b0:a2:26:7a:ca:e0:36:a5:19:16:f5:fd:b7: + ef:ae:3f:40:f5:6d:5a:04:fd:ce:34:ca:24:dc:74: + 23:1b:5d:33:13:12:5d:c4:01:25:f6:30:dd:02:5d: + 9f:e0:d5:47:bd:b4:eb:1b:a1:bb:49:49:d8:9f:5b: + 02:f3:8a:e4:24:90:e4:62:4f:4f:c1:af:8b:0e:74: + 17:a8:d1:72:88:6a:7a:01:49:cc:b4:46:79:c6:17: + b1:da:98:1e:07:59:fa:75:21:85:65:dd:90:56:ce: + fb:ab:a5:60:9d:c4:9d:f9:52:b0:8b:bd:87:f9:8f: + 2b:23:0a:23:76:3b:f7:33:e1:c9:00:f3:69:f9:4b: + a2:e0:4e:bc:7e:93:39:84:07:f7:44:70:7e:fe:07: + 5a:e5:b1:ac:d1:18:cc:f2:35:e5:49:49:08:ca:56: + c9:3d:fb:0f:18:7d:8b:3b:c1:13:c2:4d:8f:c9:4f: + 0e:37:e9:1f:a1:0e:6a:df:62:2e:cb:35:06:51:79: + 2c:c8:25:38:f4:fa:4b:a7:89:5c:9c:d2:e3:0d:39: + 86:4a:74:7c:d5:59:87:c2:3f:4e:0c:5c:52:f4:3d: + f7:52:82:f1:ea:a3:ac:fd:49:34:1a:28:f3:41:88: + 3a:13:ee:e8:de:ff:99:1d:5f:ba:cb:e8:1e:f2:b9: + 50:60:c0:31:d3:73:e5:ef:be:a0:ed:33:0b:74:be: + 20:20:c4:67:6c:f0:08:03:7a:55:80:7f:46:4e:96: + a7:f4:1e:3e:e1:f6:d8:09:e1:33:64:2b:63:d7:32: + 5e:9f:f9:c0:7b:0f:78:6f:97:bc:93:9a:f9:9c:12: + 90:78:7a:80:87:15:d7:72:74:9c:55:74:78:b1:ba: + e1:6e:70:04:ba:4f:a0:ba:68:c3:7b:ff:31:f0:73: + 3d:3d:94:2a:b1:0b:41:0e:a0:fe:4d:88:65:6b:79: + 33:b4:d7 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + ED:44:19:C0:D3:F0:06:8B:EE:A4:7B:BE:42:E7:26:54:C8:8E:36:76 + Signature Algorithm: sha256WithRSAEncryption + 0d:ae:90:32:f6:a6:4b:7c:44:76:19:61:1e:27:28:cd:5e:54: + ef:25:bc:e3:08:90:f9:29:d7:ae:68:08:e1:94:00:58:ef:2e: + 2e:7e:53:52:8c:b6:5c:07:ea:88:ba:99:8b:50:94:d7:82:80: + df:61:09:00:93:ad:0d:14:e6:ce:c1:f2:37:94:78:b0:5f:9c: + b3:a2:73:b8:8f:05:93:38:cd:8d:3e:b0:b8:fb:c0:cf:b1:f2: + ec:2d:2d:1b:cc:ec:aa:9a:b3:aa:60:82:1b:2d:3b:c3:84:3d: + 57:8a:96:1e:9c:75:b8:d3:30:cd:60:08:83:90:d3:8e:54:f1: + 4d:66:c0:5d:74:03:40:a3:ee:85:7e:c2:1f:77:9c:06:e8:c1: + a7:18:5d:52:95:ed:c9:dd:25:9e:6d:fa:a9:ed:a3:3a:34:d0: + 59:7b:da:ed:50:f3:35:bf:ed:eb:14:4d:31:c7:60:f4:da:f1: + 87:9c:e2:48:e2:c6:c5:37:fb:06:10:fa:75:59:66:31:47:29: + da:76:9a:1c:e9:82:ae:ef:9a:b9:51:f7:88:23:9a:69:95:62: + 3c:e5:55:80:36:d7:54:02:ff:f1:b9:5d:ce:d4:23:6f:d8:45: + 84:4a:5b:65:ef:89:0c:dd:14:a7:20:cb:18:a5:25:b4:0d:f9: + 01:f0:a2:d2:f4:00:c8:74:8e:a1:2a:48:8e:65:db:13:c4:e2: + 25:17:7d:eb:be:87:5b:17:20:54:51:93:4a:53:03:0b:ec:5d: + ca:33:ed:62:fd:45:c7:2f:5b:dc:58:a0:80:39:e6:fa:d7:fe: + 13:14:a6:ed:3d:94:4a:42:74:d4:c3:77:59:73:cd:8f:46:be: + 55:38:ef:fa:e8:91:32:ea:97:58:04:22:de:38:c3:cc:bc:6d: + c9:33:3a:6a:0a:69:3f:a0:c8:ea:72:8f:8c:63:86:23:bd:6d: + 3c:96:9e:95:e0:49:4c:aa:a2:b9:2a:1b:9c:36:81:78:ed:c3: + e8:46:e2:26:59:44:75:1e:d9:75:89:51:cd:10:84:9d:61:60: + cb:5d:f9:97:22:4d:8e:98:e6:e3:7f:f6:5b:bb:ae:cd:ca:4a: + 81:6b:5e:0b:f3:51:e1:74:2b:e9:7e:27:a7:d9:99:49:4e:f8: + a5:80:db:25:0f:1c:63:62:8a:c9:33:67:6b:3c:10:83:c6:ad: + de:a8:cd:16:8e:8d:f0:07:37:71:9f:f2:ab:fc:41:f5:c1:8b: + ec:00:37:5d:09:e5:4e:80:ef:fa:b1:5c:38:06:a5:1b:4a:e1: + dc:38:2d:3c:dc:ab:1f:90:1a:d5:4a:9c:ee:d1:70:6c:cc:ee: + f4:57:f8:18:ba:84:6e:87 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/657cfe2fa73faa38462571f332a2363a46fce7020951710702cdfbb6eeda3305.pem b/net/data/ssl/ev_roots/certs/657cfe2fa73faa38462571f332a2363a46fce7020951710702cdfbb6eeda3305.pem new file mode 100644 index 0000000..bed5a78d --- /dev/null +++ b/net/data/ssl/ev_roots/certs/657cfe2fa73faa38462571f332a2363a46fce7020951710702cdfbb6eeda3305.pem
@@ -0,0 +1,119 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 11:00:34:b6:4e:c6:36:2d:36 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = RO, O = CERTSIGN SA, OU = certSIGN ROOT CA G2 + Validity + Not Before: Feb 6 09:27:35 2017 GMT + Not After : Feb 6 09:27:35 2042 GMT + Subject: C = RO, O = CERTSIGN SA, OU = certSIGN ROOT CA G2 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (4096 bit) + Modulus: + 00:c0:c5:75:19:91:7d:44:74:74:87:fe:0e:3b:96: + dc:d8:01:16:cc:ee:63:91:e7:0b:6f:ce:3b:0a:69: + 1a:7c:c2:e3:af:82:8e:86:d7:5e:8f:57:eb:d3:21: + 59:fd:39:37:42:30:be:50:ea:b6:0f:a9:88:d8:2e: + 2d:69:21:e7:d1:37:18:4e:7d:91:d5:16:5f:6b:5b: + 00:c2:39:43:0d:36:85:52:b9:53:65:0f:1d:42:e5: + 8f:cf:05:d3:ee:dc:0c:1a:d9:b8:8b:78:22:67:e4: + 69:b0:68:c5:3c:e4:6c:5a:46:e7:cd:c7:fa:ef:c4: + ec:4b:bd:6a:a4:ac:fd:cc:28:51:ef:92:b4:29:ab: + ab:35:9a:4c:e4:c4:08:c6:26:cc:f8:69:9f:e4:9c: + f0:29:d3:5c:f9:c6:16:25:9e:23:c3:20:c1:3d:0f: + 3f:38:40:b0:fe:82:44:38:aa:5a:1a:8a:6b:63:58: + 38:b4:15:d3:b6:11:69:7b:1e:54:ee:8c:1a:22:ac: + 72:97:3f:23:59:9b:c9:22:84:c1:07:4f:cc:7f:e2: + 57:ca:12:70:bb:a6:65:f3:69:75:63:bd:95:fb:1b: + 97:cd:e4:a8:af:f6:d1:4e:a8:d9:8a:71:24:cd:36: + 3d:bc:96:c4:f1:6c:a9:ae:e5:cf:0d:6e:28:0d:b0: + 0e:b5:ca:51:7b:78:14:c3:20:2f:7f:fb:14:55:e1: + 11:99:fd:d5:0a:a1:9e:02:e3:62:5f:eb:35:4b:2c: + b8:72:e8:3e:3d:4f:ac:2c:bb:2e:86:e2:a3:76:8f: + e5:93:2a:cf:a5:ab:c8:5c:8d:4b:06:ff:12:46:ac: + 78:cb:14:07:35:e0:a9:df:8b:e9:af:15:4f:16:89: + 5b:bd:f6:8d:c6:59:ae:88:85:0e:c1:89:eb:1f:67: + c5:45:8e:ff:6d:37:36:2b:78:66:83:91:51:2b:3d: + ff:51:77:76:62:a1:ec:67:3e:3e:81:83:e0:56:a9: + 50:1f:1f:7a:99:ab:63:bf:84:17:77:f1:0d:3b:df: + f7:9c:61:b3:35:98:8a:3a:b2:ec:3c:1a:37:3f:7e: + 8f:92:cf:d9:12:14:64:da:10:02:15:41:ff:4f:c4: + eb:1c:a3:c9:fa:99:f7:46:e9:e1:18:d9:b1:b8:32: + 2d:cb:14:0c:50:d8:83:65:83:ee:b9:5c:cf:cb:05: + 5a:4c:fa:19:97:6b:d6:5d:13:d3:c2:5c:54:bc:32: + 73:a0:78:f5:f1:6d:1e:cb:9f:a5:a6:9f:22:dc:d1: + 51:9e:82:79:64:60:29:13:3e:a3:fd:4f:72:6a:ab: + e2:d4:e5:b8:24:55:2c:44:4b:8a:88:44:9c:ca:84: + d3:2a:3b + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + 82:21:2D:66:C6:D7:A0:E0:15:EB:CE:4C:09:77:C4:60:9E:54:6E:03 + Signature Algorithm: sha256WithRSAEncryption + 60:de:1a:b8:e7:f2:60:82:d5:03:33:81:cb:06:8a:f1:22:49: + e9:e8:ea:91:7f:c6:33:5e:68:19:03:86:3b:43:01:cf:07:70: + e4:08:1e:65:85:91:e6:11:22:b7:f5:02:23:8e:ae:b9:1e:7d: + 1f:7e:6c:e6:bd:25:d5:95:1a:f2:05:a6:af:85:02:6f:ae:f8: + d6:31:ff:25:c9:4a:c8:c7:8a:a9:d9:9f:4b:49:9b:11:57:99: + 92:43:11:de:b6:33:a4:cc:d7:8d:64:7d:d4:cd:3c:28:2c:b4: + 9a:96:ea:4d:f5:c4:44:c4:25:aa:20:80:d8:29:55:f7:e0:41: + fc:06:26:ff:b9:36:f5:43:14:03:66:78:e1:11:b1:da:20:5f: + 46:00:78:00:21:a5:1e:00:28:61:78:6f:a8:01:01:8f:9d:34: + 9a:ff:f4:38:90:fb:b8:d1:b3:72:06:c9:71:e6:81:c5:79:ed: + 0b:a6:79:f2:13:0b:9c:f7:5d:0e:7b:24:93:b4:48:db:86:5f: + de:50:86:78:e7:40:e6:31:a8:90:76:70:61:af:9c:37:2c:11: + b5:82:b7:aa:ae:24:34:5b:72:0c:69:0d:cd:59:9f:f6:71:af: + 9c:0b:d1:0a:38:f9:06:22:83:53:25:0c:fc:51:c4:e6:be:e2: + 39:95:0b:24:ad:af:d1:95:e4:96:d7:74:64:6b:71:4e:02:3c: + aa:85:f3:20:a3:43:39:76:5b:6c:50:fe:9a:9c:14:1e:65:14: + 8a:15:bd:a3:82:45:5a:49:56:6a:d2:9c:b1:63:32:e5:61:e0: + 53:22:0e:a7:0a:49:ea:cb:7e:1f:a8:e2:62:80:f6:10:45:52: + 98:06:18:de:a5:cd:2f:7f:aa:d4:e9:3e:08:72:ec:23:03:02: + 3c:a6:aa:d8:bc:67:74:3d:14:17:fb:54:4b:17:e3:d3:79:3d: + 6d:6b:49:c9:28:0e:2e:74:50:bf:0c:d9:46:3a:10:86:c9:a7: + 3f:e9:a0:ec:7f:eb:a5:77:58:69:71:e6:83:0a:37:f2:86:49: + 6a:be:79:08:90:f6:02:16:64:3e:e5:da:4c:7e:0c:34:c9:f9: + 5f:b6:b3:28:51:a7:a7:2b:aa:49:fa:8d:65:29:4e:e3:6b:13: + a7:94:a3:2d:51:6d:78:0c:44:cb:df:de:08:6f:ce:a3:64:ab: + d3:95:84:d4:b9:52:54:72:7b:96:25:cc:bc:69:e3:48:6e:0d: + d0:c7:9d:27:9a:aa:f8:13:92:dd:1e:df:63:9f:35:a9:16:36: + ec:8c:b8:83:f4:3d:89:8f:cd:b4:17:5e:d7:b3:17:41:10:5d: + 27:73:60:85:57:49:22:07 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g +Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ +BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ +R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF +dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw +vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ +uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp +n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs +cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW +xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P +rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF +DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx +DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy +LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C +eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ +d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq +kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl +qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 +OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c +NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk +ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO +pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj +03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk +PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE +1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX +QRBdJ3NghVdJIgc= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/6c61dac3a2def031506be036d2a6fe401994fbd13df9c8d466599274c446ec98.pem b/net/data/ssl/ev_roots/certs/6c61dac3a2def031506be036d2a6fe401994fbd13df9c8d466599274c446ec98.pem new file mode 100644 index 0000000..7319c65 --- /dev/null +++ b/net/data/ssl/ev_roots/certs/6c61dac3a2def031506be036d2a6fe401994fbd13df9c8d466599274c446ec98.pem
@@ -0,0 +1,80 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 80544274841616 (0x49412ce40010) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = HU, L = Budapest, O = NetLock Kft., OU = Tan\C3\BAs\C3\ADtv\C3\A1nykiad\C3\B3k (Certification Services), CN = NetLock Arany (Class Gold) F\C5\91tan\C3\BAs\C3\ADtv\C3\A1ny + Validity + Not Before: Dec 11 15:08:21 2008 GMT + Not After : Dec 6 15:08:21 2028 GMT + Subject: C = HU, L = Budapest, O = NetLock Kft., OU = Tan\C3\BAs\C3\ADtv\C3\A1nykiad\C3\B3k (Certification Services), CN = NetLock Arany (Class Gold) F\C5\91tan\C3\BAs\C3\ADtv\C3\A1ny + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (2048 bit) + Modulus: + 00:c4:24:5e:73:be:4b:6d:14:c3:a1:f4:e3:97:90: + 6e:d2:30:45:1e:3c:ee:67:d9:64:e0:1a:8a:7f:ca: + 30:ca:83:e3:20:c1:e3:f4:3a:d3:94:5f:1a:7c:5b: + 6d:bf:30:4f:84:27:f6:9f:1f:49:bc:c6:99:0a:90: + f2:0f:f5:7f:43:84:37:63:51:8b:7a:a5:70:fc:7a: + 58:cd:8e:9b:ed:c3:46:6c:84:70:5d:da:f3:01:90: + 23:fc:4e:30:a9:7e:e1:27:63:e7:ed:64:3c:a0:b8: + c9:33:63:fe:16:90:ff:b0:b8:fd:d7:a8:c0:c0:94: + 43:0b:b6:d5:59:a6:9e:56:d0:24:1f:70:79:af:db: + 39:54:0d:65:75:d9:15:41:94:01:af:5e:ec:f6:8d: + f1:ff:ad:64:fe:20:9a:d7:5c:eb:fe:a6:1f:08:64: + a3:8b:76:55:ad:1e:3b:28:60:2e:87:25:e8:aa:af: + 1f:c6:64:46:20:b7:70:7f:3c:de:48:db:96:53:b7: + 39:77:e4:1a:e2:c7:16:84:76:97:5b:2f:bb:19:15: + 85:f8:69:85:f5:99:a7:a9:f2:34:a7:a9:b6:a6:03: + fc:6f:86:3d:54:7c:76:04:9b:6b:f9:40:5d:00:34: + c7:2e:99:75:9d:e5:88:03:aa:4d:f8:03:d2:42:76: + c0:1b + Exponent: 43147 (0xa88b) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE, pathlen:4 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + CC:FA:67:93:F0:B6:B8:D0:A5:C0:1E:F3:53:FD:8C:53:DF:83:D7:96 + Signature Algorithm: sha256WithRSAEncryption + ab:7f:ee:1c:16:a9:9c:3c:51:00:a0:c0:11:08:05:a7:99:e6: + 6f:01:88:54:61:6e:f1:b9:18:ad:4a:ad:fe:81:40:23:94:2f: + fb:75:7c:2f:28:4b:62:24:81:82:0b:f5:61:f1:1c:6e:b8:61: + 38:eb:81:fa:62:a1:3b:5a:62:d3:94:65:c4:e1:e6:6d:82:f8: + 2f:25:70:b2:21:26:c1:72:51:1f:8c:2c:c3:84:90:c3:5a:8f: + ba:cf:f4:a7:65:a5:eb:98:d1:fb:05:b2:46:75:15:23:6a:6f: + 85:63:30:80:f0:d5:9e:1f:29:1c:c2:6c:b0:50:59:5d:90:5b: + 3b:a8:0d:30:cf:bf:7d:7f:ce:f1:9d:83:bd:c9:46:6e:20:a6: + f9:61:51:ba:21:2f:7b:be:a5:15:63:a1:d4:95:87:f1:9e:b9: + f3:89:f3:3d:85:b8:b8:db:be:b5:b9:29:f9:da:37:05:00:49: + 94:03:84:44:e7:bf:43:31:cf:75:8b:25:d1:f4:a6:64:f5:92: + f6:ab:05:eb:3d:e9:a5:0b:36:62:da:cc:06:5f:36:8b:b6:5e: + 31:b8:2a:fb:5e:f6:71:df:44:26:9e:c4:e6:0d:91:b4:2e:75: + 95:80:51:6a:4b:30:a6:b0:62:a1:93:f1:9b:d8:ce:c4:63:75: + 3f:59:47:b1 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/9a296a5182d1d451a2e37f439b74daafa267523329f90f9a0d2007c334e23c9a.pem b/net/data/ssl/ev_roots/certs/9a296a5182d1d451a2e37f439b74daafa267523329f90f9a0d2007c334e23c9a.pem new file mode 100644 index 0000000..1e303ff --- /dev/null +++ b/net/data/ssl/ev_roots/certs/9a296a5182d1d451a2e37f439b74daafa267523329f90f9a0d2007c334e23c9a.pem
@@ -0,0 +1,123 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 5a:4b:bd:5a:fb:4f:8a:5b:fa:65:e5 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = AT, O = e-commerce monitoring GmbH, CN = GLOBALTRUST 2020 + Validity + Not Before: Feb 10 00:00:00 2020 GMT + Not After : Jun 10 00:00:00 2040 GMT + Subject: C = AT, O = e-commerce monitoring GmbH, CN = GLOBALTRUST 2020 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (4096 bit) + Modulus: + 00:ae:2e:56:ad:1b:1c:ef:f6:95:8f:a0:77:1b:2b: + d3:63:8f:84:4d:45:a2:0f:9f:5b:45:ab:59:7b:51: + 34:f9:ec:8b:8a:78:c5:dd:6b:af:bd:c4:df:93:45: + 1e:bf:91:38:0b:ae:0e:16:e7:41:73:f8:db:bb:d1: + b8:51:e0:cb:83:3b:73:38:6e:77:8a:0f:59:63:26: + cd:a7:2a:ce:54:fb:b8:e2:c0:7c:47:ce:60:7c:3f: + b2:73:f2:c0:19:b6:8a:92:87:35:0d:90:28:a2:e4: + 15:04:63:3e:ba:af:ee:7c:5e:cc:a6:8b:50:b2:38: + f7:41:63:ca:ce:ff:69:8f:68:0e:95:36:e5:cc:b9: + 8c:09:ca:4b:dd:31:90:96:c8:cc:1f:fd:56:96:34: + db:8e:1c:ea:2c:be:85:2e:63:dd:aa:a9:95:d3:fd: + 29:95:13:f0:c8:98:93:d9:2d:16:47:90:11:83:a2: + 3a:22:a2:28:57:a2:eb:fe:c0:8c:28:a0:a6:7d:e7: + 2a:42:3b:82:80:63:a5:63:1f:19:cc:7c:b2:66:a8: + c2:d3:6d:37:6f:e2:7e:06:51:d9:45:84:1f:12:ce: + 24:52:64:85:0b:48:80:4e:87:b1:22:22:30:aa:eb: + ae:be:e0:02:e0:40:e8:b0:42:80:03:51:aa:b4:7e: + aa:44:d7:43:61:f3:a2:6b:16:89:49:a4:a3:a4:2b: + 8a:02:c4:78:f4:68:8a:c1:e4:7a:36:b1:6f:1b:96: + 1b:77:49:8d:d4:c9:06:72:8f:cf:53:e3:dc:17:85: + 20:4a:dc:98:27:d3:91:26:2b:47:1e:69:07:af:de: + a2:e4:e4:d4:6b:0b:b3:5e:7c:d4:24:80:47:29:69: + 3b:6e:e8:ac:fd:40:eb:d8:ed:71:71:2b:f2:e8:58: + 1d:eb:41:97:22:c5:1f:d4:39:d0:27:8f:87:e3:18: + f4:e0:a9:46:0d:f5:74:3a:82:2e:d0:6e:2c:91:a3: + 31:5c:3b:46:ea:7b:04:10:56:5e:80:1d:f5:a5:65: + e8:82:fc:e2:07:8c:62:45:f5:20:de:46:70:86:a1: + bc:93:d3:1e:74:a6:6c:b0:2c:f7:03:0c:88:0c:cb: + d4:72:53:86:bc:60:46:f3:98:6a:c2:f1:bf:43:f9: + 70:20:77:ca:37:41:79:55:52:63:8d:5b:12:9f:c5: + 68:c4:88:9d:ac:f2:30:ab:b7:a3:31:97:67:ad:8f: + 17:0f:6c:c7:73:ed:24:94:6b:c8:83:9a:d0:9a:37: + 49:04:ab:b1:16:c8:6c:49:49:2d:ab:a1:d0:8c:92: + f2:41:4a:79:21:25:db:63:d7:b6:9c:a7:7e:42:69: + fb:3a:63 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + DC:2E:1F:D1:61:37:79:E4:AB:D5:D5:B3:12:71:68:3D:6A:68:9C:22 + X509v3 Authority Key Identifier: + keyid:DC:2E:1F:D1:61:37:79:E4:AB:D5:D5:B3:12:71:68:3D:6A:68:9C:22 + + Signature Algorithm: sha256WithRSAEncryption + 91:f0:42:02:68:40:ee:c3:68:c0:54:2f:df:ec:62:c3:c3:9e: + 8a:a0:31:28:aa:83:8e:a4:56:96:12:10:86:56:ba:97:72:d2: + 54:30:7c:ad:19:d5:1d:68:6f:fb:14:42:d8:8d:0e:f3:b5:d1: + a5:e3:02:42:5e:dc:e8:46:58:07:35:02:30:e0:bc:74:4a:c1: + 43:2a:ff:db:1a:d0:b0:af:6c:c3:fd:cb:b3:f5:7f:6d:03:2e: + 59:56:9d:2d:2d:35:8c:b2:d6:43:17:2c:92:0a:cb:5d:e8:8c: + 0f:4b:70:43:d0:82:ff:a8:cc:bf:a4:94:c0:be:87:bd:8a:e3: + 93:7b:c6:8f:9b:16:9d:27:65:bc:7a:c5:42:82:6c:5c:07:d0: + a9:c1:88:60:44:e9:98:85:16:5f:f8:8f:ca:01:10:ce:25:c3: + f9:60:1b:a0:c5:97:c3:d3:2c:88:31:a2:bd:30:ec:d0:d0:c0: + 12:f1:c1:39:e3:e5:f5:f8:d6:4a:dd:34:cd:fb:6f:c1:4f:e3: + 00:8b:56:e2:92:f7:28:b2:42:77:72:23:67:c7:3f:11:15:b2: + c4:03:05:be:bb:11:7b:0a:bf:a8:6e:e7:ff:58:43:cf:9b:67: + a0:80:07:b6:1d:ca:ad:6d:ea:41:11:7e:2d:74:93:fb:c2:bc: + be:51:44:c5:ef:68:25:27:80:e3:c8:a0:d4:12:ec:d9:a5:37: + 1d:37:7c:b4:91:ca:da:d4:b1:96:81:ef:68:5c:76:10:49:af: + 7e:a5:37:80:b1:1c:52:bd:33:81:4c:8f:f9:dd:65:d9:14:cd: + 8a:25:58:f4:e2:c5:83:a5:09:90:d4:6c:14:63:b5:40:df:eb: + c0:fc:c4:58:7e:0d:14:16:87:54:27:6e:56:e4:70:84:b8:6c: + 32:12:7e:82:31:43:be:d7:dd:7c:a1:ad:ae:d6:ab:20:12:ef: + 0a:c3:10:8c:49:96:35:dc:0b:75:5e:b1:4f:d5:4f:34:0e:11: + 20:07:75:43:45:e9:a3:11:da:ac:a3:99:c2:b6:79:27:e2:b9: + ef:c8:e2:f6:35:29:7a:74:fa:c5:7f:82:05:62:a6:0a:ea:68: + b2:79:47:06:6e:f2:57:a8:15:33:c6:f7:78:4a:3d:42:7b:6b: + 7e:fe:f7:46:ea:d1:eb:8e:ef:88:68:5b:e8:c1:d9:71:7e:fd: + 64:ef:ff:67:47:88:58:25:2f:3e:86:07:bd:fb:a8:e5:82:a8: + ac:a5:d3:69:43:cd:31:88:49:84:53:92:c0:b1:39:1b:39:83: + 01:30:c4:f2:a9:fa:d0:03:bd:72:37:60:56:1f:36:7c:bd:39: + 91:f5:6d:0d:bf:7b:d7:92 +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG +A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw +FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx +MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u +aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq +hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b +RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z +YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3 +QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw +yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+ +BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ +SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH +r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0 +4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me +dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw +q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2 +nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu +H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC +XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd +6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf ++I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi +kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7 +wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB +TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C +MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn +4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I +aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy +qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/a040929a02ce53b4acf4f2ffc6981ce4496f755e6d45fe0b2a692bcd52523f36.pem b/net/data/ssl/ev_roots/certs/a040929a02ce53b4acf4f2ffc6981ce4496f755e6d45fe0b2a692bcd52523f36.pem new file mode 100644 index 0000000..1c4d5db --- /dev/null +++ b/net/data/ssl/ev_roots/certs/a040929a02ce53b4acf4f2ffc6981ce4496f755e6d45fe0b2a692bcd52523f36.pem
@@ -0,0 +1,122 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = GR, L = Athens, O = Hellenic Academic and Research Institutions Cert. Authority, CN = Hellenic Academic and Research Institutions RootCA 2015 + Validity + Not Before: Jul 7 10:11:21 2015 GMT + Not After : Jun 30 10:11:21 2040 GMT + Subject: C = GR, L = Athens, O = Hellenic Academic and Research Institutions Cert. Authority, CN = Hellenic Academic and Research Institutions RootCA 2015 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (4096 bit) + Modulus: + 00:c2:f8:a9:3f:1b:89:fc:3c:3c:04:5d:3d:90:36: + b0:91:3a:79:3c:66:5a:ef:6d:39:01:49:1a:b4:b7: + cf:7f:4d:23:53:b7:90:00:e3:13:2a:28:a6:31:f1: + 91:00:e3:28:ec:ae:21:41:ce:1f:da:fd:7d:12:5b: + 01:83:0f:b9:b0:5f:99:e1:f2:12:83:80:4d:06:3e: + df:ac:af:e7:a1:88:6b:31:af:f0:8b:d0:18:33:b8: + db:45:6a:34:f4:02:80:24:28:0a:02:15:95:5e:76: + 2a:0d:99:3a:14:5b:f6:cb:cb:53:bc:13:4d:01:88: + 37:94:25:1b:42:bc:22:d8:8e:a3:96:5e:3a:d9:32: + db:3e:e8:f0:10:65:ed:74:e1:2f:a7:7c:af:27:34: + bb:29:7d:9b:b6:cf:09:c8:e5:d3:0a:fc:88:65:65: + 74:0a:dc:73:1c:5c:cd:40:b1:1c:d4:b6:84:8c:4c: + 50:cf:68:8e:a8:59:ae:c2:27:4e:82:a2:35:dd:14: + f4:1f:ff:b2:77:d5:87:2f:aa:6e:7d:24:27:e7:c6: + cb:26:e6:e5:fe:67:07:63:d8:45:0d:dd:3a:59:65: + 39:58:7a:92:99:72:3d:9c:84:5e:88:21:b8:d5:f4: + 2c:fc:d9:70:52:4f:78:b8:bd:3c:2b:8b:95:98:f5: + b3:d1:68:cf:20:14:7e:4c:5c:5f:e7:8b:e5:f5:35: + 81:19:37:d7:11:08:b7:66:be:d3:4a:ce:83:57:00: + 3a:c3:81:f8:17:cb:92:36:5d:d1:a3:d8:75:1b:e1: + 8b:27:ea:7a:48:41:fd:45:19:06:ad:27:99:4e:c1: + 70:47:dd:b5:9f:81:53:12:e5:b1:8c:48:5d:31:43: + 17:e3:8c:c6:7a:63:96:4b:29:30:4e:84:4e:62:19: + 5e:3c:ce:97:90:a5:7f:01:eb:9d:e0:f8:8b:89:dd: + 25:98:3d:92:b6:7e:ef:d9:f1:51:51:7d:2d:26:c8: + 69:59:61:e0:ac:6a:b8:2a:36:11:04:7a:50:bd:32: + 84:be:2f:dc:72:d5:d7:1d:16:47:e4:47:66:20:3f: + f4:96:c5:af:8e:01:7a:a5:0f:7a:64:f5:0d:18:87: + d9:ae:88:d5:fa:84:c1:3a:c0:69:28:2d:f2:0d:68: + 51:aa:e3:a5:77:c6:a4:90:0e:a1:37:8b:31:23:47: + c1:09:08:eb:6e:f7:78:9b:d7:82:fc:84:20:99:49: + 19:b6:12:46:b1:fb:45:55:16:a9:a3:65:ac:9c:07: + 0f:ea:6b:dc:1f:2e:06:72:ec:86:88:12:e4:2d:db: + 5f:05:2f:e4:f0:03:d3:26:33:e7:80:c2:cd:42:a1: + 17:34:0b + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + 71:15:67:C8:C8:C9:BD:75:5D:72:D0:38:18:6A:9D:F3:71:24:54:0B + Signature Algorithm: sha256WithRSAEncryption + 75:bb:6d:54:4b:aa:10:58:46:34:f2:62:d7:16:36:5d:08:5e: + d5:6c:c8:87:bd:b4:2e:46:f2:31:f8:7c:ea:42:b5:93:16:55: + dc:a1:0c:12:a0:da:61:7e:0f:58:58:73:64:72:c7:e8:45:8e: + dc:a9:f2:26:3f:c6:79:8c:b1:53:08:33:81:b0:56:13:be:e6: + 51:5c:d8:9b:0a:4f:4b:9c:56:53:02:e9:4f:f6:0d:60:ea:4d: + 42:55:e8:7c:1b:21:21:d3:1b:3a:cc:77:f2:b8:90:f1:68:c7: + f9:5a:fe:fa:2d:f4:bf:c9:f5:45:1b:ce:38:10:2a:37:8a:79: + a3:b4:e3:09:6c:85:86:93:ff:89:96:27:78:81:8f:67:e3:46: + 74:54:8e:d9:0d:69:e2:4a:f4:4d:74:03:ff:b2:77:ed:95:67: + 97:e4:b1:c5:ab:bf:6a:23:e8:d4:94:e2:44:28:62:c4:4b:e2: + f0:d8:e2:29:6b:1a:70:7e:24:61:93:7b:4f:03:32:25:0d:45: + 24:2b:96:b4:46:6a:bf:4a:0b:f7:9a:8f:c1:ac:1a:c5:67:f3: + 6f:34:d2:fa:73:63:8c:ef:16:b0:a8:a4:46:2a:f8:eb:12:ec: + 72:b4:ef:f8:2b:7e:8c:52:c0:8b:84:54:f9:2f:3e:e3:55:a8: + dc:66:b1:d9:e1:5f:d8:b3:8c:59:34:59:a4:ab:4f:6c:bb:1f: + 18:db:75:ab:d8:cb:92:cd:94:38:61:0e:07:06:1f:4b:46:10: + f1:15:be:8d:85:5c:3b:4a:2b:81:79:0f:b4:69:9f:49:50:97: + 4d:f7:0e:56:5d:c0:95:6a:c2:36:c3:1b:68:c9:f5:2a:dc:47: + 9a:be:b2:ce:c5:25:e8:fa:03:b9:da:f9:16:6e:91:84:f5:1c: + 28:c8:fc:26:cc:d7:1c:90:56:a7:5f:6f:3a:04:bc:cd:78:89: + 0b:8e:0f:2f:a3:aa:4f:a2:1b:12:3d:16:08:40:0f:f1:46:4c: + d7:aa:7b:08:c1:0a:f5:6d:27:de:02:8f:ca:c3:b5:2b:ca:e9: + eb:c8:21:53:38:a5:cc:3b:d8:77:37:30:a2:4f:d9:6f:d1:f2: + 40:ad:41:7a:17:c5:d6:4a:35:89:b7:41:d5:7c:86:7f:55:4d: + 83:4a:a5:73:20:c0:3a:af:90:f1:9a:24:8e:d9:8e:71:ca:7b: + b8:86:da:b2:8f:99:3e:1d:13:0d:12:11:ee:d4:ab:f0:e9:15: + 76:02:e4:e0:df:aa:20:1e:5b:61:85:64:40:a9:90:97:0d:ad: + 53:d2:5a:1d:87:6a:00:97:65:62:b4:be:6f:6a:a7:f5:2c:42: + ed:32:ad:b6:21:9e:be:bc +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/d95d0e8eda79525bf9beb11b14d2100d3294985f0c62d9fabd9cd999eccb7b1d.pem b/net/data/ssl/ev_roots/certs/d95d0e8eda79525bf9beb11b14d2100d3294985f0c62d9fabd9cd999eccb7b1d.pem new file mode 100644 index 0000000..b592a4e8 --- /dev/null +++ b/net/data/ssl/ev_roots/certs/d95d0e8eda79525bf9beb11b14d2100d3294985f0c62d9fabd9cd999eccb7b1d.pem
@@ -0,0 +1,121 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 39:ca:93:1c:ef:43:f3:c6:8e:93:c7:f4:64:89:38:7e + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = GR, O = Hellenic Academic and Research Institutions CA, CN = HARICA TLS RSA Root CA 2021 + Validity + Not Before: Feb 19 10:55:38 2021 GMT + Not After : Feb 13 10:55:37 2045 GMT + Subject: C = GR, O = Hellenic Academic and Research Institutions CA, CN = HARICA TLS RSA Root CA 2021 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (4096 bit) + Modulus: + 00:8b:c2:e7:af:65:9b:05:67:96:c9:0d:24:b9:d0: + 0e:64:fc:ce:e2:24:18:2c:84:7f:77:51:cb:04:11: + 36:b8:5e:ed:69:71:a7:9e:e4:25:09:97:67:c1:47: + c2:cf:91:16:36:62:3d:38:04:e1:51:82:ff:ac:d2: + b4:69:dd:2e:ec:11:a3:45:ee:6b:6b:3b:4c:bf:8c: + 8d:a4:1e:9d:11:b9:e9:38:f9:7a:0e:0c:98:e2:23: + 1d:d1:4e:63:d4:e7:b8:41:44:fb:6b:af:6b:da:1f: + d3:c5:91:88:5b:a4:89:92:d1:81:e6:8c:39:58:a0: + d6:69:43:a9:ad:98:52:58:6e:db:0a:fb:6b:cf:68: + fa:e3:a4:5e:3a:45:73:98:07:ea:5f:02:72:de:0c: + a5:b3:9f:ae:a9:1d:b7:1d:b3:fc:8a:59:e7:6e:72: + 65:ad:f5:30:94:23:07:f3:82:16:4b:35:98:9c:53: + bb:2f:ca:e4:5a:d9:c7:8d:1d:fc:98:99:fb:2c:a4: + 82:6b:f0:2a:1f:8e:0b:5f:71:5c:5c:ae:42:7b:29: + 89:81:cb:03:a3:99:ca:88:9e:0b:40:09:41:33:db: + e6:58:7a:fd:ae:99:70:c0:5a:0f:d6:13:86:71:2f: + 76:69:fc:90:dd:db:2d:6e:d1:f2:9b:f5:1a:6b:9e: + 6f:15:8c:7a:f0:4b:28:a0:22:38:80:24:6c:36:a4: + 3b:f2:30:91:f3:78:13:cf:c1:3f:35:ab:f1:1d:11: + 23:b5:43:22:9e:01:92:b7:18:02:e5:11:d1:82:db: + 15:00:cc:61:37:c1:2a:7c:9a:e1:d0:ba:b3:50:46: + ee:82:ac:9d:31:f8:fb:23:e2:03:00:48:70:a3:09: + 26:79:15:53:60:f3:38:5c:ad:38:ea:81:00:63:14: + b9:33:5e:dd:0b:db:a0:45:07:1a:33:09:f8:4d:b4: + a7:02:a6:69:f4:c2:59:05:88:65:85:56:ae:4b:cb: + e0:de:3c:7d:2d:1a:c8:e9:fb:1f:a3:61:4a:d6:2a: + 13:ad:77:4c:1a:18:9b:91:0f:58:d8:06:54:c5:97: + f8:aa:3f:20:8a:a6:85:a6:77:f6:a6:fc:1c:e2:ee: + 6e:94:33:2a:83:50:84:0a:e5:4f:86:f8:50:45:78: + 00:81:eb:5b:68:e3:26:8d:cc:7b:5c:51:f4:14:2c: + 40:be:1a:60:1d:7a:72:61:1d:1f:63:2d:88:aa:ce: + a2:45:90:08:fc:6b:be:b3:50:2a:5a:fd:a8:48:18: + 46:d6:90:40:92:90:0a:84:5e:68:31:f8:eb:ed:0d: + d3:1d:c6:7d:99:18:55:56:27:65:2e:8d:45:c5:24: + ec:ce:e3 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + 0A:48:23:A6:60:A4:92:0A:33:EA:93:5B:C5:57:EA:25:4D:BD:12:EE + X509v3 Key Usage: critical + Digital Signature, Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 3e:90:48:aa:6e:62:15:25:66:7b:0c:d5:8c:8b:89:9d:d7:ed: + 4e:07:ef:9c:d0:14:5f:5e:50:bd:68:96:90:a4:14:11:aa:68: + 6d:09:35:39:40:09:da:f4:09:2c:34:a5:7b:59:84:49:29:97: + 74:c8:07:1e:47:6d:f2:ce:1c:50:26:e3:9e:3d:40:53:3f:f7: + 7f:96:76:10:c5:46:a5:d0:20:4b:50:f4:35:3b:18:f4:55:6a: + 41:1b:47:06:68:3c:bb:09:08:62:d9:5f:55:42:aa:ac:53:85: + ac:95:56:36:56:ab:e4:05:8c:c5:a8:da:1f:a3:69:bd:53:0f: + c4:ff:dc:ca:e3:7e:f2:4c:88:86:47:46:1a:f3:00:f5:80:91: + a2:dc:43:42:94:9b:20:f0:d1:cd:b2:eb:2c:53:c2:53:78:4a: + 4f:04:94:41:9a:8f:27:32:c1:e5:49:19:bf:f1:f2:c2:8b:a8: + 0a:39:31:28:b4:7d:62:36:2c:4d:ec:1f:33:b6:7e:77:6d:7e: + 50:f0:9f:0e:d7:11:8f:cf:18:c5:e3:27:fe:26:ef:05:9d:cf: + cf:37:c5:d0:7b:da:3b:b0:16:84:0c:3a:93:d6:be:17:db:0f: + 3e:0e:19:78:09:c7:a9:02:72:22:4b:f7:37:76:ba:75:c4:85: + 03:5a:63:d5:b1:75:05:c2:b9:bd:94:ad:8c:15:99:a7:93:7d: + f6:c5:f3:aa:74:cf:04:85:94:98:00:f4:e2:f9:ca:24:65:bf: + e0:62:af:c8:c5:fa:b2:c9:9e:56:48:da:79:fd:96:76:15:be: + a3:8e:56:c4:b3:34:fc:be:47:f4:c1:b4:a8:fc:d5:30:88:68: + ee:cb:ae:c9:63:c4:76:be:ac:38:18:e1:5e:5c:cf:ae:3a:22: + 51:eb:d1:8b:b3:f3:2b:33:07:54:87:fa:b4:b2:13:7b:ba:53: + 04:62:01:9d:f1:c0:4f:ee:e1:3a:d4:8b:20:10:fa:02:57:e6: + ef:c1:0b:b7:90:46:9c:19:29:8c:dc:6f:a0:4a:69:69:94:b7: + 24:65:a0:ff:ac:3f:ce:01:fb:21:2e:fd:68:f8:9b:f2:a5:cf: + 31:38:5c:15:aa:e6:97:00:c1:df:5a:a5:a7:39:aa:e9:84:7f: + 3c:51:a8:3a:d9:94:5b:8c:bf:4f:08:71:e5:db:a8:5c:d4:d2: + a6:fe:00:a3:c6:16:c7:0f:e8:80:ce:1c:28:64:74:19:08:d3: + 42:e3:ce:00:5d:7f:b1:dc:13:b0:e1:05:cb:d1:20:aa:86:74: + 9e:39:e7:91:fd:ff:5b:d6:f7:ad:a6:2f:03:0b:6d:e3:57:54: + eb:76:53:18:8d:11:98:ba +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg +Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL +MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv +b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l +mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE +4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv +a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M +pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw +Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b +LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY +AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB +AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq +E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr +W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ +CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU +X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 +f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja +H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP +JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P +zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt +jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 +/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT +BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 +aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW +xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU +63ZTGI0RmLo= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/db3517d1f6732a2d5ab97c533ec70779ee3270a62fb4ac4238372460e6f01e88.pem b/net/data/ssl/ev_roots/certs/db3517d1f6732a2d5ab97c533ec70779ee3270a62fb4ac4238372460e6f01e88.pem new file mode 100644 index 0000000..472ad20 --- /dev/null +++ b/net/data/ssl/ev_roots/certs/db3517d1f6732a2d5ab97c533ec70779ee3270a62fb4ac4238372460e6f01e88.pem
@@ -0,0 +1,124 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + d9:b5:43:7f:af:a9:39:0f:00:00:00:00:55:65:ad:58 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2015 Entrust, Inc. - for authorized use only", CN = Entrust Root Certification Authority - G4 + Validity + Not Before: May 27 11:11:16 2015 GMT + Not After : Dec 27 11:41:16 2037 GMT + Subject: C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2015 Entrust, Inc. - for authorized use only", CN = Entrust Root Certification Authority - G4 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (4096 bit) + Modulus: + 00:b1:ec:2c:42:ee:e2:d1:30:ff:a5:92:47:e2:2d: + c3:ba:64:97:6d:ca:f7:0d:b5:59:c1:b3:cb:a8:68: + 19:d8:af:84:6d:30:70:5d:7e:f3:2e:d2:53:99:e1: + fe:1f:5e:d9:48:af:5d:13:8d:db:ff:63:33:4d:d3: + 00:02:bc:c4:f8:d1:06:08:94:79:58:8a:15:de:29: + b3:fd:fd:c4:4f:e8:aa:e2:a0:3b:79:cd:bf:6b:43: + 32:dd:d9:74:10:b9:f7:f4:68:d4:bb:d0:87:d5:aa: + 4b:8a:2a:6f:2a:04:b5:b2:a6:c7:a0:7a:e6:48:ab: + d2:d1:59:cc:d6:7e:23:e6:97:6c:f0:42:e5:dc:51: + 4b:15:41:ed:49:4a:c9:de:10:97:d6:76:c1:ef:a5: + b5:36:14:97:35:d8:78:22:35:52:ef:43:bd:db:27: + db:61:56:82:34:dc:cb:88:60:0c:0b:5a:e5:2c:01: + c6:54:af:d7:aa:c1:10:7b:d2:05:5a:b8:40:9e:86: + a7:c3:90:86:02:56:52:09:7a:9c:d2:27:82:53:4a: + 65:52:6a:f5:3c:e7:a8:f2:9c:af:8b:bd:d3:0e:d4: + d4:5e:6e:87:9e:6a:3d:45:1d:d1:5d:1b:f4:e9:0a: + ac:60:99:fb:89:b4:ff:98:2c:cf:7c:1d:e9:02:aa: + 04:9a:1e:b8:dc:88:6e:25:b3:6c:66:f7:3c:90:f3: + 57:c1:b3:2f:f5:6d:f2:fb:ca:a1:f8:29:9d:46:8b: + b3:6a:f6:e6:67:07:be:2c:67:0a:2a:1f:5a:b2:3e: + 57:c4:d3:21:21:63:65:52:91:1b:b1:99:8e:79:7e: + e6:eb:8d:00:d9:5a:aa:ea:73:e8:a4:82:02:47:96: + fe:5b:8e:54:61:a3:eb:2f:4b:30:b0:8b:23:75:72: + 7c:21:3c:c8:f6:f1:74:d4:1c:7b:a3:05:55:ee:bb: + 4d:3b:32:be:9a:77:66:9e:ac:69:90:22:07:1f:61: + 3a:96:be:e5:9a:4f:cc:05:3c:28:59:d3:c1:0c:54: + a8:59:61:bd:c8:72:4c:e8:dc:9f:87:7f:bd:9c:48: + 36:5e:95:a3:0e:b9:38:24:55:fc:75:66:eb:02:e3: + 08:34:29:4a:c6:e3:2b:2f:33:a0:da:a3:86:a5:12: + 97:fd:80:2b:da:14:42:e3:92:bd:3e:f2:5d:5e:67: + 74:2e:1c:88:47:29:34:5f:e2:32:a8:9c:25:37:8c: + ba:98:00:97:8b:49:96:1e:fd:25:8a:ac:dc:da:d8: + 5d:74:6e:66:b0:ff:44:df:a1:18:c6:be:48:2f:37: + 94:78:f8:95:4a:3f:7f:13:5e:5d:59:fd:74:86:43: + 63:73:49 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + 9F:38:C4:56:23:C3:39:E8:A0:71:6C:E8:54:4C:E4:E8:3A:B1:BF:67 + Signature Algorithm: sha256WithRSAEncryption + 12:e5:42:a6:7b:8b:0f:0c:e4:46:a5:b6:60:40:87:8c:25:7e: + ad:b8:68:2e:5b:c6:40:76:3c:03:f8:c9:59:f4:f3:ab:62:ce: + 10:8d:b4:5a:64:8c:68:c0:b0:72:43:34:d2:1b:0b:f6:2c:53: + d2:ca:90:4b:86:66:fc:aa:83:22:f4:8b:1a:6f:26:48:ac:76: + 77:08:bf:c5:98:5c:f4:26:89:9e:7b:c3:b9:64:32:01:7f:d3: + c3:dd:58:6d:ec:b1:ab:84:55:74:77:84:04:27:52:6b:86:4c: + ce:dd:b9:65:ff:d6:c6:5e:9f:9a:10:99:4b:75:6a:fe:6a:e9: + 97:20:e4:e4:76:7a:c6:d0:24:aa:90:cd:20:90:ba:47:64:fb: + 7f:07:b3:53:78:b5:0a:62:f2:73:43:ce:41:2b:81:6a:2e:85: + 16:94:53:d4:6b:5f:72:22:ab:51:2d:42:d5:00:9c:99:bf:de: + bb:94:3b:57:fd:9a:f5:86:cb:56:3b:5b:88:01:e5:7c:28:4b: + 03:f9:49:83:7c:b2:7f:7c:e3:ed:8e:a1:7f:60:53:8e:55:9d: + 50:34:12:0f:b7:97:7b:6c:87:4a:44:e7:f5:6d:ec:80:37:f0: + 58:19:6e:4a:68:76:f0:1f:92:e4:ea:b5:92:d3:61:51:10:0b: + ad:a7:d9:5f:c7:5f:dc:1f:a3:5c:8c:a1:7e:9b:b7:9e:d3:56: + 6f:66:5e:07:96:20:ed:0b:74:fb:66:4e:8b:11:15:e9:81:49: + 7e:6f:b0:d4:50:7f:22:d7:5f:65:02:0d:a6:f4:85:1e:d8:ae: + 06:4b:4a:a7:d2:31:66:c2:f8:ce:e5:08:a6:a4:02:96:44:68: + 57:c4:d5:33:cf:19:2f:14:c4:94:1c:7b:a4:d9:f0:9f:0e:b1: + 80:e2:d1:9e:11:64:a9:88:11:3a:76:82:e5:62:c2:80:d8:a4: + 83:ed:93:ef:7c:2f:90:b0:32:4c:96:15:68:48:52:d4:99:08: + c0:24:e8:1c:e3:b3:a5:21:0e:92:c0:90:1f:cf:20:5f:ca:3b: + 38:c7:b7:6d:3a:f3:e6:44:b8:0e:31:6b:88:8e:70:eb:9c:17: + 52:a8:41:94:2e:87:b6:e7:a6:12:c5:75:df:5b:c0:0a:6e:7b: + a4:e4:5e:86:f9:36:94:df:77:c3:e9:0d:c0:39:f1:79:bb:46: + 8e:ab:43:59:27:b7:20:bb:23:e9:56:40:21:ec:31:3d:65:aa: + 43:f2:3d:df:70:44:e1:ba:4d:26:10:3b:98:9f:f3:c8:8e:1b: + 38:56:21:6a:51:93:d3:91:ca:46:da:89:b7:3d:53:83:2c:08: + 1f:8b:8f:53:dd:ff:ac:1f +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw +gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL +Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg +MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw +BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 +MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 +c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ +bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ +2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E +T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j +5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM +C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T +DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX +wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A +2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm +nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl +N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj +c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS +5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS +Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr +hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ +B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI +AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw +H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ +b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk +2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol +IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk +5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY +n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/root_store.textproto b/net/data/ssl/ev_roots/root_store.textproto index f1158fa..ed9f176 100644 --- a/net/data/ssl/ev_roots/root_store.textproto +++ b/net/data/ssl/ev_roots/root_store.textproto
@@ -89,6 +89,14 @@ filename: "edf7ebbca27a2a384d387b7d4010c666e2edb4843e4c29b4ae1d5b9332e6b24d.pem" ev_policy_oids: "2.16.578.1.26.1.3.3" } + +# certSIGN ROOT CA G2 +# https://testssl-valid-evcp.certsign.ro/ +trust_anchors { + filename: "657cfe2fa73faa38462571f332a2363a46fce7020951710702cdfbb6eeda3305.pem" + ev_policy_oids: "2.23.140.1.1" +} + # Certum Trusted Network CA # https://juice.certum.pl/ trust_anchors { @@ -232,6 +240,13 @@ ev_policy_oids: "2.16.840.1.114028.10.1.2" } +# Entrust Root Certification Authority - G4 +# https://validg4.entrust.net +trust_anchors { + filename: "db3517d1f6732a2d5ab97c533ec70779ee3270a62fb4ac4238372460e6f01e88.pem" + ev_policy_oids: "2.16.840.1.114028.10.1.2" +} + # Entrust Root Certification Authority – EC1 # https://validec.entrust.net trust_anchors { @@ -271,6 +286,13 @@ ev_policy_oids: "1.3.6.1.4.1.4146.1.1" } +# GLOBALTRUST 2020 +# https://testok-2020-server-qualified-ev-1.e-monitoring.at/ +trust_anchors { + filename: "9a296a5182d1d451a2e37f439b74daafa267523329f90f9a0d2007c334e23c9a.pem" + ev_policy_oids: "2.23.140.1.1" +} + # Go Daddy Class 2 Certification Authority # https://www.godaddy.com/ trust_anchors { @@ -286,6 +308,35 @@ ev_policy_oids: "2.16.840.1.114413.1.7.23.3" } + +# HARICA TLS ECC Root CA 2021 +# https://tls-ecc-valid-ev.root2021.harica.gr +trust_anchors { + filename: "3f99cc474acfce4dfed58794665e478d1547739f2e780f1bb4ca9b133097d401.pem" + ev_policy_oids: "2.23.140.1.1" +} + +# HARICA TLS RSA Root CA 2021 +# https://tls-rsa-valid-ev.root2021.harica.gr +trust_anchors { + filename: "d95d0e8eda79525bf9beb11b14d2100d3294985f0c62d9fabd9cd999eccb7b1d.pem" + ev_policy_oids: "2.23.140.1.1" +} + +# Hellenic Academic and Research Institutions ECC RootCA 2015 +# https://haricaeccrootca2015-valid-ev.harica.gr +trust_anchors { + filename: "44b545aa8a25e65a73ca15dc27fc36d24c1cb9953a066539b11582dc487b4833.pem" + ev_policy_oids: "2.23.140.1.1" +} + +# Hellenic Academic and Research Institutions RootCA 2015 +# https://haricarootca2015-valid-ev.harica.gr +trust_anchors { + filename: "a040929a02ce53b4acf4f2ffc6981ce4496f755e6d45fe0b2a692bcd52523f36.pem" + ev_policy_oids: "2.23.140.1.1" +} + # Hongkong Post Root CA 3 # https://valid-ev.ecert.gov.hk/ trust_anchors { @@ -294,6 +345,14 @@ ev_policy_oids: "2.23.140.1.1" } +# IdenTrust Commercial Root CA 1 +# https://identrust-commercial-ev-valid.identrustssl.com/ +trust_anchors { + filename: "5d56499be4d2e08bcfcad08a3e38723d50503bde706948e42f55603019e528ae.pem" + ev_policy_oids: "2.23.140.1.1" + ev_policy_oids: "2.16.840.1.113839.0.6.9" +} + # Izenpe.com - SHA256 root # The first OID is for businesses and the second for government entities. # These are the test sites, respectively: @@ -324,6 +383,13 @@ ev_policy_oids: "1.3.171.1.1.10.5.2" } +# NetLock Arany (Class Gold) Főtanúsítvány +# https://valid.ev.tanusitvany.hu +trust_anchors { + filename: "6c61dac3a2def031506be036d2a6fe401994fbd13df9c8d466599274c446ec98.pem" + ev_policy_oids: "2.23.140.1.1" +} + # Network Solutions Certificate Authority # https://www.networksolutions.com/website-packages/index.jsp trust_anchors {
diff --git a/net/extras/sqlite/sqlite_persistent_store_backend_base.cc b/net/extras/sqlite/sqlite_persistent_store_backend_base.cc index 4ce4938..283d1a14 100644 --- a/net/extras/sqlite/sqlite_persistent_store_backend_base.cc +++ b/net/extras/sqlite/sqlite_persistent_store_backend_base.cc
@@ -75,8 +75,6 @@ return db_ != nullptr; } - base::Time start = base::Time::Now(); - const base::FilePath dir = path_.DirName(); if (!base::PathExists(dir) && !base::CreateDirectory(dir)) { RecordPathDoesNotExistProblem(); @@ -110,10 +108,6 @@ return false; } - base::UmaHistogramCustomTimes(histogram_tag_ + ".TimeInitializeDB", - base::Time::Now() - start, - base::Milliseconds(1), base::Minutes(1), 50); - initialized_ = DoInitializeDatabase(); if (!initialized_) {
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc index 53ef754a..5c839123 100644 --- a/net/http/http_server_properties_manager_unittest.cc +++ b/net/http/http_server_properties_manager_unittest.cc
@@ -2024,13 +2024,13 @@ // Wait until the data's been written to prefs, and then tear down the // HttpServerProperties. FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); - std::unique_ptr<base::Value> saved_value = - unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + base::Value saved_value = + unowned_pref_delegate->GetServerProperties()->Clone(); properties.reset(); // Only information on kServer1 should have been saved to prefs. std::string preferences_json; - base::JSONWriter::Write(*saved_value, &preferences_json); + base::JSONWriter::Write(saved_value, &preferences_json); EXPECT_EQ( "{\"servers\":[" "{\"isolation\":[]," @@ -2059,7 +2059,7 @@ EXPECT_TRUE(properties->RequiresHTTP11(kServer3, NetworkIsolationKey())); // The data loads. - unowned_pref_delegate->InitializePrefs(*saved_value); + unowned_pref_delegate->InitializePrefs(saved_value); // The properties should contain a combination of the old and new data. EXPECT_TRUE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey())); @@ -2211,8 +2211,8 @@ // Wait until the data's been written to prefs, and then tear down the // HttpServerProperties. FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); - std::unique_ptr<base::Value> saved_value = - unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + base::Value saved_value = + unowned_pref_delegate->GetServerProperties()->Clone(); properties.reset(); // Create a new HttpServerProperties using the value saved to prefs above. @@ -2220,7 +2220,7 @@ unowned_pref_delegate = pref_delegate.get(); properties = std::make_unique<HttpServerProperties>( std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock()); - unowned_pref_delegate->InitializePrefs(*saved_value); + unowned_pref_delegate->InitializePrefs(saved_value); // The information set using kNetworkIsolationKey on the original // HttpServerProperties should also be set on the restored @@ -2363,8 +2363,8 @@ // Wait until the data's been written to prefs, and then tear down the // HttpServerProperties. FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); - std::unique_ptr<base::Value> saved_value = - unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + base::Value saved_value = + unowned_pref_delegate->GetServerProperties()->Clone(); properties.reset(); // Create a new HttpServerProperties using the value saved to prefs above. @@ -2372,7 +2372,7 @@ unowned_pref_delegate = pref_delegate.get(); properties = std::make_unique<HttpServerProperties>( std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock()); - unowned_pref_delegate->InitializePrefs(*saved_value); + unowned_pref_delegate->InitializePrefs(saved_value); // Only the first of the values learned for kNetworkIsolationKey1 should have // been saved, and the value for kNetworkIsolationKey2 as well. The canonical @@ -2422,7 +2422,7 @@ SCOPED_TRACE(static_cast<int>(save_network_isolation_key_mode)); // Save prefs using |save_network_isolation_key_mode|. - std::unique_ptr<base::Value> saved_value; + base::Value saved_value; { // Configure the the feature. std::unique_ptr<base::test::ScopedFeatureList> feature_list = @@ -2496,8 +2496,7 @@ // Wait until the data's been written to prefs, and then create a copy of // the prefs data. FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); - saved_value = - unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + saved_value = unowned_pref_delegate->GetServerProperties()->Clone(); } // Now try and load the data in each of the feature modes. @@ -2520,7 +2519,7 @@ std::make_unique<HttpServerProperties>(std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock()); - unowned_pref_delegate->InitializePrefs(*saved_value); + unowned_pref_delegate->InitializePrefs(saved_value); if (save_network_isolation_key_mode == NetworkIsolationKeyMode::kDisabled) { @@ -2681,7 +2680,7 @@ SCOPED_TRACE(static_cast<int>(save_network_isolation_key_mode)); // Save prefs using |save_network_isolation_key_mode|. - std::unique_ptr<base::Value> saved_value; + base::Value saved_value; { // Configure the the feature. std::unique_ptr<base::test::ScopedFeatureList> feature_list = @@ -2741,8 +2740,7 @@ // Wait until the data's been written to prefs, and then create a copy of // the prefs data. FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); - saved_value = - unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + saved_value = unowned_pref_delegate->GetServerProperties()->Clone(); } // Now try and load the data in each of the feature modes. @@ -2765,7 +2763,7 @@ std::make_unique<HttpServerProperties>(std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock()); - unowned_pref_delegate->InitializePrefs(*saved_value); + unowned_pref_delegate->InitializePrefs(saved_value); if (save_network_isolation_key_mode == NetworkIsolationKeyMode::kDisabled) { @@ -2916,8 +2914,8 @@ // Wait until the data's been written to prefs, and then tear down the // HttpServerProperties. FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); - std::unique_ptr<base::Value> saved_value = - unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + base::Value saved_value = + unowned_pref_delegate->GetServerProperties()->Clone(); properties.reset(); // Create a new HttpServerProperties using the value saved to prefs above. @@ -2925,7 +2923,7 @@ unowned_pref_delegate = pref_delegate.get(); properties = std::make_unique<HttpServerProperties>( std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock()); - unowned_pref_delegate->InitializePrefs(*saved_value); + unowned_pref_delegate->InitializePrefs(saved_value); // All values should have been saved and be retrievable by suffix-matching // servers.
diff --git a/remoting/resources/remoting_strings_da.xtb b/remoting/resources/remoting_strings_da.xtb index b7adb0ef..f71e6737 100644 --- a/remoting/resources/remoting_strings_da.xtb +++ b/remoting/resources/remoting_strings_da.xtb
@@ -99,7 +99,7 @@ <translation id="5204575267916639804">Ofte stillede spørgsmål</translation> <translation id="5222676887888702881">Log ud</translation> <translation id="5234764350956374838">Luk</translation> -<translation id="5308380583665731573">Få forbindelse</translation> +<translation id="5308380583665731573">Opret forbindelse</translation> <translation id="533625276787323658">Der er intet at oprette forbindelse til</translation> <translation id="5397086374758643919">Afinstallationsprogram til host for Chrome Fjernskrivebord</translation> <translation id="5419418238395129586">Sidst online: <ph name="DATE" /></translation>
diff --git a/remoting/resources/remoting_strings_te.xtb b/remoting/resources/remoting_strings_te.xtb index 1b62cad..ee2ac3d 100644 --- a/remoting/resources/remoting_strings_te.xtb +++ b/remoting/resources/remoting_strings_te.xtb
@@ -148,7 +148,7 @@ <translation id="7535110896613603182">ఆటోమేటిక్ యాప్ల సెట్టింగ్లను తెరవండి</translation> <translation id="7628469622942688817">ఈ పరికరంలో నా PINను గుర్తుంచుకో.</translation> <translation id="7649070708921625228">సహాయం</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7665369617277396874">ఖాతాను జోడించండి</translation> <translation id="7678209621226490279">ఎడమవైపున ఉంచు</translation> <translation id="7693372326588366043">హోస్ట్ల లిస్ట్ను రిఫ్రెష్ చేయి</translation>
diff --git a/sandbox/policy/sandbox_type.cc b/sandbox/policy/sandbox_type.cc index 5bdd5d9b..944e9ba 100644 --- a/sandbox/policy/sandbox_type.cc +++ b/sandbox/policy/sandbox_type.cc
@@ -214,9 +214,6 @@ return Sandbox::kNoSandbox; #endif - if (process_type == switches::kCloudPrintServiceProcess) - return Sandbox::kNoSandbox; - CHECK(false) << "Command line does not provide a valid sandbox configuration: " << command_line.GetCommandLineString();
diff --git a/sandbox/policy/switches.cc b/sandbox/policy/switches.cc index bbb8e9b9..fc41a82 100644 --- a/sandbox/policy/switches.cc +++ b/sandbox/policy/switches.cc
@@ -131,7 +131,6 @@ const char kPpapiPluginProcess[] = "ppapi"; const char kRendererProcess[] = "renderer"; const char kUtilityProcess[] = "utility"; -const char kCloudPrintServiceProcess[] = "service"; const char kZygoteProcessType[] = "zygote"; const char kRelauncherProcessType[] = "relauncher";
diff --git a/sandbox/policy/switches.h b/sandbox/policy/switches.h index e1a8b81..ad96459 100644 --- a/sandbox/policy/switches.h +++ b/sandbox/policy/switches.h
@@ -92,7 +92,6 @@ SANDBOX_POLICY_EXPORT extern const char kPpapiPluginProcess[]; SANDBOX_POLICY_EXPORT extern const char kRendererProcess[]; SANDBOX_POLICY_EXPORT extern const char kUtilityProcess[]; -SANDBOX_POLICY_EXPORT extern const char kCloudPrintServiceProcess[]; SANDBOX_POLICY_EXPORT extern const char kZygoteProcessType[]; SANDBOX_POLICY_EXPORT extern const char kRelauncherProcessType[];
diff --git a/services/network/public/cpp/content_security_policy/content_security_policy.cc b/services/network/public/cpp/content_security_policy/content_security_policy.cc index 30aeb02..e1db04b0 100644 --- a/services/network/public/cpp/content_security_policy/content_security_policy.cc +++ b/services/network/public/cpp/content_security_policy/content_security_policy.cc
@@ -65,7 +65,6 @@ case CSPDirectiveName::ChildSrc: case CSPDirectiveName::ConnectSrc: case CSPDirectiveName::DefaultSrc: - case CSPDirectiveName::FencedFrameSrc: case CSPDirectiveName::FontSrc: case CSPDirectiveName::FormAction: case CSPDirectiveName::FrameAncestors: @@ -105,7 +104,6 @@ case CSPDirectiveName::ChildSrc: case CSPDirectiveName::ConnectSrc: case CSPDirectiveName::DefaultSrc: - case CSPDirectiveName::FencedFrameSrc: case CSPDirectiveName::FontSrc: case CSPDirectiveName::FormAction: case CSPDirectiveName::FrameSrc: @@ -136,9 +134,6 @@ // $2: Blocking policy. const char* ErrorMessage(CSPDirectiveName directive) { switch (directive) { - case CSPDirectiveName::FencedFrameSrc: - return "Refused to frame '$1' as a fenced frame because it violates the " - "following Content Security Policy directive: \"$2\"."; case CSPDirectiveName::FormAction: return "Refused to send form data to '$1' because it violates the " "following Content Security Policy directive: \"$2\"."; @@ -980,7 +975,6 @@ case CSPDirectiveName::ChildSrc: case CSPDirectiveName::ConnectSrc: case CSPDirectiveName::DefaultSrc: - case CSPDirectiveName::FencedFrameSrc: case CSPDirectiveName::FontSrc: case CSPDirectiveName::FormAction: case CSPDirectiveName::FrameAncestors: @@ -1095,9 +1089,6 @@ case CSPDirectiveName::StyleSrcElem: return CSPDirectiveName::StyleSrc; - case CSPDirectiveName::FencedFrameSrc: - return CSPDirectiveName::FrameSrc; - case CSPDirectiveName::FrameSrc: case CSPDirectiveName::WorkerSrc: return CSPDirectiveName::ChildSrc; @@ -1246,8 +1237,7 @@ if (!allowed) { ReportViolation(context, policy, effective_directive_name, directive_name, - directive_name == CSPDirectiveName::FrameSrc || - directive_name == CSPDirectiveName::FencedFrameSrc + directive_name == CSPDirectiveName::FrameSrc ? url : url_before_redirects, has_followed_redirect, source_location); @@ -1352,7 +1342,7 @@ CSPDirectiveName::StyleSrcAttr, CSPDirectiveName::StyleSrcElem, CSPDirectiveName::WorkerSrc, CSPDirectiveName::BaseURI, CSPDirectiveName::FrameAncestors, CSPDirectiveName::FormAction, - CSPDirectiveName::NavigateTo, CSPDirectiveName::FencedFrameSrc}; + CSPDirectiveName::NavigateTo}; return base::ranges::all_of(directives, [&](CSPDirectiveName directive) { auto required = GetSourceList(directive, policy_a); @@ -1390,8 +1380,6 @@ return CSPDirectiveName::ConnectSrc; if (base::LowerCaseEqualsASCII(name, "default-src")) return CSPDirectiveName::DefaultSrc; - if (base::LowerCaseEqualsASCII(name, "fenced-frame-src")) - return CSPDirectiveName::FencedFrameSrc; if (base::LowerCaseEqualsASCII(name, "frame-ancestors")) return CSPDirectiveName::FrameAncestors; if (base::LowerCaseEqualsASCII(name, "frame-src")) @@ -1456,8 +1444,6 @@ return "connect-src"; case CSPDirectiveName::DefaultSrc: return "default-src"; - case CSPDirectiveName::FencedFrameSrc: - return "fenced-frame-src"; case CSPDirectiveName::FrameAncestors: return "frame-ancestors"; case CSPDirectiveName::FrameSrc:
diff --git a/services/network/public/cpp/content_security_policy/content_security_policy_unittest.cc b/services/network/public/cpp/content_security_policy/content_security_policy_unittest.cc index efb1c4f..dc575e2 100644 --- a/services/network/public/cpp/content_security_policy/content_security_policy_unittest.cc +++ b/services/network/public/cpp/content_security_policy/content_security_policy_unittest.cc
@@ -2062,88 +2062,4 @@ } } -TEST(ContentSecurityPolicy, FencedFrameSrcFallback) { - auto allow_host = [](const char* host) { - std::vector<mojom::CSPSourcePtr> sources; - sources.push_back(BuildCSPSource("http", host)); - auto csp_source_list = mojom::CSPSourceList::New(); - csp_source_list->sources = std::move(sources); - return csp_source_list; - }; - - { - CSPContextTest context; - auto policy = EmptyCSP(); - policy->directives[CSPDirectiveName::DefaultSrc] = allow_host("a.com"); - EXPECT_FALSE(CheckContentSecurityPolicy( - policy, CSPDirectiveName::FencedFrameSrc, GURL("http://b.com"), GURL(), - false, false, &context, SourceLocation(), false)); - ASSERT_EQ(1u, context.violations().size()); - const char kConsoleMessage[] = - "Refused to frame 'http://b.com/' as a fenced frame because it " - "violates the following Content Security Policy directive: " - "\"default-src http://a.com\". Note that 'fenced-frame-src' was not " - "explicitly set, so 'default-src' is used as a fallback.\n"; - EXPECT_EQ(kConsoleMessage, context.violations()[0]->console_message); - EXPECT_TRUE(CheckContentSecurityPolicy( - policy, CSPDirectiveName::FencedFrameSrc, GURL("http://a.com"), GURL(), - false, false, &context, SourceLocation(), false)); - } - { - CSPContextTest context; - auto policy = EmptyCSP(); - policy->directives[CSPDirectiveName::ChildSrc] = allow_host("a.com"); - EXPECT_FALSE(CheckContentSecurityPolicy( - policy, CSPDirectiveName::FencedFrameSrc, GURL("http://b.com"), GURL(), - false, false, &context, SourceLocation(), false)); - ASSERT_EQ(1u, context.violations().size()); - const char kConsoleMessage[] = - "Refused to frame 'http://b.com/' as a fenced frame because it " - "violates the following Content Security Policy directive: " - "\"child-src http://a.com\". Note that 'fenced-frame-src' was not " - "explicitly set, so 'child-src' is used as a fallback.\n"; - EXPECT_EQ(kConsoleMessage, context.violations()[0]->console_message); - EXPECT_TRUE(CheckContentSecurityPolicy( - policy, CSPDirectiveName::FencedFrameSrc, GURL("http://a.com"), GURL(), - false, false, &context, SourceLocation(), false)); - } - { - CSPContextTest context; - auto policy = EmptyCSP(); - policy->directives[CSPDirectiveName::FrameSrc] = allow_host("a.com"); - - EXPECT_FALSE(CheckContentSecurityPolicy( - policy, CSPDirectiveName::FencedFrameSrc, GURL("http://b.com"), GURL(), - false, false, &context, SourceLocation(), false)); - ASSERT_EQ(1u, context.violations().size()); - const char kConsoleMessage[] = - "Refused to frame 'http://b.com/' as a fenced frame because it " - "violates the following Content Security Policy directive: " - "\"frame-src http://a.com\". Note that 'fenced-frame-src' was not " - "explicitly set, so 'frame-src' is used as a fallback.\n"; - EXPECT_EQ(kConsoleMessage, context.violations()[0]->console_message); - EXPECT_TRUE(CheckContentSecurityPolicy( - policy, CSPDirectiveName::FencedFrameSrc, GURL("http://a.com"), GURL(), - false, false, &context, SourceLocation(), false)); - } - { - CSPContextTest context; - auto policy = EmptyCSP(); - policy->directives[CSPDirectiveName::FencedFrameSrc] = allow_host("a.com"); - policy->directives[CSPDirectiveName::FrameSrc] = allow_host("b.com"); - EXPECT_TRUE(CheckContentSecurityPolicy( - policy, CSPDirectiveName::FencedFrameSrc, GURL("http://a.com"), GURL(), - false, false, &context, SourceLocation(), false)); - EXPECT_FALSE(CheckContentSecurityPolicy( - policy, CSPDirectiveName::FencedFrameSrc, GURL("http://b.com"), GURL(), - false, false, &context, SourceLocation(), false)); - ASSERT_EQ(1u, context.violations().size()); - const char kConsoleMessage[] = - "Refused to frame 'http://b.com/' as a fenced frame because it " - "violates the following Content Security Policy directive: " - "\"fenced-frame-src http://a.com\".\n"; - EXPECT_EQ(kConsoleMessage, context.violations()[0]->console_message); - } -} - } // namespace network
diff --git a/services/network/public/mojom/content_security_policy.mojom b/services/network/public/mojom/content_security_policy.mojom index 8667fa6..b8c72fd 100644 --- a/services/network/public/mojom/content_security_policy.mojom +++ b/services/network/public/mojom/content_security_policy.mojom
@@ -102,7 +102,6 @@ ChildSrc, ConnectSrc, DefaultSrc, - FencedFrameSrc, FontSrc, FormAction, FrameAncestors,
diff --git a/styleguide/c++/c++11.md b/styleguide/c++/c++11.md index e83a118..25aa358 100644 --- a/styleguide/c++/c++11.md +++ b/styleguide/c++/c++11.md
@@ -481,6 +481,25 @@ *** promo See [discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/op2ePZnjP0w). +### maybe_unused attribute <sup>[allowed]</sup> + +```c++ +struct [[maybe_unused]] MyUnusedThing; +[[maybe_unused]] int x; +``` + +**Description:** +The `[[maybe_unused]]` attribute can be used to indicate that individual +variables, functions, or fields of a class/struct/enum can be left unused. + +**Documentation:** +[C++ attribute: maybe_unused](https://en.cppreference.com/w/cpp/language/attributes/maybe_unused) + +**Notes:** +*** promo +See [discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/jPLfU5eRg8M/). +*** + ### Structured bindings <sup>[allowed]</sup> ```c++ @@ -821,27 +840,6 @@ See `WARN_UNUSED_RESULT` macro in base/compiler_specific.h. *** -### maybe_unused attribute <sup>[tbd]</sup> - -```c++ -struct [[maybe_unused]] MyUnusedThing; -[[maybe_unused]] int x; -``` - -**Description:** -The `[[maybe_unused]]` attribute can be used to indicate that individual -variables or values of a class/struct/enum can be left unused (including values -with `[[nodiscard]]` attribute). - -**Documentation:** -[C++ attribute: maybe_unused](https://en.cppreference.com/w/cpp/language/attributes/maybe_unused), - -**Notes:** -*** promo -Similar to the `ignore_result` function in base/ignore_result.h [(and other -places)](https://source.chromium.org/search?q=function:ignore_result&sq=). -*** - ### using declaration for attributes <sup>[tbd]</sup> ```c++
diff --git a/third_party/blink/renderer/bindings/core/v8/script_function.cc b/third_party/blink/renderer/bindings/core/v8/script_function.cc index 2203329..ac4ac1c 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_function.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_function.cc
@@ -12,12 +12,12 @@ class CallableHolder final : public CustomWrappableAdapter { public: - explicit CallableHolder(NewScriptFunction::Callable* callable) + explicit CallableHolder(ScriptFunction::Callable* callable) : callable_(callable) {} const char* NameInHeapSnapshot() const final { return "ScriptFunction::Callable"; } - NewScriptFunction::Callable* GetCallable() { return callable_; } + ScriptFunction::Callable* GetCallable() { return callable_; } void Trace(Visitor* visitor) const override { visitor->Trace(callable_); @@ -25,17 +25,17 @@ } private: - const Member<NewScriptFunction::Callable> callable_; + const Member<ScriptFunction::Callable> callable_; }; } // namespace -ScriptValue NewScriptFunction::Callable::Call(ScriptState*, ScriptValue) { +ScriptValue ScriptFunction::Callable::Call(ScriptState*, ScriptValue) { NOTREACHED(); return ScriptValue(); } -void NewScriptFunction::Callable::CallRaw( +void ScriptFunction::Callable::CallRaw( ScriptState* script_state, const v8::FunctionCallbackInfo<v8::Value>& args) { ScriptValue result = @@ -43,7 +43,7 @@ V8SetReturnValue(args, result.V8Value()); } -v8::Local<v8::Function> NewScriptFunction::BindToV8Function( +v8::Local<v8::Function> ScriptFunction::BindToV8Function( ScriptState* script_state, Callable* callable) { DCHECK(callable); @@ -58,7 +58,7 @@ .ToLocalChecked(); } -void NewScriptFunction::CallCallback( +void ScriptFunction::CallCallback( const v8::FunctionCallbackInfo<v8::Value>& args) { RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(args.GetIsolate(), "Blink_CallCallback");
diff --git a/third_party/blink/renderer/bindings/core/v8/script_function.h b/third_party/blink/renderer/bindings/core/v8/script_function.h index 1f39cdbb..d8dd00b 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_function.h +++ b/third_party/blink/renderer/bindings/core/v8/script_function.h
@@ -42,11 +42,11 @@ namespace blink { -// A `NewScriptFunction` represents a function that can be called from scripts. +// A `ScriptFunction` represents a function that can be called from scripts. // You can define a subclass of `Callable` and put arbitrary logic by // overriding `Call` or `CallRaw` methods. -class CORE_EXPORT NewScriptFunction final - : public GarbageCollected<NewScriptFunction> { +class CORE_EXPORT ScriptFunction final + : public GarbageCollected<ScriptFunction> { public: class CORE_EXPORT Callable : public GarbageCollected<Callable> { public: @@ -82,7 +82,7 @@ const ScriptValue value_; }; - NewScriptFunction(ScriptState* script_state, Callable* callable) + ScriptFunction(ScriptState* script_state, Callable* callable) : script_state_(script_state), function_(script_state->GetIsolate(), BindToV8Function(script_state, callable)) {}
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise.cc b/third_party/blink/renderer/bindings/core/v8/script_promise.cc index d9be9eb..2cbf6cd 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_promise.cc
@@ -72,7 +72,7 @@ } private: - class AdapterFunction : public NewScriptFunction::Callable { + class AdapterFunction : public ScriptFunction::Callable { public: enum ResolveType { kFulfilled, @@ -86,7 +86,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(handler_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } ScriptValue Call(ScriptState*, ScriptValue value) override { @@ -106,14 +106,14 @@ v8::Local<v8::Function> CreateFulfillFunction(ScriptState* script_state, wtf_size_t index) { - return MakeGarbageCollected<NewScriptFunction>( + return MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<AdapterFunction>( AdapterFunction::kFulfilled, index, this)) ->V8Function(); } v8::Local<v8::Function> CreateRejectFunction(ScriptState* script_state) { - return MakeGarbageCollected<NewScriptFunction>( + return MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<AdapterFunction>( AdapterFunction::kRejected, 0, this)) ->V8Function(); @@ -261,8 +261,8 @@ return ScriptPromise(script_state_, result_promise); } -ScriptPromise ScriptPromise::Then(NewScriptFunction* on_fulfilled, - NewScriptFunction* on_rejected) { +ScriptPromise ScriptPromise::Then(ScriptFunction* on_fulfilled, + ScriptFunction* on_rejected) { const v8::Local<v8::Function> empty; return Then(on_fulfilled ? on_fulfilled->V8Function() : empty, on_rejected ? on_rejected->V8Function() : empty);
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise.h b/third_party/blink/renderer/bindings/core/v8/script_promise.h index e92cb04..af4b6a5 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise.h +++ b/third_party/blink/renderer/bindings/core/v8/script_promise.h
@@ -44,7 +44,7 @@ class DOMException; class ExceptionState; -class NewScriptFunction; +class ScriptFunction; // ScriptPromise is the class for representing Promise values in C++ world. // ScriptPromise holds a Promise. @@ -71,8 +71,8 @@ ScriptPromise Then(v8::Local<v8::Function> on_fulfilled, v8::Local<v8::Function> on_rejected = {}); - ScriptPromise Then(NewScriptFunction* on_fulfilled, - NewScriptFunction* on_rejected = nullptr); + ScriptPromise Then(ScriptFunction* on_fulfilled, + ScriptFunction* on_rejected = nullptr); bool IsObject() const { return promise_.IsObject(); }
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise_property_test.cc b/third_party/blink/renderer/bindings/core/v8/script_promise_property_test.cc index ec4105b..99f155e 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise_property_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_promise_property_test.cc
@@ -30,7 +30,7 @@ namespace { -class NotReachedFunction : public NewScriptFunction::Callable { +class NotReachedFunction : public ScriptFunction::Callable { public: NotReachedFunction() = default; @@ -42,7 +42,7 @@ return ScriptValue(); } -class StubFunction : public NewScriptFunction::Callable { +class StubFunction : public ScriptFunction::Callable { public: StubFunction(ScriptValue& value, size_t& call_count) : value_(value), call_count_(call_count) {} @@ -81,7 +81,7 @@ Member<Property> property_; }; -class ScriptPromisePropertyResetter : public NewScriptFunction::Callable { +class ScriptPromisePropertyResetter : public ScriptFunction::Callable { public: using Property = ScriptPromiseProperty<Member<GarbageCollectedScriptWrappable>, @@ -92,7 +92,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(property_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } ScriptValue Call(ScriptState*, ScriptValue arg) override { @@ -140,14 +140,14 @@ void Gc() { ThreadState::Current()->CollectAllGarbageForTesting(); } v8::Local<v8::Function> NotReached(ScriptState* script_state) { - return MakeGarbageCollected<NewScriptFunction>( + return MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<NotReachedFunction>()) ->V8Function(); } v8::Local<v8::Function> Stub(ScriptState* script_state, ScriptValue& value, size_t& call_count) { - return MakeGarbageCollected<NewScriptFunction>( + return MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<StubFunction>(value, call_count)) ->V8Function(); @@ -542,7 +542,7 @@ GetIsolate(), v8::MicrotasksScope::kDoNotRunMicrotasks); main_v8_resolution = ToV8(resolution, MainScriptState()).As<v8::Object>(); v8::PropertyDescriptor descriptor( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( MainScriptState(), MakeGarbageCollected<ScriptPromisePropertyResetter>(GetProperty())) ->V8Function(), @@ -559,7 +559,7 @@ GetIsolate(), v8::MicrotasksScope::kDoNotRunMicrotasks); other_v8_resolution = ToV8(resolution, OtherScriptState()).As<v8::Object>(); v8::PropertyDescriptor descriptor( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( OtherScriptState(), MakeGarbageCollected<ScriptPromisePropertyResetter>(GetProperty())) ->V8Function(),
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise_resolver_test.cc b/third_party/blink/renderer/bindings/core/v8/script_promise_resolver_test.cc index 87010aa..e5163db 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise_resolver_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_promise_resolver_test.cc
@@ -24,7 +24,7 @@ namespace { -class TestHelperFunction : public NewScriptFunction::Callable { +class TestHelperFunction : public ScriptFunction::Callable { public: explicit TestHelperFunction(String* value) : value_(value) {} @@ -78,10 +78,10 @@ ASSERT_FALSE(promise.IsEmpty()); { ScriptState::Scope scope(GetScriptState()); - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_fulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_rejected))); } @@ -130,10 +130,10 @@ ASSERT_FALSE(promise.IsEmpty()); { ScriptState::Scope scope(GetScriptState()); - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_fulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_rejected))); } @@ -182,10 +182,10 @@ ASSERT_FALSE(promise.IsEmpty()); { ScriptState::Scope scope(GetScriptState()); - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_fulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_rejected))); } @@ -337,10 +337,10 @@ ASSERT_FALSE(promise.IsEmpty()); { ScriptState::Scope scope(GetScriptState()); - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_fulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_rejected))); } @@ -365,10 +365,10 @@ ASSERT_FALSE(promise.IsEmpty()); { ScriptState::Scope scope(GetScriptState()); - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_fulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_rejected))); }
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise_test.cc b/third_party/blink/renderer/bindings/core/v8/script_promise_test.cc index 9d2fc328..72a52aa 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_promise_test.cc
@@ -49,12 +49,12 @@ typedef ScriptPromise::InternalResolver Resolver; template <typename T, typename... Args> -NewScriptFunction* CreateFunction(ScriptState* script_state, Args&&... args) { - return MakeGarbageCollected<NewScriptFunction>( +ScriptFunction* CreateFunction(ScriptState* script_state, Args&&... args) { + return MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<T>(std::forward<Args>(args)...)); } -class FunctionForScriptPromiseTest : public NewScriptFunction::Callable { +class FunctionForScriptPromiseTest : public ScriptFunction::Callable { public: explicit FunctionForScriptPromiseTest(ScriptValue* output) : output_(output) {} @@ -69,7 +69,7 @@ ScriptValue* output_; }; -class ThrowingCallable : public NewScriptFunction::Callable { +class ThrowingCallable : public ScriptFunction::Callable { public: private: ScriptValue Call(ScriptState* script_state, ScriptValue value) override { @@ -79,7 +79,7 @@ } }; -class NotReached : public NewScriptFunction::Callable { +class NotReached : public ScriptFunction::Callable { ScriptValue Call(ScriptState* script_state, ScriptValue value) override { ADD_FAILURE() << "This function should not be called."; return ScriptValue(); @@ -96,7 +96,7 @@ ScriptValue value_; }; -class CapturingCallable final : public NewScriptFunction::Callable { +class CapturingCallable final : public ScriptFunction::Callable { public: explicit CapturingCallable(ScriptValueHolder* holder) : holder_(holder) {} ScriptValue Call(ScriptState*, ScriptValue value) override {
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise_tester.cc b/third_party/blink/renderer/bindings/core/v8/script_promise_tester.cc index 47f0505d..0017453 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise_tester.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_promise_tester.cc
@@ -15,7 +15,7 @@ namespace blink { -class ScriptPromiseTester::ThenFunction : public NewScriptFunction::Callable { +class ScriptPromiseTester::ThenFunction : public ScriptFunction::Callable { public: ThenFunction(base::WeakPtr<ScriptPromiseTester> owner, ScriptPromiseTester::State target_state) @@ -43,10 +43,10 @@ : script_state_(script_state) { DCHECK(script_state); script_promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ThenFunction>( weak_factory_.GetWeakPtr(), State::kFulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ThenFunction>( weak_factory_.GetWeakPtr(), State::kRejected))); }
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc index e1179a6e..93e3eec 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
@@ -783,7 +783,7 @@ } class ModuleEvaluationRejectionCallback final - : public NewScriptFunction::Callable { + : public ScriptFunction::Callable { public: ModuleEvaluationRejectionCallback() = default; @@ -898,7 +898,7 @@ // evaluationPromise with reason, report the exception given by reason // for script.</spec> v8::Local<v8::Function> callback_failure = - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ModuleEvaluationRejectionCallback>()) ->V8Function();
diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc index ed8fc6f..e8f1432 100644 --- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc +++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc
@@ -286,7 +286,7 @@ } template <typename T> -class WebCryptoResultAdapter : public NewScriptFunction::Callable { +class WebCryptoResultAdapter : public ScriptFunction::Callable { public: explicit WebCryptoResultAdapter(base::RepeatingCallback<void(T)> function) : function_(std::move(function)) {} @@ -308,11 +308,11 @@ base::RepeatingCallback<void(T)> function) { auto* result = MakeGarbageCollected<CryptoResultImpl>(script_state); result->Promise().Then( - (MakeGarbageCollected<NewScriptFunction>( + (MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<WebCryptoResultAdapter<T>>( std::move(function)))) ->V8Function(), - (MakeGarbageCollected<NewScriptFunction>( + (MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<WebCryptoResultAdapter<DOMException*>>( WTF::BindRepeating([](DOMException* exception) {
diff --git a/third_party/blink/renderer/build/scripts/core/css/css_properties.py b/third_party/blink/renderer/build/scripts/core/css/css_properties.py index 104cd2b..0c4e108 100755 --- a/third_party/blink/renderer/build/scripts/core/css/css_properties.py +++ b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
@@ -294,7 +294,8 @@ type_name = property_['type_name'] if (property_['field_template'] == 'keyword' - or property_['field_template'] == 'multi_keyword'): + or property_['field_template'] == 'multi_keyword' + or property_['field_template'] == 'bitset_keyword'): default_value = (type_name + '::' + NameStyleConverter( property_['default_value']).to_enum_value()) elif (property_['field_template'] == 'external'
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_css_value_id_mappings.py b/third_party/blink/renderer/build/scripts/core/css/make_css_value_id_mappings.py index 996b82d..80c71c2 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_css_value_id_mappings.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_css_value_id_mappings.py
@@ -133,7 +133,8 @@ for property_ in self.css_properties.properties_including_aliases: include_paths.update(property_['include_paths']) - if property_['field_template'] == 'multi_keyword': + if property_['field_template'] in ('multi_keyword', + 'bitset_keyword'): mappings[property_['type_name']] = { 'default_value': property_['default_value'],
diff --git a/third_party/blink/renderer/build/scripts/core/style/make_computed_style_base.py b/third_party/blink/renderer/build/scripts/core/style/make_computed_style_base.py index a4336c4..49cb166d 100755 --- a/third_party/blink/renderer/build/scripts/core/style/make_computed_style_base.py +++ b/third_party/blink/renderer/build/scripts/core/style/make_computed_style_base.py
@@ -220,18 +220,15 @@ for property_ in properties: # Only generate enums for keyword properties that do not # require includes. - if (property_['field_template'] in ('keyword', 'multi_keyword') + if (property_['field_template'] in ('keyword', 'multi_keyword', + 'bitset_keyword') and len(property_['include_paths']) == 0): enum = Enum( property_['type_name'], property_['keywords'], - is_set=(property_['field_template'] == 'multi_keyword')) - # The 'white-space' property uses multi_keyword not because - # multiple keywords can be assigned, but because we want to force - # code generator to use a bitfield for performance reasons. - # TODO: crbug/1283906 - if (property_['field_template'] == 'multi_keyword' - and property_['name'].original != 'white-space'): + is_set=(property_['field_template'] in ('multi_keyword', + 'bitset_keyword'))) + if property_['field_template'] == 'multi_keyword': assert property_['keywords'][0] == 'none', \ "First keyword in a 'multi_keyword' field must be " \ "'none' in '{}'.".format(property_['name']) @@ -269,13 +266,9 @@ "so it should not specify a field_size") size = int(math.ceil(math.log(len(property_['keywords']), 2))) elif property_['field_template'] == 'multi_keyword': - # The 'white-space' property cannot actually be assigned to multiple - # keywords, but is marked as multi_keyword in order to force code - # generator to use a bitfield for performance reasons. - # TODO: crbug/1283906 + size = len(property_['keywords']) - 1 # Subtract 1 for 'none' keyword + elif property_['field_template'] == 'bitset_keyword': size = len(property_['keywords']) - if property_['name'].original != 'white-space': - size = size - 1 # Subtract 1 for 'none' keyword elif property_['field_template'] == 'external': size = None elif property_['field_template'] == 'primitive':
diff --git a/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_base.h.tmpl b/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_base.h.tmpl index e7d0f0b..a5c353f 100644 --- a/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_base.h.tmpl +++ b/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_base.h.tmpl
@@ -22,6 +22,7 @@ #} {% import 'templates/fields/keyword.tmpl' as keyword %} {% import 'templates/fields/multi_keyword.tmpl' as multi_keyword %} +{% import 'templates/fields/bitset_keyword.tmpl' as bitset_keyword %} {% import 'templates/fields/primitive.tmpl' as primitive %} {% import 'templates/fields/monotonic_flag.tmpl' as monotonic_flag %} {% import 'templates/fields/external.tmpl' as external %} @@ -30,6 +31,7 @@ {% set field_templates = { 'keyword': keyword, 'multi_keyword': multi_keyword, + 'bitset_keyword': bitset_keyword, 'primitive': primitive, 'monotonic_flag': monotonic_flag, 'external': external,
diff --git a/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_initial_values.h.tmpl b/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_initial_values.h.tmpl index 4a59f9c..8f11bb7f 100644 --- a/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_initial_values.h.tmpl +++ b/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_initial_values.h.tmpl
@@ -105,6 +105,7 @@ {% endif %} {% elif property.field_template == "keyword" or property.field_template == "multi_keyword" or + property.field_template == "bitset_keyword" or property.field_template == "primitive" %} static {{property.type_name}} {{property.initial}}() {
diff --git a/third_party/blink/renderer/build/scripts/templates/fields/bitset_keyword.tmpl b/third_party/blink/renderer/build/scripts/templates/fields/bitset_keyword.tmpl new file mode 100644 index 0000000..8d672b81 --- /dev/null +++ b/third_party/blink/renderer/build/scripts/templates/fields/bitset_keyword.tmpl
@@ -0,0 +1,8 @@ +{% import 'templates/fields/keyword.tmpl' as keyword %} + +{% macro decl_public_methods(field) -%} +{{keyword.decl_public_methods(field)}} +{%- endmacro %} + +{% macro decl_protected_methods(field) -%} +{%- endmacro %}
diff --git a/third_party/blink/renderer/core/animation/animation_effect.cc b/third_party/blink/renderer/core/animation/animation_effect.cc index a6ca1a1..4563919b 100644 --- a/third_party/blink/renderer/core/animation/animation_effect.cc +++ b/third_party/blink/renderer/core/animation/animation_effect.cc
@@ -80,10 +80,6 @@ std::max(timing_.start_delay + active_duration + timing_.end_delay, AnimationTimeDelta()); - // Exceptions should have already been thrown when trying to input values - // that would result in an infinite end_time for progress based timelines. - DCHECK(!end_time.is_inf()); - // Negative start_delay that is >= iteration_duration or iteration_count // of 0 will cause end_time to be 0 or negative. if (end_time.is_zero()) { @@ -91,6 +87,24 @@ normalized_->start_delay = AnimationTimeDelta(); normalized_->end_delay = AnimationTimeDelta(); normalized_->iteration_duration = AnimationTimeDelta(); + } else if (end_time.is_inf()) { + // The iteration count or duration may be infinite; however, start and + // end delays are strictly finite. Thus, in the limit when end time + // approaches infinity: + // start delay / end time = finite / infinite = 0 + // end delay / end time = finite / infinite = 0 + // iteration duration / end time = 1 / iteration count + // This condition can be reached by switching to a scroll timeline on + // an existing infinite duration animation. + // Note that base::TimeDelta::operator/() DCHECKS that the numerator and + // denominator cannot both be zero or both be infinite since both cases + // are undefined. Fortunately, we can evaluate the limit in the infinite + // end time case based on the definition of end time + normalized_->start_delay = AnimationTimeDelta(); + normalized_->end_delay = AnimationTimeDelta(); + normalized_->iteration_duration = + (1.0 / timing_.iteration_count) * + normalized_->timeline_duration.value(); } else { // convert to percentages then multiply by the timeline_duration normalized_->start_delay = (timing_.start_delay / end_time) * @@ -118,6 +132,7 @@ // effects } } else { + // Monotonic timeline case. // Populates normalized values for use with time based timelines. normalized_->start_delay = timing_.start_delay; normalized_->end_delay = timing_.end_delay;
diff --git a/third_party/blink/renderer/core/app_history/app_history.cc b/third_party/blink/renderer/core/app_history/app_history.cc index 658865c..ca6c267 100644 --- a/third_party/blink/renderer/core/app_history/app_history.cc +++ b/third_party/blink/renderer/core/app_history/app_history.cc
@@ -41,7 +41,7 @@ namespace blink { -class NavigateReaction final : public NewScriptFunction::Callable { +class NavigateReaction final : public ScriptFunction::Callable { public: enum class ResolveType { kFulfill, kReject }; enum class ReactType { kImmediate, kTransitionWhile }; @@ -51,11 +51,11 @@ AppHistoryTransition* transition, AbortSignal* signal, ReactType react_type) { - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<NavigateReaction>( navigation, transition, signal, ResolveType::kFulfill, react_type)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<NavigateReaction>( navigation, transition, signal, ResolveType::kReject, react_type))); @@ -73,7 +73,7 @@ react_type_(react_type) {} void Trace(Visitor* visitor) const final { - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); visitor->Trace(navigation_); visitor->Trace(transition_); visitor->Trace(signal_);
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5 index ae202e5a..c4a23239 100644 --- a/third_party/blink/renderer/core/css/css_properties.json5 +++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -219,6 +219,10 @@ "keyword", // Field can take on any subset of values from a list of keywords. "multi_keyword", + // Semantically equivalent to keyword, but the type is represented as a + // bit flag field as with multi_keyword as a performance optimization + // for matching multiple values. + "bitset_keyword", // Field stores a primitive value like int/bool. The type is specified // by type_name. The interface has a initial/getter/setter/resetter. "primitive", @@ -5121,7 +5125,7 @@ property_methods: ["CSSValueFromComputedStyleInternal"], independent: true, inherited: true, - field_template: "multi_keyword", // We use a bitflag field due peformance issues. TODO: crbug/12839063 + field_template: "bitset_keyword", keywords: [ "normal", "pre", "pre-wrap", "pre-line", "nowrap", "-webkit-nowrap", "break-spaces" ],
diff --git a/third_party/blink/renderer/core/fetch/readable_stream_bytes_consumer.cc b/third_party/blink/renderer/core/fetch/readable_stream_bytes_consumer.cc index b4d4da2..df1a940 100644 --- a/third_party/blink/renderer/core/fetch/readable_stream_bytes_consumer.cc +++ b/third_party/blink/renderer/core/fetch/readable_stream_bytes_consumer.cc
@@ -23,7 +23,7 @@ namespace blink { class ReadableStreamBytesConsumer::Fulfilled final - : public NewScriptFunction::Callable { + : public ScriptFunction::Callable { public: explicit Fulfilled(ReadableStreamBytesConsumer* consumer) : consumer_(consumer) {} @@ -59,7 +59,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(consumer_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } private: @@ -67,7 +67,7 @@ }; class ReadableStreamBytesConsumer::Rejected final - : public NewScriptFunction::Callable { + : public ScriptFunction::Callable { public: explicit Rejected(ReadableStreamBytesConsumer* consumer) : consumer_(consumer) {} @@ -79,7 +79,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(consumer_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } private: @@ -133,9 +133,9 @@ script_promise = ScriptPromise::Reject(script_state_, exception_state); script_promise - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( script_state_, MakeGarbageCollected<Fulfilled>(this)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state_, MakeGarbageCollected<Rejected>(this))) .MarkAsHandled(); }
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc index ac91c506..866099dd 100644 --- a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc +++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc
@@ -401,12 +401,16 @@ DCHECK(first_node.GetLayoutObject()); + // TODO(bokan): Refactor this to use the common + // FragmentAnchor::ScrollElementIntoViewWithOptions. + mojom::blink::ScrollIntoViewParamsPtr params = + ScrollAlignment::CreateScrollIntoViewParams( + ScrollAlignment::CenterAlways(), ScrollAlignment::CenterAlways(), + mojom::blink::ScrollType::kProgrammatic); + params->cross_origin_boundaries = false; PhysicalRect scrolled_bounding_box = - first_node.GetLayoutObject()->ScrollRectToVisible( - bounding_box, ScrollAlignment::CreateScrollIntoViewParams( - ScrollAlignment::CenterAlways(), - ScrollAlignment::CenterAlways(), - mojom::blink::ScrollType::kProgrammatic)); + first_node.GetLayoutObject()->ScrollRectToVisible(bounding_box, + std::move(params)); did_scroll_into_view_ = true; if (AXObjectCache* cache = frame_->GetDocument()->ExistingAXObjectCache())
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc index 8193dcc..6efb241 100644 --- a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc +++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
@@ -837,8 +837,7 @@ security_origin->CanRequest(url) || (redirect_status == RedirectStatus::kNoRedirect && effective_type != CSPDirectiveName::FrameSrc && - effective_type != CSPDirectiveName::ObjectSrc && - effective_type != CSPDirectiveName::FencedFrameSrc); + effective_type != CSPDirectiveName::ObjectSrc); if (!can_safely_expose_url) return SecurityOrigin::Create(url)->ToString(); @@ -1015,13 +1014,14 @@ absl::optional<base::UnguessableToken> issue_id) { DCHECK(violation_type == kURLViolation || blocked_url.IsEmpty()); - // TODO(crbug.com/1279745): Remove/clarify what this block is about. + // TODO(lukasza): Support sending reports from OOPIFs - + // https://crbug.com/611232 (or move CSP child-src and frame-src checks to the + // browser process - see https://crbug.com/376522). if (!delegate_ && !context_frame) { DCHECK(effective_type == CSPDirectiveName::ChildSrc || effective_type == CSPDirectiveName::FrameSrc || effective_type == CSPDirectiveName::TrustedTypes || - effective_type == CSPDirectiveName::RequireTrustedTypesFor || - effective_type == CSPDirectiveName::FencedFrameSrc); + effective_type == CSPDirectiveName::RequireTrustedTypesFor); return; } DCHECK( @@ -1258,8 +1258,6 @@ return "connect-src"; case CSPDirectiveName::DefaultSrc: return "default-src"; - case CSPDirectiveName::FencedFrameSrc: - return "fenced-frame-src"; case CSPDirectiveName::FontSrc: return "font-src"; case CSPDirectiveName::FormAction: @@ -1329,8 +1327,6 @@ return CSPDirectiveName::ConnectSrc; if (name == "default-src") return CSPDirectiveName::DefaultSrc; - if (name == "fenced-frame-src") - return CSPDirectiveName::FencedFrameSrc; if (name == "font-src") return CSPDirectiveName::FontSrc; if (name == "form-action")
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc index cf4462d..293b4710 100644 --- a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc +++ b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
@@ -559,7 +559,6 @@ {CSPDirectiveName::ChildSrc, "child-src"}, {CSPDirectiveName::ConnectSrc, "connect-src"}, {CSPDirectiveName::DefaultSrc, "default-src"}, - {CSPDirectiveName::FencedFrameSrc, "fenced-frame-src"}, {CSPDirectiveName::FrameAncestors, "frame-ancestors"}, {CSPDirectiveName::FrameSrc, "frame-src"}, {CSPDirectiveName::FontSrc, "font-src"}, @@ -1182,7 +1181,7 @@ CSPDirectiveName::ManifestSrc, CSPDirectiveName::MediaSrc, CSPDirectiveName::ObjectSrc, CSPDirectiveName::PrefetchSrc, CSPDirectiveName::ScriptSrcElem, CSPDirectiveName::StyleSrcElem, - CSPDirectiveName::WorkerSrc, CSPDirectiveName::FencedFrameSrc}; + CSPDirectiveName::WorkerSrc}; for (auto type : types_to_test) { EXPECT_TRUE( csp->AllowFromSource(type, example_url, example_url,
diff --git a/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc b/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc index c4988f0..a39411b 100644 --- a/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc +++ b/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc
@@ -7,7 +7,6 @@ #include <memory> #include <utility> -#include "base/notreached.h" #include "services/network/public/cpp/content_security_policy/content_security_policy.h" #include "services/network/public/cpp/features.h" #include "services/network/public/mojom/content_security_policy.mojom-blink.h" @@ -536,65 +535,34 @@ DCHECK_NE(CSPDirectiveName::DefaultSrc, effective_type); String prefix = "Refused to "; - switch (effective_type) { - case CSPDirectiveName::BaseURI: - prefix = prefix + "set the document's base URI to '"; - break; - case CSPDirectiveName::ConnectSrc: - prefix = prefix + "connect to '"; - break; - case CSPDirectiveName::FontSrc: - prefix = prefix + "load the font '"; - break; - case CSPDirectiveName::FormAction: - prefix = prefix + "send form data to '"; - break; - case CSPDirectiveName::ImgSrc: - prefix = prefix + "load the image '"; - break; - case CSPDirectiveName::ManifestSrc: - prefix = prefix + "load manifest from '"; - break; - case CSPDirectiveName::MediaSrc: - prefix = prefix + "load media from '"; - break; - case CSPDirectiveName::ObjectSrc: - prefix = prefix + "load plugin data from '"; - break; - case CSPDirectiveName::PrefetchSrc: - prefix = prefix + "prefetch content from '"; - break; - case CSPDirectiveName::ScriptSrc: - case CSPDirectiveName::ScriptSrcAttr: - case CSPDirectiveName::ScriptSrcElem: - prefix = prefix + "load the script '"; - break; - case CSPDirectiveName::StyleSrc: - case CSPDirectiveName::StyleSrcAttr: - case CSPDirectiveName::StyleSrcElem: - prefix = prefix + "load the stylesheet '"; - break; - case CSPDirectiveName::WorkerSrc: - prefix = prefix + "create a worker from '"; - break; - case CSPDirectiveName::BlockAllMixedContent: - case CSPDirectiveName::ChildSrc: - case CSPDirectiveName::DefaultSrc: - case CSPDirectiveName::FencedFrameSrc: - case CSPDirectiveName::FrameAncestors: - case CSPDirectiveName::FrameSrc: - case CSPDirectiveName::NavigateTo: - case CSPDirectiveName::ReportTo: - case CSPDirectiveName::ReportURI: - case CSPDirectiveName::RequireTrustedTypesFor: - case CSPDirectiveName::Sandbox: - case CSPDirectiveName::TreatAsPublicAddress: - case CSPDirectiveName::TrustedTypes: - case CSPDirectiveName::UpgradeInsecureRequests: - case CSPDirectiveName::Unknown: - NOTREACHED(); - break; - } + if (CSPDirectiveName::BaseURI == effective_type) + prefix = prefix + "set the document's base URI to '"; + else if (CSPDirectiveName::WorkerSrc == effective_type) + prefix = prefix + "create a worker from '"; + else if (CSPDirectiveName::ConnectSrc == effective_type) + prefix = prefix + "connect to '"; + else if (CSPDirectiveName::FontSrc == effective_type) + prefix = prefix + "load the font '"; + else if (CSPDirectiveName::FormAction == effective_type) + prefix = prefix + "send form data to '"; + else if (CSPDirectiveName::FrameSrc == effective_type) + prefix = prefix + "frame '"; + else if (CSPDirectiveName::ImgSrc == effective_type) + prefix = prefix + "load the image '"; + else if (CSPDirectiveName::MediaSrc == effective_type) + prefix = prefix + "load media from '"; + else if (CSPDirectiveName::ManifestSrc == effective_type) + prefix = prefix + "load manifest from '"; + else if (CSPDirectiveName::ObjectSrc == effective_type) + prefix = prefix + "load plugin data from '"; + else if (CSPDirectiveName::PrefetchSrc == effective_type) + prefix = prefix + "prefetch content from '"; + else if (ContentSecurityPolicy::IsScriptDirective(effective_type)) + prefix = prefix + "load the script '"; + else if (ContentSecurityPolicy::IsStyleDirective(effective_type)) + prefix = prefix + "load the stylesheet '"; + else if (CSPDirectiveName::NavigateTo == effective_type) + prefix = prefix + "navigate to '"; String directive_name = ContentSecurityPolicy::GetDirectiveName(directive.type); @@ -820,6 +788,7 @@ type == CSPDirectiveName::ConnectSrc || type == CSPDirectiveName::FontSrc || type == CSPDirectiveName::FormAction || + type == CSPDirectiveName::FrameSrc || type == CSPDirectiveName::ImgSrc || type == CSPDirectiveName::ManifestSrc || type == CSPDirectiveName::MediaSrc || @@ -829,7 +798,8 @@ type == CSPDirectiveName::StyleSrcElem || type == CSPDirectiveName::WorkerSrc); - if (type == CSPDirectiveName::ObjectSrc) { + if (type == CSPDirectiveName::ObjectSrc || + type == CSPDirectiveName::FrameSrc) { if (url.ProtocolIsAbout()) return true; }
diff --git a/third_party/blink/renderer/core/frame/pausable_script_executor.cc b/third_party/blink/renderer/core/frame/pausable_script_executor.cc index 0de6b69..2e8964ee 100644 --- a/third_party/blink/renderer/core/frame/pausable_script_executor.cc +++ b/third_party/blink/renderer/core/frame/pausable_script_executor.cc
@@ -49,7 +49,7 @@ private: // A helper class that handles a result from a single promise value. - class OnSettled : public NewScriptFunction::Callable { + class OnSettled : public ScriptFunction::Callable { public: OnSettled(PromiseAggregator* aggregator, wtf_size_t index, @@ -61,11 +61,11 @@ OnSettled& operator=(const OnSettled&) = delete; ~OnSettled() override = default; - static NewScriptFunction* New(ScriptState* script_state, - PromiseAggregator* aggregator, - wtf_size_t index, - bool was_fulfilled) { - return MakeGarbageCollected<NewScriptFunction>( + static ScriptFunction* New(ScriptState* script_state, + PromiseAggregator* aggregator, + wtf_size_t index, + bool was_fulfilled) { + return MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<OnSettled>(aggregator, index, was_fulfilled)); } @@ -87,7 +87,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(aggregator_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } private:
diff --git a/third_party/blink/renderer/core/html/html_meta_element.cc b/third_party/blink/renderer/core/html/html_meta_element.cc index fee8fdc..b4579a64 100644 --- a/third_party/blink/renderer/core/html/html_meta_element.cc +++ b/third_party/blink/renderer/core/html/html_meta_element.cc
@@ -51,7 +51,8 @@ const CreateElementFlags flags) : HTMLElement(html_names::kMetaTag, document), is_being_created_by_parser_with_sync_flag_( - flags.IsCreatedByParser() && !flags.IsAsyncCustomElements()) {} + flags.IsCreatedByParser() && !flags.IsAsyncCustomElements() && + !document.IsInDocumentWrite()) {} static bool IsInvalidSeparator(UChar c) { return c == ';';
diff --git a/third_party/blink/renderer/core/paint/paint_timing_detector.h b/third_party/blink/renderer/core/paint/paint_timing_detector.h index 77c80f3..23bc8ac 100644 --- a/third_party/blink/renderer/core/paint/paint_timing_detector.h +++ b/third_party/blink/renderer/core/paint/paint_timing_detector.h
@@ -107,8 +107,6 @@ // PaintTimingDetector contains some of paint metric detectors, // providing common infrastructure for these detectors. // -// Users has to enable 'loading' trace category to enable the metrics. -// // See also: // https://docs.google.com/document/d/1DRVd4a2VU8-yyWftgOparZF-sf16daf0vfbsHuz2rws/edit class CORE_EXPORT PaintTimingDetector
diff --git a/third_party/blink/renderer/core/script/dynamic_module_resolver.cc b/third_party/blink/renderer/core/script/dynamic_module_resolver.cc index 1cc34f7..172e2fe 100644 --- a/third_party/blink/renderer/core/script/dynamic_module_resolver.cc +++ b/third_party/blink/renderer/core/script/dynamic_module_resolver.cc
@@ -43,14 +43,14 @@ }; // Abstract callback for modules resolution. -class ModuleResolutionCallback : public NewScriptFunction::Callable { +class ModuleResolutionCallback : public ScriptFunction::Callable { public: explicit ModuleResolutionCallback(ScriptPromiseResolver* promise_resolver) : promise_resolver_(promise_resolver) {} void Trace(Visitor* visitor) const override { visitor->Trace(promise_resolver_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } protected: @@ -154,10 +154,10 @@ // FinishDynamicImport(referencingScriptOrModule, specifier, // promiseCapability, promise).</spec> ScriptPromise promise = result.GetPromise(script_state); - auto* callback_success = MakeGarbageCollected<NewScriptFunction>( + auto* callback_success = MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ModuleResolutionSuccessCallback>( promise_resolver_, module_script)); - auto* callback_failure = MakeGarbageCollected<NewScriptFunction>( + auto* callback_failure = MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ModuleResolutionFailureCallback>( promise_resolver_)); promise.Then(callback_success, callback_failure);
diff --git a/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc b/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc index 3e5a622..4fe5f3b 100644 --- a/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc +++ b/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc
@@ -123,7 +123,7 @@ // with a single argument of type module namespace. // CaptureExportedStringFunction captures the exported string value // from the module namespace as a WTF::String, exposed via CapturedValue(). -class CaptureExportedStringFunction final : public NewScriptFunction::Callable { +class CaptureExportedStringFunction final : public ScriptFunction::Callable { public: explicit CaptureExportedStringFunction(const String& export_name) : export_name_(export_name) {} @@ -156,7 +156,7 @@ // CaptureErrorFunction implements a javascript function which captures // name and error of the exception passed as its argument. -class CaptureErrorFunction final : public NewScriptFunction::Callable { +class CaptureErrorFunction final : public ScriptFunction::Callable { public: CaptureErrorFunction() = default; @@ -191,7 +191,7 @@ }; class DynamicModuleResolverTestNotReached final - : public NewScriptFunction::Callable { + : public ScriptFunction::Callable { public: DynamicModuleResolverTestNotReached() = default; @@ -222,8 +222,8 @@ auto* capture = MakeGarbageCollected<CaptureExportedStringFunction>("foo"); promise.Then( - MakeGarbageCollected<NewScriptFunction>(scope.GetScriptState(), capture), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>(scope.GetScriptState(), capture), + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<DynamicModuleResolverTestNotReached>())); @@ -290,10 +290,10 @@ auto* capture = MakeGarbageCollected<CaptureErrorFunction>(); promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<DynamicModuleResolverTestNotReached>()), - MakeGarbageCollected<NewScriptFunction>(scope.GetScriptState(), capture)); + MakeGarbageCollected<ScriptFunction>(scope.GetScriptState(), capture)); auto* resolver = MakeGarbageCollected<DynamicModuleResolver>(modulator); ModuleRequest module_request("invalid-specifier", @@ -320,10 +320,10 @@ auto* capture = MakeGarbageCollected<CaptureErrorFunction>(); promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<DynamicModuleResolverTestNotReached>()), - MakeGarbageCollected<NewScriptFunction>(scope.GetScriptState(), capture)); + MakeGarbageCollected<ScriptFunction>(scope.GetScriptState(), capture)); auto* resolver = MakeGarbageCollected<DynamicModuleResolver>(modulator); Vector<ImportAssertion> import_assertions{ @@ -351,10 +351,10 @@ auto* capture = MakeGarbageCollected<CaptureErrorFunction>(); promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<DynamicModuleResolverTestNotReached>()), - MakeGarbageCollected<NewScriptFunction>(scope.GetScriptState(), capture)); + MakeGarbageCollected<ScriptFunction>(scope.GetScriptState(), capture)); auto* resolver = MakeGarbageCollected<DynamicModuleResolver>(modulator); ModuleRequest module_request("./dependency.js", @@ -385,10 +385,10 @@ auto* capture = MakeGarbageCollected<CaptureErrorFunction>(); promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<DynamicModuleResolverTestNotReached>()), - MakeGarbageCollected<NewScriptFunction>(scope.GetScriptState(), capture)); + MakeGarbageCollected<ScriptFunction>(scope.GetScriptState(), capture)); auto* resolver = MakeGarbageCollected<DynamicModuleResolver>(modulator); ModuleRequest module_request("./dependency.js", @@ -428,8 +428,8 @@ auto* capture = MakeGarbageCollected<CaptureExportedStringFunction>("foo"); promise.Then( - MakeGarbageCollected<NewScriptFunction>(scope.GetScriptState(), capture), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>(scope.GetScriptState(), capture), + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<DynamicModuleResolverTestNotReached>()));
diff --git a/third_party/blink/renderer/core/streams/byte_length_queuing_strategy.cc b/third_party/blink/renderer/core/streams/byte_length_queuing_strategy.cc index 246b074..163d1a0 100644 --- a/third_party/blink/renderer/core/streams/byte_length_queuing_strategy.cc +++ b/third_party/blink/renderer/core/streams/byte_length_queuing_strategy.cc
@@ -20,10 +20,10 @@ kByteLengthQueuingStrategySizeFunction; class ByteLengthQueuingStrategySizeFunction final - : public NewScriptFunction::Callable { + : public ScriptFunction::Callable { public: static v8::Local<v8::Function> CreateFunction(ScriptState* script_state) { - auto* self = MakeGarbageCollected<NewScriptFunction>( + auto* self = MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ByteLengthQueuingStrategySizeFunction>());
diff --git a/third_party/blink/renderer/core/streams/count_queuing_strategy.cc b/third_party/blink/renderer/core/streams/count_queuing_strategy.cc index 247d5be3..e537efd 100644 --- a/third_party/blink/renderer/core/streams/count_queuing_strategy.cc +++ b/third_party/blink/renderer/core/streams/count_queuing_strategy.cc
@@ -18,11 +18,10 @@ static const V8PrivateProperty::SymbolKey kCountQueuingStrategySizeFunction; -class CountQueuingStrategySizeFunction final - : public NewScriptFunction::Callable { +class CountQueuingStrategySizeFunction final : public ScriptFunction::Callable { public: static v8::Local<v8::Function> CreateFunction(ScriptState* script_state) { - auto* self = MakeGarbageCollected<NewScriptFunction>( + auto* self = MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<CountQueuingStrategySizeFunction>()); // https://streams.spec.whatwg.org/#count-queuing-strategy-size-function
diff --git a/third_party/blink/renderer/core/streams/promise_handler.cc b/third_party/blink/renderer/core/streams/promise_handler.cc index 0078ad7..de21e02 100644 --- a/third_party/blink/renderer/core/streams/promise_handler.cc +++ b/third_party/blink/renderer/core/streams/promise_handler.cc
@@ -55,8 +55,8 @@ v8::Local<v8::Promise> StreamThenPromise(v8::Local<v8::Context> context, v8::Local<v8::Promise> promise, - NewScriptFunction* on_fulfilled, - NewScriptFunction* on_rejected) { + ScriptFunction* on_fulfilled, + ScriptFunction* on_rejected) { v8::MaybeLocal<v8::Promise> result_maybe; if (!on_fulfilled) { DCHECK(on_rejected);
diff --git a/third_party/blink/renderer/core/streams/promise_handler.h b/third_party/blink/renderer/core/streams/promise_handler.h index c6004ab..f10a242e 100644 --- a/third_party/blink/renderer/core/streams/promise_handler.h +++ b/third_party/blink/renderer/core/streams/promise_handler.h
@@ -14,7 +14,7 @@ // A variant of ScriptFunction that avoids the conversion to and from a // ScriptValue. Use this when the reaction doesn't need to return a value other // than undefined. -class CORE_EXPORT PromiseHandler : public NewScriptFunction::Callable { +class CORE_EXPORT PromiseHandler : public ScriptFunction::Callable { public: PromiseHandler(); @@ -25,7 +25,7 @@ // A variant of PromiseHandler for when the reaction does need to return a // value. -class CORE_EXPORT PromiseHandlerWithValue : public NewScriptFunction::Callable { +class CORE_EXPORT PromiseHandlerWithValue : public ScriptFunction::Callable { public: PromiseHandlerWithValue(); @@ -42,8 +42,8 @@ CORE_EXPORT v8::Local<v8::Promise> StreamThenPromise( v8::Local<v8::Context>, v8::Local<v8::Promise>, - NewScriptFunction* on_fulfilled, - NewScriptFunction* on_rejected = nullptr); + ScriptFunction* on_fulfilled, + ScriptFunction* on_rejected = nullptr); } // namespace blink
diff --git a/third_party/blink/renderer/core/streams/readable_byte_stream_controller.cc b/third_party/blink/renderer/core/streams/readable_byte_stream_controller.cc index e6261af..66f8ec1 100644 --- a/third_party/blink/renderer/core/streams/readable_byte_stream_controller.cc +++ b/third_party/blink/renderer/core/streams/readable_byte_stream_controller.cc
@@ -517,9 +517,9 @@ StreamThenPromise( script_state->GetContext(), pull_promise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolveFunction>(controller)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>(controller))); } @@ -789,9 +789,9 @@ StreamThenPromise( script_state->GetContext(), start_promise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolveFunction>(controller)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>(controller))); }
diff --git a/third_party/blink/renderer/core/streams/readable_stream.cc b/third_party/blink/renderer/core/streams/readable_stream.cc index 4f17221..c0c31e29 100644 --- a/third_party/blink/renderer/core/streams/readable_stream.cc +++ b/third_party/blink/renderer/core/streams/readable_stream.cc
@@ -708,12 +708,12 @@ return StreamThenPromise( script_state_->GetContext(), promise, on_fulfilled - ? MakeGarbageCollected<NewScriptFunction>( + ? MakeGarbageCollected<ScriptFunction>( script_state_, MakeGarbageCollected<WrappedPromiseReaction>( this, on_fulfilled)) : nullptr, on_rejected - ? MakeGarbageCollected<NewScriptFunction>( + ? MakeGarbageCollected<ScriptFunction>( script_state_, MakeGarbageCollected<WrappedPromiseReaction>( this, on_rejected)) : nullptr); @@ -791,7 +791,7 @@ script_state->GetContext(), ReadableStreamDefaultReader::Read(script_state, engine_->reader_) ->V8Promise(script_state->GetIsolate()), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolveFunction>(engine_))); } @@ -1084,7 +1084,7 @@ StreamThenPromise( script_state->GetContext(), reader_->closed_promise_->V8Promise(script_state->GetIsolate()), nullptr, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>(this))); // Step "19. Return « branch1, branch2 »." @@ -1792,7 +1792,7 @@ // fulfillment handler that returns undefined. return StreamThenPromise( script_state->GetContext(), source_cancel_promise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ReturnUndefinedFunction>())); }
diff --git a/third_party/blink/renderer/core/streams/readable_stream_default_controller.cc b/third_party/blink/renderer/core/streams/readable_stream_default_controller.cc index 057f1d77..2365ac4 100644 --- a/third_party/blink/renderer/core/streams/readable_stream_default_controller.cc +++ b/third_party/blink/renderer/core/streams/readable_stream_default_controller.cc
@@ -425,10 +425,10 @@ StreamThenPromise( script_state->GetContext(), pull_promise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolveFunction>(controller)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>(controller))); } @@ -591,10 +591,10 @@ StreamThenPromise( script_state->GetContext(), start_promise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolveFunction>(controller)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>(controller))); }
diff --git a/third_party/blink/renderer/core/streams/stream_promise_resolver_test.cc b/third_party/blink/renderer/core/streams/stream_promise_resolver_test.cc index 8dc3abaa..1aab0a9 100644 --- a/third_party/blink/renderer/core/streams/stream_promise_resolver_test.cc +++ b/third_party/blink/renderer/core/streams/stream_promise_resolver_test.cc
@@ -94,13 +94,13 @@ // runMicrotasks(); // } // } - class ThenGetter final : public NewScriptFunction::Callable { + class ThenGetter final : public ScriptFunction::Callable { public: explicit ThenGetter(StreamPromiseResolver* promise) : promise_(promise) {} void Trace(Visitor* visitor) const override { visitor->Trace(promise_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } void CallRaw(ScriptState* script_state, @@ -117,7 +117,7 @@ auto value = v8::Object::New(isolate); v8::PropertyDescriptor property_descriptor( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<ThenGetter>(promise)) ->V8Function(), v8::Undefined(isolate));
diff --git a/third_party/blink/renderer/core/streams/transferable_streams.cc b/third_party/blink/renderer/core/streams/transferable_streams.cc index 3ea17b8f..ec728d1 100644 --- a/third_party/blink/renderer/core/streams/transferable_streams.cc +++ b/third_party/blink/renderer/core/streams/transferable_streams.cc
@@ -58,8 +58,8 @@ namespace { template <typename T, typename... Args> -NewScriptFunction* CreateFunction(ScriptState* script_state, Args&&... args) { - return MakeGarbageCollected<NewScriptFunction>( +ScriptFunction* CreateFunction(ScriptState* script_state, Args&&... args) { + return MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<T>(std::forward<Args>(args)...)); } @@ -405,7 +405,7 @@ return StreamThenPromise( script_state->GetContext(), writable_->backpressure_promise_->V8Promise(isolate), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<DoWriteOnResolve>(script_state, chunk, this))); } @@ -780,9 +780,9 @@ class ConcatenatingUnderlyingSource final : public UnderlyingSourceBase { public: - using Constant = NewScriptFunction::Constant; + using Constant = ScriptFunction::Constant; - class PullSource2 final : public NewScriptFunction::Callable { + class PullSource2 final : public ScriptFunction::Callable { public: explicit PullSource2(ConcatenatingUnderlyingSource* source) : source_(source) {} @@ -792,21 +792,21 @@ } void Trace(Visitor* visitor) const override { visitor->Trace(source_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } private: const Member<ConcatenatingUnderlyingSource> source_; }; - class OnReadingSource1Success final : public NewScriptFunction::Callable { + class OnReadingSource1Success final : public ScriptFunction::Callable { public: explicit OnReadingSource1Success(ConcatenatingUnderlyingSource* source) : source_(source) {} void Trace(Visitor* visitor) const override { visitor->Trace(source_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } ScriptValue Call(ScriptState* script_state, ScriptValue read_result) override { @@ -835,14 +835,14 @@ const Member<ConcatenatingUnderlyingSource> source_; }; - class OnReadingSource1Fail final : public NewScriptFunction::Callable { + class OnReadingSource1Fail final : public ScriptFunction::Callable { public: explicit OnReadingSource1Fail(ConcatenatingUnderlyingSource* source) : source_(source) {} void Trace(Visitor* visitor) const override { visitor->Trace(source_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } ScriptValue Call(ScriptState* script_state, ScriptValue value) override {
diff --git a/third_party/blink/renderer/core/streams/transferable_streams_test.cc b/third_party/blink/renderer/core/streams/transferable_streams_test.cc index 42374f3..a3124cb 100644 --- a/third_party/blink/renderer/core/streams/transferable_streams_test.cc +++ b/third_party/blink/renderer/core/streams/transferable_streams_test.cc
@@ -176,7 +176,7 @@ writer->write(script_state, ScriptValue::CreateNull(scope.GetIsolate()), ASSERT_NO_EXCEPTION); - class ExpectNullResponse : public NewScriptFunction::Callable { + class ExpectNullResponse : public ScriptFunction::Callable { public: explicit ExpectNullResponse(bool* got_response) : got_response_(got_response) {} @@ -209,7 +209,7 @@ // TODO(ricea): This is copy-and-pasted from transform_stream_test.cc. Put it // in a shared location. - class ExpectNotReached : public NewScriptFunction::Callable { + class ExpectNotReached : public ScriptFunction::Callable { public: ExpectNotReached() = default; @@ -221,11 +221,11 @@ bool got_response = false; reader->read(script_state, ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ExpectNullResponse>(&got_response)) ->V8Function(), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ExpectNotReached>()) ->V8Function());
diff --git a/third_party/blink/renderer/core/streams/transform_stream.cc b/third_party/blink/renderer/core/streams/transform_stream.cc index 216484ae..501bdaa7 100644 --- a/third_party/blink/renderer/core/streams/transform_stream.cc +++ b/third_party/blink/renderer/core/streams/transform_stream.cc
@@ -381,7 +381,7 @@ return StreamThenPromise( script_state->GetContext(), backpressure_change_promise->V8Promise(script_state->GetIsolate()), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResponseFunction>( script_state, stream_, chunk))); } @@ -524,9 +524,9 @@ // 5. Return the result of transforming flushPromise ... return StreamThenPromise( script_state->GetContext(), flush_promise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolveFunction>(stream_)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>(stream_))); }
diff --git a/third_party/blink/renderer/core/streams/transform_stream_default_controller.cc b/third_party/blink/renderer/core/streams/transform_stream_default_controller.cc index b0f44ec..2e869b69 100644 --- a/third_party/blink/renderer/core/streams/transform_stream_default_controller.cc +++ b/third_party/blink/renderer/core/streams/transform_stream_default_controller.cc
@@ -356,7 +356,7 @@ // 2. Return the result of transforming transformPromise ... return StreamThenPromise( script_state->GetContext(), transform_promise, nullptr, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>( controller->controlled_transform_stream_))); }
diff --git a/third_party/blink/renderer/core/streams/writable_stream.cc b/third_party/blink/renderer/core/streams/writable_stream.cc index 5231f7e4..bbc2427 100644 --- a/third_party/blink/renderer/core/streams/writable_stream.cc +++ b/third_party/blink/renderer/core/streams/writable_stream.cc
@@ -644,10 +644,10 @@ StreamThenPromise( script_state->GetContext(), promise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolvePromiseFunction>( stream, abort_request->GetPromise())), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectPromiseFunction>( stream, abort_request->GetPromise()))); }
diff --git a/third_party/blink/renderer/core/streams/writable_stream_default_controller.cc b/third_party/blink/renderer/core/streams/writable_stream_default_controller.cc index d20fb97..7819185 100644 --- a/third_party/blink/renderer/core/streams/writable_stream_default_controller.cc +++ b/third_party/blink/renderer/core/streams/writable_stream_default_controller.cc
@@ -214,9 +214,9 @@ StreamThenPromise( script_state->GetContext(), start_promise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolvePromiseFunction>(stream)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectPromiseFunction>(stream))); } @@ -557,9 +557,9 @@ StreamThenPromise( script_state->GetContext(), sinkClosePromise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolveFunction>(stream)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>(stream))); } @@ -666,10 +666,10 @@ }; StreamThenPromise(script_state->GetContext(), sinkWritePromise, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ResolveFunction>( stream, controller)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<RejectFunction>( stream, controller))); }
diff --git a/third_party/blink/renderer/core/testing/internals.cc b/third_party/blink/renderer/core/testing/internals.cc index 6efb677..35e6d90 100644 --- a/third_party/blink/renderer/core/testing/internals.cc +++ b/third_party/blink/renderer/core/testing/internals.cc
@@ -3311,7 +3311,7 @@ namespace { -class AddOneFunction : public NewScriptFunction::Callable { +class AddOneFunction : public ScriptFunction::Callable { public: ScriptValue Call(ScriptState* script_state, ScriptValue value) override { v8::Local<v8::Value> v8_value = value.V8Value(); @@ -3344,7 +3344,7 @@ ScriptPromise Internals::addOneToPromise(ScriptState* script_state, ScriptPromise promise) { - return promise.Then(MakeGarbageCollected<NewScriptFunction>( + return promise.Then(MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<AddOneFunction>())); }
diff --git a/third_party/blink/renderer/core/testing/mock_function_scope.cc b/third_party/blink/renderer/core/testing/mock_function_scope.cc index 76e4c4f..b6f1505c 100644 --- a/third_party/blink/renderer/core/testing/mock_function_scope.cc +++ b/third_party/blink/renderer/core/testing/mock_function_scope.cc
@@ -24,16 +24,16 @@ mock_functions_.push_back( MakeGarbageCollected<MockFunction>(script_state_, captor)); EXPECT_CALL(*mock_functions_.back(), Call(script_state_, testing::_)); - return MakeGarbageCollected<NewScriptFunction>(script_state_, - mock_functions_.back()) + return MakeGarbageCollected<ScriptFunction>(script_state_, + mock_functions_.back()) ->V8Function(); } v8::Local<v8::Function> MockFunctionScope::ExpectCall() { mock_functions_.push_back(MakeGarbageCollected<MockFunction>()); EXPECT_CALL(*mock_functions_.back(), Call(script_state_, testing::_)); - return MakeGarbageCollected<NewScriptFunction>(script_state_, - mock_functions_.back()) + return MakeGarbageCollected<ScriptFunction>(script_state_, + mock_functions_.back()) ->V8Function(); } @@ -41,8 +41,8 @@ mock_functions_.push_back(MakeGarbageCollected<MockFunction>()); EXPECT_CALL(*mock_functions_.back(), Call(script_state_, testing::_)) .Times(0); - return MakeGarbageCollected<NewScriptFunction>(script_state_, - mock_functions_.back()) + return MakeGarbageCollected<ScriptFunction>(script_state_, + mock_functions_.back()) ->V8Function(); }
diff --git a/third_party/blink/renderer/core/testing/mock_function_scope.h b/third_party/blink/renderer/core/testing/mock_function_scope.h index 915c779a..0a0f2887 100644 --- a/third_party/blink/renderer/core/testing/mock_function_scope.h +++ b/third_party/blink/renderer/core/testing/mock_function_scope.h
@@ -28,7 +28,7 @@ v8::Local<v8::Function> ExpectNoCall(); private: - class MockFunction : public NewScriptFunction::Callable { + class MockFunction : public ScriptFunction::Callable { public: MockFunction(); // TODO(http://crbug.com/1159794): add other convenience methods that allow
diff --git a/third_party/blink/renderer/core/testing/module_test_base.cc b/third_party/blink/renderer/core/testing/module_test_base.cc index 4972ba7..7d9b062 100644 --- a/third_party/blink/renderer/core/testing/module_test_base.cc +++ b/third_party/blink/renderer/core/testing/module_test_base.cc
@@ -36,7 +36,7 @@ exception_state); } -class SaveResultFunction final : public NewScriptFunction::Callable { +class SaveResultFunction final : public ScriptFunction::Callable { public: SaveResultFunction() = default; @@ -55,7 +55,7 @@ ScriptValue* result_ = nullptr; }; -class ExpectNotReached final : public NewScriptFunction::Callable { +class ExpectNotReached final : public ScriptFunction::Callable { public: ExpectNotReached() = default; @@ -78,10 +78,10 @@ auto* resolve_function = MakeGarbageCollected<SaveResultFunction>(); result.GetPromise(script_state) - .Then(MakeGarbageCollected<NewScriptFunction>(script_state, - resolve_function), - MakeGarbageCollected<NewScriptFunction>( - script_state, MakeGarbageCollected<ExpectNotReached>())); + .Then( + MakeGarbageCollected<ScriptFunction>(script_state, resolve_function), + MakeGarbageCollected<ScriptFunction>( + script_state, MakeGarbageCollected<ExpectNotReached>())); v8::MicrotasksScope::PerformCheckpoint(script_state->GetIsolate()); @@ -102,9 +102,9 @@ auto* reject_function = MakeGarbageCollected<SaveResultFunction>(); script_promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ExpectNotReached>()), - MakeGarbageCollected<NewScriptFunction>(script_state, reject_function)); + MakeGarbageCollected<ScriptFunction>(script_state, reject_function)); v8::MicrotasksScope::PerformCheckpoint(script_state->GetIsolate());
diff --git a/third_party/blink/renderer/core/timing/profiler_group_test.cc b/third_party/blink/renderer/core/timing/profiler_group_test.cc index adedff3..b5b381a 100644 --- a/third_party/blink/renderer/core/timing/profiler_group_test.cc +++ b/third_party/blink/renderer/core/timing/profiler_group_test.cc
@@ -188,7 +188,7 @@ } TEST(ProfilerGroupTest, Bug1119865) { - class ExpectNoCallFunction : public NewScriptFunction::Callable { + class ExpectNoCallFunction : public ScriptFunction::Callable { public: ScriptValue Call(ScriptState*, ScriptValue) override { EXPECT_FALSE(true) @@ -209,7 +209,7 @@ scope.GetScriptState(), *init_options, base::TimeTicks(), scope.GetExceptionState()); - auto* function = MakeGarbageCollected<NewScriptFunction>( + auto* function = MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<ExpectNoCallFunction>()); profiler->stop(scope.GetScriptState()).Then(function); }
diff --git a/third_party/blink/renderer/modules/cache_storage/cache.cc b/third_party/blink/renderer/modules/cache_storage/cache.cc index 30dccc0..27d73255 100644 --- a/third_party/blink/renderer/modules/cache_storage/cache.cc +++ b/third_party/blink/renderer/modules/cache_storage/cache.cc
@@ -543,7 +543,7 @@ // Used to handle the ScopedFetcher::Fetch promise in AddAllImpl. // TODO(nhiroki): Unfortunately, we have to go through V8 to wait for the fetch // promise. It should be better to achieve this only within C++ world. -class Cache::FetchHandler final : public NewScriptFunction::Callable { +class Cache::FetchHandler final : public ScriptFunction::Callable { public: // |exception_state| is passed so that the context_type, interface_name and // property_name can be copied and then used to construct a new ExceptionState @@ -586,7 +586,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(response_loader_); visitor->Trace(barrier_callback_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } private: @@ -1104,13 +1104,13 @@ auto* response_loader = MakeGarbageCollected<ResponseBodyLoader>( script_state, barrier_callback, i, /*require_ok_response=*/true, trace_id); - auto* on_resolve = MakeGarbageCollected<NewScriptFunction>( + auto* on_resolve = MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FetchHandler>(response_loader, barrier_callback, exception_state.GetContext())); // The |response_loader=nullptr| makes this handler a reject handler // internally. - auto* on_reject = MakeGarbageCollected<NewScriptFunction>( + auto* on_reject = MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FetchHandler>( /*response_loader=*/nullptr, barrier_callback, exception_state.GetContext()));
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc b/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc index 3ac6680..9e00611 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc +++ b/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc
@@ -48,7 +48,7 @@ // This class deals with all the Blob promises and executes the write // operation after all the promises have been resolved. class ClipboardPromise::BlobPromiseResolverFunction final - : public NewScriptFunction::Callable { + : public ScriptFunction::Callable { public: enum class ResolveType { kFulfill, kReject }; @@ -56,10 +56,10 @@ ScriptPromise promise, ClipboardPromise* clipboard_promise) { promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<BlobPromiseResolverFunction>( clipboard_promise, ResolveType::kFulfill)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<BlobPromiseResolverFunction>( clipboard_promise, ResolveType::kReject))); } @@ -69,7 +69,7 @@ : clipboard_promise_(clipboard_promise), type_(type) {} void Trace(Visitor* visitor) const final { - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); visitor->Trace(clipboard_promise_); }
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_factory_test.cc b/third_party/blink/renderer/modules/indexeddb/idb_factory_test.cc index 6a04842..58598ab 100644 --- a/third_party/blink/renderer/modules/indexeddb/idb_factory_test.cc +++ b/third_party/blink/renderer/modules/indexeddb/idb_factory_test.cc
@@ -31,7 +31,7 @@ namespace blink { namespace { -class TestHelperFunction : public NewScriptFunction::Callable { +class TestHelperFunction : public ScriptFunction::Callable { public: explicit TestHelperFunction(bool* called_flag) : called_flag_(called_flag) {} @@ -134,10 +134,10 @@ bool on_fulfilled = false; bool on_rejected = false; - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_fulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_rejected))); @@ -182,10 +182,10 @@ bool on_fulfilled = false; bool on_rejected = false; - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_fulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<TestHelperFunction>(&on_rejected)));
diff --git a/third_party/blink/renderer/modules/locks/lock.cc b/third_party/blink/renderer/modules/locks/lock.cc index 871e275..7ca7be01 100644 --- a/third_party/blink/renderer/modules/locks/lock.cc +++ b/third_party/blink/renderer/modules/locks/lock.cc
@@ -21,7 +21,7 @@ const char* kLockModeNameShared = "shared"; } // namespace -class Lock::ThenFunction final : public NewScriptFunction::Callable { +class Lock::ThenFunction final : public ScriptFunction::Callable { public: enum ResolveType { kFulfilled, @@ -33,7 +33,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(lock_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } ScriptValue Call(ScriptState*, ScriptValue value) override { @@ -90,10 +90,10 @@ ScriptState* script_state = resolver->GetScriptState(); resolver_ = resolver; - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ThenFunction>( this, ThenFunction::kFulfilled)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ThenFunction>( this, ThenFunction::kRejected))); }
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc index 724a74e..3f0b191 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc
@@ -22,15 +22,15 @@ MediaStreamAudioProcessor::MediaStreamAudioProcessor( DeliverProcessedAudioCallback deliver_processed_audio_callback, - const AudioProcessingProperties& properties, - bool use_capture_multi_channel_processing, + const media::AudioProcessingSettings& settings, + const media::AudioParameters& capture_data_source_params, scoped_refptr<WebRtcAudioDeviceImpl> playout_data_source) : audio_processor_(std::move(deliver_processed_audio_callback), /*log_callback=*/ ConvertToBaseRepeatingCallback( CrossThreadBindRepeating(&WebRtcLogMessage)), - properties.ToAudioProcessingSettings( - use_capture_multi_channel_processing)), + settings, + capture_data_source_params), playout_data_source_(std::move(playout_data_source)), main_thread_runner_(base::ThreadTaskRunnerHandle::Get()), aec_dump_agent_impl_(AecDumpAgentImpl::Create(this)), @@ -53,17 +53,6 @@ Stop(); } -void MediaStreamAudioProcessor::OnCaptureFormatChanged( - const media::AudioParameters& input_format) { - DCHECK(main_thread_runner_->BelongsToCurrentThread()); - - audio_processor_.OnCaptureFormatChanged(input_format); - - // Reset the |capture_thread_checker_| since the capture data will come from - // a new capture thread. - DETACH_FROM_THREAD(capture_thread_checker_); -} - void MediaStreamAudioProcessor::ProcessCapturedAudio( const media::AudioBus& audio_source, base::TimeTicks audio_capture_time, @@ -117,32 +106,26 @@ } // static +// TODO(https://crbug.com/1269364): This logic should be moved to +// ProcessedLocalAudioSource and verified/fixed; The decision should be +// "hardware effects are required or software audio mofidications are needed +// (AudioProcessingSettings.NeedAudioModification())". bool MediaStreamAudioProcessor::WouldModifyAudio( const AudioProcessingProperties& properties) { - // Note: This method should be kept in-sync with any changes to the logic in - // AudioProcessor::InitializeAudioProcessingModule(). - // TODO(https://crbug.com/1269364): Share this logic with - // AudioProcessor::InitializeAudioProcessingModule(). - - if (properties.goog_audio_mirroring) + if (properties + .ToAudioProcessingSettings( + /*multi_channel_capture_processing - does not matter here*/ false) + .NeedAudioModification()) { return true; + } #if !defined(OS_IOS) - if (properties.EchoCancellationIsWebRtcProvided() || - properties.goog_auto_gain_control) { + if (properties.goog_auto_gain_control) { return true; } #endif -#if !defined(OS_IOS) && !defined(OS_ANDROID) - if (properties.goog_experimental_echo_cancellation) { - return true; - } -#endif - - if (properties.goog_noise_suppression || - properties.goog_experimental_noise_suppression || - properties.goog_highpass_filter) { + if (properties.goog_noise_suppression) { return true; }
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h index 5855ca37..0da2f6de 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h +++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h
@@ -23,6 +23,7 @@ namespace media { class AudioBus; +struct AudioProcessingSettings; } // namespace media namespace blink { @@ -56,21 +57,14 @@ // thread. MediaStreamAudioProcessor( DeliverProcessedAudioCallback deliver_processed_audio_callback, - const AudioProcessingProperties& properties, - bool use_capture_multi_channel_processing, + const media::AudioProcessingSettings& settings, + const media::AudioParameters& capture_data_source_params, scoped_refptr<WebRtcAudioDeviceImpl> playout_data_source); MediaStreamAudioProcessor(const MediaStreamAudioProcessor&) = delete; MediaStreamAudioProcessor& operator=(const MediaStreamAudioProcessor&) = delete; - // Called when the format of the capture data has changed. - // Called on the main render thread. The caller is responsible for stopping - // the capture thread before calling this method. - // After this method, the capture thread will be changed to a new capture - // thread. - void OnCaptureFormatChanged(const media::AudioParameters& source_params); - // Processes and delivers capture audio, // See media::AudioProcessor::ProcessCapturedAudio for API details. // Must be called on the capture audio thread.
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc index 9aa3e5c..e844c76 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc
@@ -203,10 +203,10 @@ blink::AudioProcessingProperties properties; scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback_.Get(), properties, use_multichannel_processing, - webrtc_audio_device)); + mock_capture_callback_.Get(), + properties.ToAudioProcessingSettings(use_multichannel_processing), + params_, webrtc_audio_device)); EXPECT_TRUE(audio_processor->has_webrtc_audio_processing()); - audio_processor->OnCaptureFormatChanged(params_); VerifyDefaultComponents(*audio_processor); const int expected_output_channels = @@ -229,10 +229,11 @@ new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback_.Get(), properties, - /*use_capture_multi_channel_processing=*/true, webrtc_audio_device)); + mock_capture_callback_.Get(), + properties.ToAudioProcessingSettings( + /*multi_channel_capture_processing=*/true), + params_, webrtc_audio_device)); EXPECT_FALSE(audio_processor->has_webrtc_audio_processing()); - audio_processor->OnCaptureFormatChanged(params_); ProcessDataAndVerifyFormat(*audio_processor, mock_capture_callback_, params_.sample_rate(), params_.channels(), @@ -254,11 +255,6 @@ scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); blink::AudioProcessingProperties properties; - scoped_refptr<MediaStreamAudioProcessor> audio_processor( - new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback_.Get(), properties, use_multichannel_processing, - webrtc_audio_device)); - EXPECT_TRUE(audio_processor->has_webrtc_audio_processing()); static const int kSupportedSampleRates[] = { 8000, @@ -278,7 +274,12 @@ media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, sample_rate, buffer_size); - audio_processor->OnCaptureFormatChanged(params); + scoped_refptr<MediaStreamAudioProcessor> audio_processor( + new rtc::RefCountedObject<MediaStreamAudioProcessor>( + mock_capture_callback_.Get(), + properties.ToAudioProcessingSettings(use_multichannel_processing), + params, webrtc_audio_device)); + EXPECT_TRUE(audio_processor->has_webrtc_audio_processing()); VerifyDefaultComponents(*audio_processor); int expected_sample_rate = @@ -292,11 +293,11 @@ ProcessDataAndVerifyFormat(*audio_processor, mock_capture_callback_, expected_sample_rate, expected_output_channels, expected_sample_rate / 100); - } - // Stop |audio_processor| so that it removes itself from - // |webrtc_audio_device| and clears its pointer to it. - audio_processor->Stop(); + // Stop |audio_processor| so that it removes itself from + // |webrtc_audio_device| and clears its pointer to it. + audio_processor->Stop(); + } } TEST_F(MediaStreamAudioProcessorTest, StartStopAecDump) { @@ -309,12 +310,16 @@ base::FilePath temp_file_path; ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_directory.GetPath(), &temp_file_path)); + media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, + media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC, + 48000, 480); { scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback_.Get(), properties, - /*use_capture_multi_channel_processing=*/true, - webrtc_audio_device)); + mock_capture_callback_.Get(), + properties.ToAudioProcessingSettings( + /*multi_channel_capture_processing=*/true), + params, webrtc_audio_device)); // Start and stop recording. audio_processor->OnStartDump(base::File( @@ -377,10 +382,10 @@ properties.goog_audio_mirroring = true; scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback_.Get(), properties, - use_multichannel_processing, webrtc_audio_device)); + mock_capture_callback_.Get(), + properties.ToAudioProcessingSettings(use_multichannel_processing), + source_params, webrtc_audio_device)); EXPECT_EQ(audio_processor->has_webrtc_audio_processing(), use_apm); - audio_processor->OnCaptureFormatChanged(source_params); // There's no sense in continuing if this fails. ASSERT_EQ(2, audio_processor->OutputFormat().channels()); @@ -446,16 +451,15 @@ scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); blink::AudioProcessingProperties properties; - scoped_refptr<MediaStreamAudioProcessor> audio_processor( - new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback_.Get(), properties, use_multichannel_processing, - webrtc_audio_device)); - EXPECT_TRUE(audio_processor->has_webrtc_audio_processing()); - media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC, 48000, 480); - audio_processor->OnCaptureFormatChanged(params); + scoped_refptr<MediaStreamAudioProcessor> audio_processor( + new rtc::RefCountedObject<MediaStreamAudioProcessor>( + mock_capture_callback_.Get(), + properties.ToAudioProcessingSettings(use_multichannel_processing), + params, webrtc_audio_device)); + EXPECT_TRUE(audio_processor->has_webrtc_audio_processing()); const int expected_output_channels = use_multichannel_processing ? params_.channels() : 1; @@ -476,21 +480,21 @@ blink::AudioProcessingProperties properties; scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); - scoped_refptr<MediaStreamAudioProcessor> audio_processor( - new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback_.Get(), properties, - /*use_capture_multi_channel_processing=*/true, webrtc_audio_device)); - EXPECT_TRUE(audio_processor->has_webrtc_audio_processing()); media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_DISCRETE, 48000, 480); // Test both 1 and 2 discrete channels. for (int channels = 1; channels <= 2; ++channels) { params.set_channels_for_discrete(channels); - audio_processor->OnCaptureFormatChanged(params); + scoped_refptr<MediaStreamAudioProcessor> audio_processor( + new rtc::RefCountedObject<MediaStreamAudioProcessor>( + mock_capture_callback_.Get(), + properties.ToAudioProcessingSettings( + /*multi_channel_capture_processing==*/true), + params, webrtc_audio_device)); + EXPECT_TRUE(audio_processor->has_webrtc_audio_processing()); + audio_processor->Stop(); } - - audio_processor->Stop(); } INSTANTIATE_TEST_CASE_P(MediaStreamAudioProcessorMultichannelAffectedTests, @@ -505,17 +509,18 @@ blink::AudioProcessingProperties properties; scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); - scoped_refptr<MediaStreamAudioProcessor> audio_processor( - new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback.Get(), properties, - /*use_capture_multi_channel_processing=*/true, webrtc_audio_device)); - ASSERT_TRUE(audio_processor->has_webrtc_audio_processing()); - // Set buffer size to 4 ms. media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 48000 * 4 / 1000); - audio_processor->OnCaptureFormatChanged(params); + scoped_refptr<MediaStreamAudioProcessor> audio_processor( + new rtc::RefCountedObject<MediaStreamAudioProcessor>( + mock_capture_callback.Get(), + properties.ToAudioProcessingSettings( + /*multi_channel_capture_processing=*/true), + params, webrtc_audio_device)); + ASSERT_TRUE(audio_processor->has_webrtc_audio_processing()); + int output_sample_rate = audio_processor->OutputFormat().sample_rate(); std::unique_ptr<media::AudioBus> data_bus = media::AudioBus::Create(params.channels(), params.frames_per_buffer()); @@ -562,17 +567,18 @@ blink::AudioProcessingProperties properties; scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); - scoped_refptr<MediaStreamAudioProcessor> audio_processor( - new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback.Get(), properties, - /*use_capture_multi_channel_processing=*/true, webrtc_audio_device)); - ASSERT_TRUE(audio_processor->has_webrtc_audio_processing()); - // Set buffer size to 35 ms. media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 48000 * 35 / 1000); - audio_processor->OnCaptureFormatChanged(params); + scoped_refptr<MediaStreamAudioProcessor> audio_processor( + new rtc::RefCountedObject<MediaStreamAudioProcessor>( + mock_capture_callback.Get(), + properties.ToAudioProcessingSettings( + /*multi_channel_capture_processing=*/true), + params, webrtc_audio_device)); + ASSERT_TRUE(audio_processor->has_webrtc_audio_processing()); + int output_sample_rate = audio_processor->OutputFormat().sample_rate(); std::unique_ptr<media::AudioBus> data_bus = media::AudioBus::Create(params.channels(), params.frames_per_buffer()); @@ -609,17 +615,18 @@ properties.DisableDefaultProperties(); scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); - scoped_refptr<MediaStreamAudioProcessor> audio_processor( - new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback.Get(), properties, - /*use_capture_multi_channel_processing=*/true, webrtc_audio_device)); - ASSERT_FALSE(audio_processor->has_webrtc_audio_processing()); - // Set buffer size to 4 ms. media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 48000 * 4 / 1000); - audio_processor->OnCaptureFormatChanged(params); + scoped_refptr<MediaStreamAudioProcessor> audio_processor( + new rtc::RefCountedObject<MediaStreamAudioProcessor>( + mock_capture_callback.Get(), + properties.ToAudioProcessingSettings( + /*multi_channel_capture_processing=*/true), + params, webrtc_audio_device)); + ASSERT_FALSE(audio_processor->has_webrtc_audio_processing()); + int output_sample_rate = audio_processor->OutputFormat().sample_rate(); std::unique_ptr<media::AudioBus> data_bus = media::AudioBus::Create(params.channels(), params.frames_per_buffer()); @@ -653,17 +660,18 @@ properties.DisableDefaultProperties(); scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); - scoped_refptr<MediaStreamAudioProcessor> audio_processor( - new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback.Get(), properties, - /*use_capture_multi_channel_processing=*/true, webrtc_audio_device)); - ASSERT_FALSE(audio_processor->has_webrtc_audio_processing()); - // Set buffer size to 35 ms. media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 48000 * 35 / 1000); - audio_processor->OnCaptureFormatChanged(params); + scoped_refptr<MediaStreamAudioProcessor> audio_processor( + new rtc::RefCountedObject<MediaStreamAudioProcessor>( + mock_capture_callback.Get(), + properties.ToAudioProcessingSettings( + /*multi_channel_capture_processing=*/true), + params, webrtc_audio_device)); + ASSERT_FALSE(audio_processor->has_webrtc_audio_processing()); + int output_sample_rate = audio_processor->OutputFormat().sample_rate(); std::unique_ptr<media::AudioBus> data_bus = media::AudioBus::Create(params.channels(), params.frames_per_buffer()); @@ -696,10 +704,14 @@ MockProcessedCaptureCallback mock_capture_callback; scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); + media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, + media::CHANNEL_LAYOUT_STEREO, 48000, 480); scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - mock_capture_callback.Get(), properties, - /*use_capture_multi_channel_processing=*/true, webrtc_audio_device)); + mock_capture_callback.Get(), + properties.ToAudioProcessingSettings( + /*multi_channel_capture_processing=*/true), + params, webrtc_audio_device)); return audio_processor; } } // namespace
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc index 173499f3e..3a34dd3 100644 --- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc +++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
@@ -114,6 +114,95 @@ #endif } +int GetCaptureBufferSize(bool need_webrtc_processing, + const media::AudioParameters input_device_params) { +#if defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMECAST) + // TODO(henrika): Re-evaluate whether to use same logic as other platforms. + // https://crbug.com/638081 + return 2 * input_device_params.sample_rate() / 100; +#else + // If audio processing is turned on, require 10ms buffers. + if (need_webrtc_processing) + return input_device_params.sample_rate() / 100; + + // If audio processing is off and the native hardware buffer size was + // provided, use it. It can be harmful, in terms of CPU/power consumption, + // to use smaller buffer sizes than the native size + // (https://crbug.com/362261). + if (int hardware_buffer_size = input_device_params.frames_per_buffer()) + return hardware_buffer_size; + + // If the buffer size is missing from the MediaStreamDevice, provide 10ms as + // a fall-back. + // + // TODO(miu): Identify where/why the buffer size might be missing, fix the + // code, and then require it here. https://crbug.com/638081 + return input_device_params.sample_rate() / 100; +#endif +} + +// Will return nullopt if |input_device_params| are not supported. +absl::optional<media::AudioParameters> ComputeAudioCaptureParams( + const media::AudioParameters& input_device_params, + const media::AudioProcessingSettings& audio_processing_settings) { + // If KEYBOARD_MIC effect is set, change the layout to the corresponding + // layout that includes the keyboard mic. + media::ChannelLayout channel_layout = input_device_params.channel_layout(); + if ((input_device_params.effects() & media::AudioParameters::KEYBOARD_MIC) && + audio_processing_settings.transient_noise_suppression) { + if (channel_layout == media::CHANNEL_LAYOUT_STEREO) { + channel_layout = media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC; + DVLOG(1) << "Changed stereo layout to stereo + keyboard mic layout due " + << "to KEYBOARD_MIC effect."; + } else { + DVLOG(1) << "KEYBOARD_MIC effect ignored, not compatible with layout " + << channel_layout; + } + } + + DVLOG(1) << "Audio input hardware channel layout: " << channel_layout; + UMA_HISTOGRAM_ENUMERATION("WebRTC.AudioInputChannelLayout", channel_layout, + media::CHANNEL_LAYOUT_MAX + 1); + + // Verify that the reported input channel configuration is supported. + if (channel_layout != media::CHANNEL_LAYOUT_MONO && + channel_layout != media::CHANNEL_LAYOUT_STEREO && + channel_layout != media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC && + channel_layout != media::CHANNEL_LAYOUT_DISCRETE) { + SendLogMessage( + base::StringPrintf("EnsureSourceIsStarted() => (ERROR: " + "input channel layout (%d) is not supported.", + static_cast<int>(channel_layout))); + return absl::nullopt; + } + + DVLOG(1) << "Audio input hardware sample rate: " + << input_device_params.sample_rate(); + media::AudioSampleRate asr; + if (media::ToAudioSampleRate(input_device_params.sample_rate(), &asr)) { + UMA_HISTOGRAM_ENUMERATION("WebRTC.AudioInputSampleRate", asr, + media::kAudioSampleRateMax + 1); + } else { + UMA_HISTOGRAM_COUNTS_1M("WebRTC.AudioInputSampleRateUnexpected", + input_device_params.sample_rate()); + } + + media::AudioParameters params( + media::AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, + input_device_params.sample_rate(), + GetCaptureBufferSize( + audio_processing_settings.NeedWebrtcAudioProcessing(), + input_device_params)); + params.set_effects(input_device_params.effects()); + if (channel_layout == media::CHANNEL_LAYOUT_DISCRETE) { + DCHECK_LE(input_device_params.channels(), 2); + params.set_channels_for_discrete(input_device_params.channels()); + } + DVLOG(1) << params.AsHumanReadableString(); + CHECK(params.IsValid()); + return params; +} + } // namespace ProcessedLocalAudioSource::ProcessedLocalAudioSource( @@ -295,62 +384,6 @@ return false; } - // If KEYBOARD_MIC effect is set, change the layout to the corresponding - // layout that includes the keyboard mic. - media::ChannelLayout channel_layout = device().input.channel_layout(); - if ((device().input.effects() & media::AudioParameters::KEYBOARD_MIC) && - audio_processing_properties_.goog_experimental_noise_suppression) { - if (channel_layout == media::CHANNEL_LAYOUT_STEREO) { - channel_layout = media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC; - DVLOG(1) << "Changed stereo layout to stereo + keyboard mic layout due " - << "to KEYBOARD_MIC effect."; - } else { - DVLOG(1) << "KEYBOARD_MIC effect ignored, not compatible with layout " - << channel_layout; - } - } - - DVLOG(1) << "Audio input hardware channel layout: " << channel_layout; - UMA_HISTOGRAM_ENUMERATION("WebRTC.AudioInputChannelLayout", channel_layout, - media::CHANNEL_LAYOUT_MAX + 1); - - // Verify that the reported input channel configuration is supported. - if (channel_layout != media::CHANNEL_LAYOUT_MONO && - channel_layout != media::CHANNEL_LAYOUT_STEREO && - channel_layout != media::CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC && - channel_layout != media::CHANNEL_LAYOUT_DISCRETE) { - SendLogMessage( - base::StringPrintf("EnsureSourceIsStarted() => (ERROR: " - "input channel layout (%d) is not supported.", - static_cast<int>(channel_layout))); - return false; - } - - DVLOG(1) << "Audio input hardware sample rate: " - << device().input.sample_rate(); - media::AudioSampleRate asr; - if (media::ToAudioSampleRate(device().input.sample_rate(), &asr)) { - UMA_HISTOGRAM_ENUMERATION("WebRTC.AudioInputSampleRate", asr, - media::kAudioSampleRateMax + 1); - } else { - UMA_HISTOGRAM_COUNTS_1M("WebRTC.AudioInputSampleRateUnexpected", - device().input.sample_rate()); - } - - // Determine the audio format required of the AudioCapturerSource. Then, - // pass that to the |media_stream_audio_processor_| and set the output format - // of this ProcessedLocalAudioSource to the processor's output format. - media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, - channel_layout, device().input.sample_rate(), - device().input.sample_rate() / 100); - params.set_effects(device().input.effects()); - if (channel_layout == media::CHANNEL_LAYOUT_DISCRETE) { - DCHECK_LE(device().input.channels(), 2); - params.set_channels_for_discrete(device().input.channels()); - } - DVLOG(1) << params.AsHumanReadableString(); - DCHECK(params.IsValid()); - // If system level echo cancellation is active, flag any other active system // level effects to the media stream audio processor. if (audio_processing_properties_.echo_cancellation_type == @@ -371,34 +404,49 @@ } } - media::AudioSourceParameters source_params(device().session_id()); + // No more modifications of |audio_processing_properties_| after this line. + media::AudioProcessingSettings audio_processing_settings( + audio_processing_properties_.ToAudioProcessingSettings( + num_requested_channels_ > 1)); + + // Determine the audio format required of the AudioCapturerSource. Then, + // pass that to the |media_stream_audio_processor_| and set the output format + // of this ProcessedLocalAudioSource to the processor's output format. + auto maybe_audio_capture_params = + ComputeAudioCaptureParams(device().input, audio_processing_settings); + if (!maybe_audio_capture_params) // Unsupported configuration. + return false; + + media::AudioParameters& audio_capture_params = *maybe_audio_capture_params; + blink::WebRtcLogMessage("Using APM in renderer process."); - bool use_multichannel_processing = num_requested_channels_ > 1; + // This callback has to be valid until MediaStreamAudioProcessor is stopped, // which happens in EnsureSourceIsStopped(). MediaStreamAudioProcessor::DeliverProcessedAudioCallback processing_callback = ConvertToBaseRepeatingCallback(CrossThreadBindRepeating( &ProcessedLocalAudioSource::DeliverProcessedAudio, CrossThreadUnretained(this))); + media_stream_audio_processor_ = new rtc::RefCountedObject<MediaStreamAudioProcessor>( - std::move(processing_callback), audio_processing_properties_, - use_multichannel_processing, rtc_audio_device); - params.set_frames_per_buffer(GetBufferSize(device().input.sample_rate())); - media_stream_audio_processor_->OnCaptureFormatChanged(params); + std::move(processing_callback), audio_processing_settings, + audio_capture_params, rtc_audio_device); + SetFormat(media_stream_audio_processor_->OutputFormat()); // Start the source. SendLogMessageWithSessionId(base::StringPrintf( "EnsureSourceIsStarted() => (WebRTC audio source starts: " "input_parameters=[%s], output_parameters=[%s])", - params.AsHumanReadableString().c_str(), + audio_capture_params.AsHumanReadableString().c_str(), GetAudioParameters().AsHumanReadableString().c_str())); auto* web_frame = static_cast<WebLocalFrame*>(WebFrame::FromCoreFrame(consumer_frame_)); + media::AudioSourceParameters source_params(device().session_id()); scoped_refptr<media::AudioCapturerSource> new_source = Platform::Current()->NewAudioCapturerSource(web_frame, source_params); - new_source->Initialize(params, this); + new_source->Initialize(audio_capture_params, this); // We need to set the AGC control before starting the stream. new_source->SetAutomaticGainControl(true); source_ = std::move(new_source); @@ -540,31 +588,4 @@ } } -int ProcessedLocalAudioSource::GetBufferSize(int sample_rate) const { - DCHECK(GetTaskRunner()->BelongsToCurrentThread()); -#if defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMECAST) - // TODO(henrika): Re-evaluate whether to use same logic as other platforms. - // https://crbug.com/638081 - return (2 * sample_rate / 100); -#else - // If audio processing is turned on, require 10ms buffers. - if (media_stream_audio_processor_->has_webrtc_audio_processing()) - return (sample_rate / 100); - - // If audio processing is off and the native hardware buffer size was - // provided, use it. It can be harmful, in terms of CPU/power consumption, - // to use smaller buffer sizes than the native size - // (https://crbug.com/362261). - if (int hardware_buffer_size = device().input.frames_per_buffer()) - return hardware_buffer_size; - - // If the buffer size is missing from the MediaStreamDevice, provide 10ms as - // a fall-back. - // - // TODO(miu): Identify where/why the buffer size might be missing, fix the - // code, and then require it here. https://crbug.com/638081 - return (sample_rate / 100); -#endif -} - } // namespace blink
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h index 91d8eea..3a98847 100644 --- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h +++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h
@@ -122,10 +122,6 @@ // Update the device (source) mic volume. void SetVolume(double volume); - // Helper function to get the source buffer size based on whether audio - // processing will take place. - int GetBufferSize(int sample_rate) const; - // Helper method which sends the log |message| to a native WebRTC log and // adds the current session ID (from the associated media stream device) to // make the log unique.
diff --git a/third_party/blink/renderer/modules/payments/on_payment_response_test.cc b/third_party/blink/renderer/modules/payments/on_payment_response_test.cc index e93f322..12e2871 100644 --- a/third_party/blink/renderer/modules/payments/on_payment_response_test.cc +++ b/third_party/blink/renderer/modules/payments/on_payment_response_test.cc
@@ -393,7 +393,7 @@ ->OnPaymentResponse(std::move(response)); } -class PaymentResponseFunction : public NewScriptFunction::Callable { +class PaymentResponseFunction : public ScriptFunction::Callable { public: explicit PaymentResponseFunction(ScriptValue* out_value) : value_(out_value) { DCHECK(value_); @@ -429,7 +429,7 @@ &scope.GetFrame(), mojom::UserActivationNotificationType::kTest); ScriptValue out_value; request->show(scope.GetScriptState(), ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<PaymentResponseFunction>(&out_value)) ->V8Function(), @@ -463,7 +463,7 @@ &scope.GetFrame(), mojom::UserActivationNotificationType::kTest); ScriptValue out_value; request->show(scope.GetScriptState(), ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<PaymentResponseFunction>(&out_value)) ->V8Function(), @@ -496,7 +496,7 @@ &scope.GetFrame(), mojom::UserActivationNotificationType::kTest); ScriptValue out_value; request->show(scope.GetScriptState(), ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<PaymentResponseFunction>(&out_value)) ->V8Function(), @@ -529,7 +529,7 @@ &scope.GetFrame(), mojom::UserActivationNotificationType::kTest); ScriptValue out_value; request->show(scope.GetScriptState(), ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<PaymentResponseFunction>(&out_value)) ->V8Function(), @@ -559,7 +559,7 @@ &scope.GetFrame(), mojom::UserActivationNotificationType::kTest); ScriptValue out_value; request->show(scope.GetScriptState(), ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<PaymentResponseFunction>(&out_value)) ->V8Function(), @@ -593,7 +593,7 @@ &scope.GetFrame(), mojom::UserActivationNotificationType::kTest); ScriptValue out_value; request->show(scope.GetScriptState(), ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<PaymentResponseFunction>(&out_value)) ->V8Function(), @@ -626,7 +626,7 @@ &scope.GetFrame(), mojom::UserActivationNotificationType::kTest); ScriptValue out_value; request->show(scope.GetScriptState(), ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<PaymentResponseFunction>(&out_value)) ->V8Function(), @@ -659,7 +659,7 @@ &scope.GetFrame(), mojom::UserActivationNotificationType::kTest); ScriptValue out_value; request->show(scope.GetScriptState(), ASSERT_NO_EXCEPTION) - .Then(MakeGarbageCollected<NewScriptFunction>( + .Then(MakeGarbageCollected<ScriptFunction>( scope.GetScriptState(), MakeGarbageCollected<PaymentResponseFunction>(&out_value)) ->V8Function(),
diff --git a/third_party/blink/renderer/modules/payments/payment_request.cc b/third_party/blink/renderer/modules/payments/payment_request.cc index 83a16d9..3532a69 100644 --- a/third_party/blink/renderer/modules/payments/payment_request.cc +++ b/third_party/blink/renderer/modules/payments/payment_request.cc
@@ -861,11 +861,11 @@ // 10 seconds, abort payment. update_payment_details_timer_.StartOneShot(base::Seconds(10), FROM_HERE); details_promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<UpdatePaymentDetailsFunction>( this, UpdatePaymentDetailsFunction::ResolveType::kFulfill)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<UpdatePaymentDetailsFunction>( this, UpdatePaymentDetailsFunction::ResolveType::kReject)));
diff --git a/third_party/blink/renderer/modules/payments/payment_request_update_event.cc b/third_party/blink/renderer/modules/payments/payment_request_update_event.cc index b5ac61f..5aaf12a 100644 --- a/third_party/blink/renderer/modules/payments/payment_request_update_event.cc +++ b/third_party/blink/renderer/modules/payments/payment_request_update_event.cc
@@ -63,11 +63,11 @@ wait_for_update_ = true; promise.Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<UpdatePaymentDetailsFunction>( request_, UpdatePaymentDetailsFunction::ResolveType::kFulfill)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<UpdatePaymentDetailsFunction>( request_, UpdatePaymentDetailsFunction::ResolveType::kReject)));
diff --git a/third_party/blink/renderer/modules/payments/update_payment_details_function.cc b/third_party/blink/renderer/modules/payments/update_payment_details_function.cc index d0b8850..6e868a7 100644 --- a/third_party/blink/renderer/modules/payments/update_payment_details_function.cc +++ b/third_party/blink/renderer/modules/payments/update_payment_details_function.cc
@@ -18,7 +18,7 @@ void UpdatePaymentDetailsFunction::Trace(Visitor* visitor) const { visitor->Trace(delegate_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } ScriptValue UpdatePaymentDetailsFunction::Call(ScriptState* script_state,
diff --git a/third_party/blink/renderer/modules/payments/update_payment_details_function.h b/third_party/blink/renderer/modules/payments/update_payment_details_function.h index b85be30..faf4312 100644 --- a/third_party/blink/renderer/modules/payments/update_payment_details_function.h +++ b/third_party/blink/renderer/modules/payments/update_payment_details_function.h
@@ -14,7 +14,7 @@ class ScriptState; class ScriptValue; -class UpdatePaymentDetailsFunction : public NewScriptFunction::Callable { +class UpdatePaymentDetailsFunction : public ScriptFunction::Callable { public: enum class ResolveType { kFulfill,
diff --git a/third_party/blink/renderer/modules/remoteplayback/remote_playback_test.cc b/third_party/blink/renderer/modules/remoteplayback/remote_playback_test.cc index 1ccc59d..d7a20b9 100644 --- a/third_party/blink/renderer/modules/remoteplayback/remote_playback_test.cc +++ b/third_party/blink/renderer/modules/remoteplayback/remote_playback_test.cc
@@ -27,7 +27,7 @@ namespace { -class MockFunction : public NewScriptFunction::Callable { +class MockFunction : public ScriptFunction::Callable { public: MockFunction() = default; MOCK_METHOD2(Call, ScriptValue(ScriptState*, ScriptValue)); @@ -270,8 +270,8 @@ MockFunction* callback_function = MakeGarbageCollected<MockFunction>(); V8RemotePlaybackAvailabilityCallback* availability_callback = V8RemotePlaybackAvailabilityCallback::Create( - MakeGarbageCollected<NewScriptFunction>(scope.GetScriptState(), - callback_function) + MakeGarbageCollected<ScriptFunction>(scope.GetScriptState(), + callback_function) ->V8Function()); const int kNumberCallbacks = 10; @@ -382,8 +382,8 @@ MockFunction* callback_function = MakeGarbageCollected<MockFunction>(); V8RemotePlaybackAvailabilityCallback* availability_callback = V8RemotePlaybackAvailabilityCallback::Create( - MakeGarbageCollected<NewScriptFunction>(scope.GetScriptState(), - callback_function) + MakeGarbageCollected<ScriptFunction>(scope.GetScriptState(), + callback_function) ->V8Function()); // The initial call upon registering will not happen as it's posted on the
diff --git a/third_party/blink/renderer/modules/serial/serial_port.cc b/third_party/blink/renderer/modules/serial/serial_port.cc index 728f2cc..6fd2807 100644 --- a/third_party/blink/renderer/modules/serial/serial_port.cc +++ b/third_party/blink/renderer/modules/serial/serial_port.cc
@@ -112,7 +112,7 @@ } // A ScriptFunction that calls ContinueClose() on the provided SerialPort. -class ContinueCloseFunction : public NewScriptFunction::Callable { +class ContinueCloseFunction : public ScriptFunction::Callable { public: explicit ContinueCloseFunction(SerialPort* port) : port_(port) {} @@ -122,7 +122,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(port_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } private: @@ -130,7 +130,7 @@ }; // A ScriptFunction that calls AbortClose() on the provided SerialPort. -class AbortCloseFunction : public NewScriptFunction::Callable { +class AbortCloseFunction : public ScriptFunction::Callable { public: explicit AbortCloseFunction(SerialPort* port) : port_(port) {} @@ -141,7 +141,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(port_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } private: @@ -417,9 +417,9 @@ return ScriptPromise::All(script_state, promises) .Then( - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ContinueCloseFunction>(this)), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<AbortCloseFunction>(this))); }
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_container_test.cc b/third_party/blink/renderer/modules/service_worker/service_worker_container_test.cc index 3a0abc0b..6711658 100644 --- a/third_party/blink/renderer/modules/service_worker/service_worker_container_test.cc +++ b/third_party/blink/renderer/modules/service_worker/service_worker_container_test.cc
@@ -45,7 +45,7 @@ // The returned ScriptFunction can outlive the StubScriptFunction, // but it should not be called after the StubScriptFunction dies. v8::Local<v8::Function> GetFunction(ScriptState* script_state) { - return MakeGarbageCollected<NewScriptFunction>( + return MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ScriptFunctionImpl>(*this)) ->V8Function(); } @@ -58,7 +58,7 @@ size_t call_count_; ScriptValue arg_; - class ScriptFunctionImpl : public NewScriptFunction::Callable { + class ScriptFunctionImpl : public ScriptFunction::Callable { public: explicit ScriptFunctionImpl(StubScriptFunction& owner) : owner_(owner) {}
diff --git a/third_party/blink/renderer/modules/service_worker/wait_until_observer.cc b/third_party/blink/renderer/modules/service_worker/wait_until_observer.cc index 2fa8fd68..947afe2 100644 --- a/third_party/blink/renderer/modules/service_worker/wait_until_observer.cc +++ b/third_party/blink/renderer/modules/service_worker/wait_until_observer.cc
@@ -36,8 +36,7 @@ } // anonymous namespace -class WaitUntilObserver::ThenFunction final - : public NewScriptFunction::Callable { +class WaitUntilObserver::ThenFunction final : public ScriptFunction::Callable { public: enum ResolveType { kFulfilled, @@ -53,7 +52,7 @@ void Trace(Visitor* visitor) const override { visitor->Trace(observer_); - NewScriptFunction::Callable::Trace(visitor); + ScriptFunction::Callable::Trace(visitor); } ScriptValue Call(ScriptState* script_state, ScriptValue value) override { @@ -155,11 +154,11 @@ // 3. `Add f to the extend lifetime promises.` // 4. `Increment the pending promises count by one.` IncrementPendingPromiseCount(); - script_promise.Then(MakeGarbageCollected<NewScriptFunction>( + script_promise.Then(MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ThenFunction>( this, ThenFunction::kFulfilled, std::move(on_promise_fulfilled))), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<ThenFunction>( this, ThenFunction::kRejected, std::move(on_promise_rejected))));
diff --git a/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl_test.cc b/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl_test.cc index 7756ddd4..36d505e8 100644 --- a/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl_test.cc +++ b/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl_test.cc
@@ -38,7 +38,7 @@ std::unique_ptr<VideoFramePresentationMetadata>()); }; -class MockFunction : public NewScriptFunction::Callable { +class MockFunction : public ScriptFunction::Callable { public: MockFunction() = default; @@ -214,7 +214,7 @@ V8VideoFrameRequestCallback* GetCallback(ScriptState* script_state, MockFunction* function) { return V8VideoFrameRequestCallback::Create( - MakeGarbageCollected<NewScriptFunction>(script_state, function) + MakeGarbageCollected<ScriptFunction>(script_state, function) ->V8Function()); }
diff --git a/third_party/blink/renderer/modules/wake_lock/wake_lock_test_utils.cc b/third_party/blink/renderer/modules/wake_lock/wake_lock_test_utils.cc index e3da0551..c184102 100644 --- a/third_party/blink/renderer/modules/wake_lock/wake_lock_test_utils.cc +++ b/third_party/blink/renderer/modules/wake_lock/wake_lock_test_utils.cc
@@ -39,7 +39,7 @@ // Helper class for WaitForPromise{Fulfillment,Rejection}(). It provides a // function that invokes |callback| when a ScriptPromise is resolved. -class ClosureRunnerCallable final : public NewScriptFunction::Callable { +class ClosureRunnerCallable final : public ScriptFunction::Callable { public: explicit ClosureRunnerCallable(base::OnceClosure callback) : callback_(std::move(callback)) {} @@ -290,7 +290,7 @@ void WakeLockTestingContext::WaitForPromiseFulfillment(ScriptPromise promise) { base::RunLoop run_loop; - promise.Then(MakeGarbageCollected<NewScriptFunction>( + promise.Then(MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<ClosureRunnerCallable>(run_loop.QuitClosure()))); // Execute pending microtasks, otherwise it can take a few seconds for the @@ -304,7 +304,7 @@ base::RunLoop run_loop; promise.Then( nullptr, - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( GetScriptState(), MakeGarbageCollected<ClosureRunnerCallable>(run_loop.QuitClosure()))); // Execute pending microtasks, otherwise it can take a few seconds for the
diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc b/third_party/blink/renderer/modules/webaudio/base_audio_context.cc index a9e15ec71..6ea4344 100644 --- a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc +++ b/third_party/blink/renderer/modules/webaudio/base_audio_context.cc
@@ -318,11 +318,9 @@ DCHECK(IsMainThread()); DCHECK(audio_data); - // TODO(crbug.com/1060315): This check needs to be revised when the spec - // behavior is clarified for the case of a non-existent ExecutionContext. if (!GetExecutionContext()) { exception_state.ThrowDOMException( - DOMExceptionCode::kNotAllowedError, + DOMExceptionCode::kInvalidStateError, "Cannot decode audio data: The document is no longer active."); return ScriptPromise(); }
diff --git a/third_party/blink/renderer/modules/webcodecs/audio_decoder_fuzzer.cc b/third_party/blink/renderer/modules/webcodecs/audio_decoder_fuzzer.cc index 6d6e017..9e9fe0f 100644 --- a/third_party/blink/renderer/modules/webcodecs/audio_decoder_fuzzer.cc +++ b/third_party/blink/renderer/modules/webcodecs/audio_decoder_fuzzer.cc
@@ -53,13 +53,13 @@ ToScriptStateForMainWorld(&page_holder->GetFrame()); ScriptState::Scope scope(script_state); - Persistent<NewScriptFunction> error_function = - MakeGarbageCollected<NewScriptFunction>( + Persistent<ScriptFunction> error_function = + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FakeFunction>("error")); Persistent<V8WebCodecsErrorCallback> error_callback = V8WebCodecsErrorCallback::Create(error_function->V8Function()); - Persistent<NewScriptFunction> output_function = - MakeGarbageCollected<NewScriptFunction>( + Persistent<ScriptFunction> output_function = + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FakeFunction>("output")); Persistent<V8AudioDataOutputCallback> output_callback = V8AudioDataOutputCallback::Create(output_function->V8Function());
diff --git a/third_party/blink/renderer/modules/webcodecs/audio_encoder_fuzzer.cc b/third_party/blink/renderer/modules/webcodecs/audio_encoder_fuzzer.cc index de8b31a..6dc6fa7 100644 --- a/third_party/blink/renderer/modules/webcodecs/audio_encoder_fuzzer.cc +++ b/third_party/blink/renderer/modules/webcodecs/audio_encoder_fuzzer.cc
@@ -60,13 +60,13 @@ ToScriptStateForMainWorld(&page_holder->GetFrame()); ScriptState::Scope scope(script_state); - Persistent<NewScriptFunction> error_function = - MakeGarbageCollected<NewScriptFunction>( + Persistent<ScriptFunction> error_function = + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FakeFunction>("error")); Persistent<V8WebCodecsErrorCallback> error_callback = V8WebCodecsErrorCallback::Create(error_function->V8Function()); - Persistent<NewScriptFunction> output_function = - MakeGarbageCollected<NewScriptFunction>( + Persistent<ScriptFunction> output_function = + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FakeFunction>("output")); Persistent<V8EncodedAudioChunkOutputCallback> output_callback = V8EncodedAudioChunkOutputCallback::Create(
diff --git a/third_party/blink/renderer/modules/webcodecs/fuzzer_utils.h b/third_party/blink/renderer/modules/webcodecs/fuzzer_utils.h index acf20cc..c4da7f1 100644 --- a/third_party/blink/renderer/modules/webcodecs/fuzzer_utils.h +++ b/third_party/blink/renderer/modules/webcodecs/fuzzer_utils.h
@@ -30,7 +30,7 @@ class DOMRectInit; class PlaneLayout; -class FakeFunction : public NewScriptFunction::Callable { +class FakeFunction : public ScriptFunction::Callable { public: explicit FakeFunction(std::string name);
diff --git a/third_party/blink/renderer/modules/webcodecs/video_decoder_fuzzer.cc b/third_party/blink/renderer/modules/webcodecs/video_decoder_fuzzer.cc index ffbfb57..de3d474 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_decoder_fuzzer.cc +++ b/third_party/blink/renderer/modules/webcodecs/video_decoder_fuzzer.cc
@@ -53,13 +53,13 @@ ToScriptStateForMainWorld(&page_holder->GetFrame()); ScriptState::Scope scope(script_state); - Persistent<NewScriptFunction> error_function = - MakeGarbageCollected<NewScriptFunction>( + Persistent<ScriptFunction> error_function = + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FakeFunction>("error")); Persistent<V8WebCodecsErrorCallback> error_callback = V8WebCodecsErrorCallback::Create(error_function->V8Function()); - Persistent<NewScriptFunction> output_function = - MakeGarbageCollected<NewScriptFunction>( + Persistent<ScriptFunction> output_function = + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FakeFunction>("output")); Persistent<V8VideoFrameOutputCallback> output_callback = V8VideoFrameOutputCallback::Create(output_function->V8Function());
diff --git a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc index fd4d78a4..ef91364 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc +++ b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
@@ -1033,7 +1033,7 @@ resolver->Resolve(support); } -class FindAnySupported final : public NewScriptFunction::Callable { +class FindAnySupported final : public ScriptFunction::Callable { public: ScriptValue Call(ScriptState* state, ScriptValue value) override { ExceptionContext context( @@ -1111,7 +1111,7 @@ // Wait for all |promises| to resolve and check if any of them have // support=true. - auto* find_any_supported = MakeGarbageCollected<NewScriptFunction>( + auto* find_any_supported = MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FindAnySupported>()); return ScriptPromise::All(script_state, promises).Then(find_any_supported);
diff --git a/third_party/blink/renderer/modules/webcodecs/video_encoder_fuzzer.cc b/third_party/blink/renderer/modules/webcodecs/video_encoder_fuzzer.cc index 2e3cc98..2be9804 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_encoder_fuzzer.cc +++ b/third_party/blink/renderer/modules/webcodecs/video_encoder_fuzzer.cc
@@ -60,13 +60,13 @@ ToScriptStateForMainWorld(&page_holder->GetFrame()); ScriptState::Scope scope(script_state); - Persistent<NewScriptFunction> error_function = - MakeGarbageCollected<NewScriptFunction>( + Persistent<ScriptFunction> error_function = + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FakeFunction>("error")); Persistent<V8WebCodecsErrorCallback> error_callback = V8WebCodecsErrorCallback::Create(error_function->V8Function()); - Persistent<NewScriptFunction> output_function = - MakeGarbageCollected<NewScriptFunction>( + Persistent<ScriptFunction> output_function = + MakeGarbageCollected<ScriptFunction>( script_state, MakeGarbageCollected<FakeFunction>("output")); Persistent<V8EncodedVideoChunkOutputCallback> output_callback = V8EncodedVideoChunkOutputCallback::Create(
diff --git a/third_party/blink/renderer/modules/webtransport/outgoing_stream.cc b/third_party/blink/renderer/modules/webtransport/outgoing_stream.cc index 3f6416c..1ab12e7 100644 --- a/third_party/blink/renderer/modules/webtransport/outgoing_stream.cc +++ b/third_party/blink/renderer/modules/webtransport/outgoing_stream.cc
@@ -246,7 +246,7 @@ }; StreamThenPromise(script_state_->GetContext(), abort_promise.V8Promise(), - MakeGarbageCollected<NewScriptFunction>( + MakeGarbageCollected<ScriptFunction>( script_state_, MakeGarbageCollected<ResolveFunction>( reason, resolver)));
diff --git a/third_party/blink/renderer/platform/bindings/parkable_string.cc b/third_party/blink/renderer/platform/bindings/parkable_string.cc index b75b70e..e2c59665 100644 --- a/third_party/blink/renderer/platform/bindings/parkable_string.cc +++ b/third_party/blink/renderer/platform/bindings/parkable_string.cc
@@ -720,14 +720,8 @@ ok = false; } } else { - // Use partition alloc for zlib's temporary data. This is crucial to - // avoid leaking memory on Android, see the details in crbug.com/931553. - auto fast_malloc = [](size_t size) { - return WTF::Partitions::FastMalloc(size, "ZlibTemporaryData"); - }; ok = compression::GzipCompress(data, buffer.data(), buffer.size(), - &compressed_size, fast_malloc, - WTF::Partitions::FastFree); + &compressed_size, nullptr, nullptr); } }
diff --git a/third_party/blink/renderer/platform/network/blink_schemeful_site.h b/third_party/blink/renderer/platform/network/blink_schemeful_site.h index ed807afa7..9f4cb30 100644 --- a/third_party/blink/renderer/platform/network/blink_schemeful_site.h +++ b/third_party/blink/renderer/platform/network/blink_schemeful_site.h
@@ -10,6 +10,7 @@ #include "base/memory/scoped_refptr.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h" +#include "third_party/blink/renderer/platform/weborigin/security_origin_hash.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -74,6 +75,9 @@ } private: + friend struct WTF::DefaultHash<BlinkSchemefulSite>; + friend struct WTF::HashTraits<BlinkSchemefulSite>; + // IPC serialization code needs to access internal origin. friend struct mojo::StructTraits<network::mojom::SchemefulSiteDataView, blink::BlinkSchemefulSite>; @@ -112,4 +116,47 @@ } // namespace blink +namespace WTF { + +template <> +struct DefaultHash<blink::BlinkSchemefulSite> { + struct Hash { + STATIC_ONLY(Hash); + + static unsigned GetHash(const blink::BlinkSchemefulSite& schemeful_site) { + return blink::SecurityOriginHash::GetHash(schemeful_site.site_as_origin_); + } + + static bool Equal(const blink::BlinkSchemefulSite& a, + const blink::BlinkSchemefulSite& b) { + return blink::SecurityOriginHash::Equal(a.site_as_origin_, + b.site_as_origin_); + } + + static const bool safe_to_compare_to_empty_or_deleted = false; + }; +}; + +template <> +struct HashTraits<blink::BlinkSchemefulSite> + : SimpleClassHashTraits<blink::BlinkSchemefulSite> { + static const bool kHasIsEmptyValueFunction = true; + static bool IsEmptyValue(const blink::BlinkSchemefulSite& value) { + return !value.site_as_origin_; + } + + static bool IsDeletedValue(const blink::BlinkSchemefulSite& value) { + return HashTraits<scoped_refptr<const blink::SecurityOrigin>>:: + IsDeletedValue(value.site_as_origin_); + } + + static void ConstructDeletedValue(blink::BlinkSchemefulSite& slot, + bool zero_value) { + HashTraits<scoped_refptr<const blink::SecurityOrigin>>:: + ConstructDeletedValue(slot.site_as_origin_, zero_value); + } +}; + +} // namespace WTF + #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_NETWORK_BLINK_SCHEMEFUL_SITE_H_
diff --git a/third_party/blink/renderer/platform/network/blink_schemeful_site_test.cc b/third_party/blink/renderer/platform/network/blink_schemeful_site_test.cc index a49ab0e..d694dc6 100644 --- a/third_party/blink/renderer/platform/network/blink_schemeful_site_test.cc +++ b/third_party/blink/renderer/platform/network/blink_schemeful_site_test.cc
@@ -110,4 +110,30 @@ EXPECT_EQ(out, valid_site); } +TEST(BlinkSchemefulSiteTest, HashBlinkSchemefulSite) { + WTF::HashMap<BlinkSchemefulSite, int> blink_schemeful_site_map_; + + BlinkSchemefulSite blink_site_1( + SecurityOrigin::CreateFromString("https://example.com")); + BlinkSchemefulSite blink_site_2( + SecurityOrigin::CreateFromString("https://other.com")); + BlinkSchemefulSite opaque_site_1; + BlinkSchemefulSite opaque_site_2; + + blink_schemeful_site_map_.insert(blink_site_1, 1); + EXPECT_EQ(blink_schemeful_site_map_.size(), 1u); + EXPECT_TRUE(blink_schemeful_site_map_.Contains(blink_site_1)); + EXPECT_EQ(blink_schemeful_site_map_.at(blink_site_1), 1); + + blink_schemeful_site_map_.insert(blink_site_2, 2); + blink_schemeful_site_map_.insert(opaque_site_1, 3); + blink_schemeful_site_map_.insert(opaque_site_2, 4); + EXPECT_EQ(blink_schemeful_site_map_.size(), 4u); + + blink_schemeful_site_map_.erase(blink_site_1); + blink_schemeful_site_map_.erase(opaque_site_1); + EXPECT_FALSE(blink_schemeful_site_map_.Contains(blink_site_1)); + EXPECT_FALSE(blink_schemeful_site_map_.Contains(opaque_site_1)); +} + } // namespace blink
diff --git a/third_party/blink/web_tests/external/wpt/client-hints/meta-name-accept-ch-injection.https.html b/third_party/blink/web_tests/external/wpt/client-hints/meta-name-accept-ch-injection.https.html index 34124f0..0467e30 100644 --- a/third_party/blink/web_tests/external/wpt/client-hints/meta-name-accept-ch-injection.https.html +++ b/third_party/blink/web_tests/external/wpt/client-hints/meta-name-accept-ch-injection.https.html
@@ -13,7 +13,8 @@ // because javascript injected accept-ch meta-name headers are not trusted. document.getElementsByTagName('meta')[0].setAttribute("content", "dpr,sec-ch-dpr,device-memory,sec-ch-device-memory,viewport-width,sec-ch-viewport-width,rtt,downlink,ect"); document.head.outerHTML += '<meta name="Accept-CH" content="sec-ch-ua-arch,sec-ch-ua-platform,sec-ch-ua-model">'; -document.head.innerHTML += '<meta name="Accept-CH" content="sec-ch-ua-full-version,sec-ch-ua-bitness,sec-ch-ua-full-version-list,sec-ch-ua-platform-version,sec-ch-prefers-color-scheme,sec-ch-viewport-height">'; +document.head.innerHTML += '<meta name="Accept-CH" content="sec-ch-ua-full-version,sec-ch-ua-bitness,sec-ch-ua-full-version-list">'; +document.write('<meta name="Accept-CH" content="sec-ch-ua-platform-version,sec-ch-prefers-color-scheme,sec-ch-viewport-height">'); // resources/echo-client-hints-received.py sets the response headers depending on the set // of client hints it receives in the request headers.
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/setting-timeline.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/setting-timeline.tentative.html index a2accee..69b40cb 100644 --- a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/setting-timeline.tentative.html +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/setting-timeline.tentative.html
@@ -201,7 +201,6 @@ 'fixes the currentTime of the animation based on the scroll ' + 'position when resumed'); - promise_test(async t => { const animation = createAnimation(t); const scrollTimeline = createScrollTimeline(t); @@ -296,7 +295,6 @@ assert_percents_equal(animation.currentTime, 20); }, 'Switching from one scroll timeline to another updates currentTime'); - promise_test(async t => { const scrollTimeline = createScrollTimeline(t); await updateScrollPosition(scrollTimeline, 100); @@ -355,5 +353,40 @@ }, 'Switching from a document timeline to a scroll timeline and updating ' + 'startTime preserves the new value when play is called.'); +promise_test(async t => { + const elem = createDiv(t); + const animation = elem.animate(null, Infinity); + await animation.ready; + + animation.timeline = new ScrollTimeline(); + let timing = animation.effect.getComputedTiming(); + assert_percents_equal(timing.endTime, 100); + assert_percents_equal(timing.activeDuration, 100); + assert_percents_equal(timing.duration, 100); + + animation.effect.updateTiming({ iterations: 2 }); + timing = animation.effect.getComputedTiming(); + assert_percents_equal(timing.endTime, 100); + assert_percents_equal(timing.activeDuration, 100); + assert_percents_equal(timing.duration, 50); + + // Blink implementation does not permit setting an infinite number of + // iterations on a scroll-linked animation. Workaround by temporarily + // switching back to a document timeline. + animation.timeline = document.timeline; + animation.effect.updateTiming({ iterations: Infinity }); + animation.timeline = new ScrollTimeline(); + timing = animation.effect.getComputedTiming(); + // Having an infinite number of iterations with a finite timeline results in + // each iteration having zero duration. + assert_percents_equal(timing.duration, 0); + // If either the iteration duration or iteration count is zero, the active + // duration is always zero. + assert_percents_equal(timing.activeDuration, 0); + assert_percents_equal(timing.endTime, 0); + +}, 'Switching from a document timeline to a scroll timeline on an infinite ' + + 'duration animation.') + </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/iframe-scroll.sub.html b/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/iframe-scroll.sub.html new file mode 100644 index 0000000..db959ab --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/iframe-scroll.sub.html
@@ -0,0 +1,65 @@ +<!doctype html> +<title>Text directive in cross-origin iframe doesn't cause scrolling in main document</title> +<meta charset=utf-8> +<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/common/utils.js"></script> +<script src="stash.js"></script> +<style> + iframe { + width: 300px; + height: 300px; + /* Make sure iframe is mostly offscreen but intersects viewport slightly so + * it isn't throttled in any way */ + margin-top: 95vh; + } +</style> + +<iframe></iframe> + +<script> + let iframe_did_scroll = false; + + window.addEventListener('message', (e) => { + if (e.data != 'did_scroll') + throw new Error("Got unexpected message: " + e.data); + if (iframe_did_scroll) + throw new Error("Got multiple messages from single iframe"); + + iframe_did_scroll = true; + }); + + async function wait_for_iframe_scroll(t) { + await t.step_wait(() => iframe_did_scroll == true, "iframe scrolled to text directive", 10000); + iframe_did_scroll = false; + } + + async function rAF() { + return new Promise((resolve) => { + window.requestAnimationFrame(resolve); + }); + } + + onload = () => { + promise_test(async function (t) { + window.scrollTo(0, 0); + + frames[0].location = "http://{{hosts[][www]}}:{{ports[http][0]}}/scroll-to-text-fragment/resources/self-text-directive-iframe.html"; + await wait_for_iframe_scroll(t); + await rAF(); + assert_equals(document.scrollingElement.scrollTop, 0); + }, "CROSS-ORIGIN: Text directive in iframe doesn't bubble to outer frame."); + + promise_test(async function (t) { + window.scrollTo(0, 0); + + frames[0].location = "resources/self-text-directive-iframe.html"; + await wait_for_iframe_scroll(t); + await rAF(); + assert_greater_than(document.scrollingElement.scrollTop, 0); + }, "SAME-ORIGIN: Text directive in iframe bubbles to outer frame."); + } +</script>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/resources/self-text-directive-iframe.html b/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/resources/self-text-directive-iframe.html new file mode 100644 index 0000000..4357369 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/resources/self-text-directive-iframe.html
@@ -0,0 +1,21 @@ +<!doctype html> +<!-- This document navigates itself to a text directive and messages the top window with + the resulting scroll position --> +<style> + p { + margin-top: 2000px; + } +</style> + +<script> + window.onscroll = () => { + window.top.postMessage("did_scroll", "*"); + }; + window.onload = () => { + window.location.hash = ':~:text=Target'; + }; +</script> + +<p> + Target +</p>
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-detached-execution-context-expected.txt b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-detached-execution-context-expected.txt deleted file mode 100644 index ac43c404..0000000 --- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-detached-execution-context-expected.txt +++ /dev/null
@@ -1,10 +0,0 @@ -This is a testharness.js-based test. -PASS # AUDIT TASK RUNNER STARTED. -PASS Executing "decoding-on-detached-iframe" -PASS Audit report -PASS > [decoding-on-detached-iframe] -FAIL X decodeAudioData() upon a detached iframe rejected correctly but got NotAllowedError instead of InvalidStateError. Got Promise. assert_true: expected true got false -FAIL < [decoding-on-detached-iframe] 1 out of 1 assertions were failed. assert_true: expected true got false -FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed. assert_true: expected true got false -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-offlineaudiocontext-interface/offlineaudiocontext-detached-execution-context-expected.txt b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-offlineaudiocontext-interface/offlineaudiocontext-detached-execution-context-expected.txt deleted file mode 100644 index ac43c404..0000000 --- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-offlineaudiocontext-interface/offlineaudiocontext-detached-execution-context-expected.txt +++ /dev/null
@@ -1,10 +0,0 @@ -This is a testharness.js-based test. -PASS # AUDIT TASK RUNNER STARTED. -PASS Executing "decoding-on-detached-iframe" -PASS Audit report -PASS > [decoding-on-detached-iframe] -FAIL X decodeAudioData() upon a detached iframe rejected correctly but got NotAllowedError instead of InvalidStateError. Got Promise. assert_true: expected true got false -FAIL < [decoding-on-detached-iframe] 1 out of 1 assertions were failed. assert_true: expected true got false -FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed. assert_true: expected true got false -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-fenced-frame-src-allowed.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-fenced-frame-src-allowed.html deleted file mode 100644 index d7fe1f4..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-fenced-frame-src-allowed.html +++ /dev/null
@@ -1,19 +0,0 @@ -<!DOCTYPE html> -<meta http-equiv="Content-Security-Policy" content="fenced-frame-src 'self'"> -<title>Test Content-Security-Policy fenced-frame-src</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/utils.js"></script> - -<body> -<script> -const key = KEYS["csp-fenced-frame-src-allowed"]; - -promise_test(async () => { - attachFencedFrame("resources/csp-fenced-frame-src-allowed-inner.html"); - const result = await nextValueFromServer(key); - assert_equals(result, "loaded", - "The fenced frame is loaded as expected"); -}, "csp-fenced-frame-src-allowed"); -</script> -</body> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-fenced-frame-src-blocked.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-fenced-frame-src-blocked.html deleted file mode 100644 index 236acbb3..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-fenced-frame-src-blocked.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<meta http-equiv="Content-Security-Policy" content="fenced-frame-src 'none'"> -<title>Test Content-Security-Policy fenced-frame-src</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources//utils.js"></script> - -<body> -<script> -const key = KEYS["csp-fenced-frame-src-blocked"]; - -window.addEventListener('securitypolicyviolation', function(e) { - // Write to the server even though the listener is in the same file in the - // test below. - writeValueToServer(key, e.violatedDirective + ";" + e.blockedURI); -}); - -promise_test(async () => { - attachFencedFrame("resources/csp-fenced-frame-src-blocked-inner.html"); - const result = await nextValueFromServer(key); - - const expected_blocked_uri = - new URL("resources/csp-fenced-frame-src-blocked-inner.html", location.href).toString(); - assert_equals(result, "fenced-frame-src;" + expected_blocked_uri, - "The fenced frame is blocked because of CSP violation"); -}, "csp-fenced-frame-src-blocked"); -</script> -</body> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-frame-src-allowed.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-frame-src-allowed.html deleted file mode 100644 index f202121..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-frame-src-allowed.html +++ /dev/null
@@ -1,19 +0,0 @@ -<!DOCTYPE html> -<meta http-equiv="Content-Security-Policy" content="frame-src 'self'"> -<title>Test Content-Security-Policy fenced-frame-src falling back to frame-src</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/utils.js"></script> - -<body> -<script> -const key = KEYS["csp-frame-src-allowed"]; - -promise_test(async () => { - attachFencedFrame("resources/csp-frame-src-allowed-inner.html"); - const result = await nextValueFromServer(key); - assert_equals(result, "loaded", - "The fenced frame is loaded as expected"); -}, "csp-frame-src-allowed"); -</script> -</body> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-frame-src-blocked.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-frame-src-blocked.html deleted file mode 100644 index f3afe9a..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/csp-frame-src-blocked.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<meta http-equiv="Content-Security-Policy" content="frame-src 'none'"> -<title>Test Content-Security-Policy fenced-frame-src falling back to frame-src</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources//utils.js"></script> - -<body> -<script> -const key = KEYS["csp-frame-src-blocked"]; - -window.addEventListener('securitypolicyviolation', function(e) { - // Write to the server even though the listener is in the same file in the - // test below. - writeValueToServer(key, e.violatedDirective + ";" + e.blockedURI); -}); - -promise_test(async () => { - attachFencedFrame("resources/csp-frame-src-blocked-inner.html"); - const result = await nextValueFromServer(key); - - const expected_blocked_uri = - new URL("resources/csp-frame-src-blocked-inner.html", location.href).toString(); - assert_equals(result, "fenced-frame-src;" + expected_blocked_uri, - "The fenced frame is blocked because of CSP violation"); -}, "csp-frame-src-blocked"); -</script> -</body> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-allowed-inner.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-allowed-inner.html deleted file mode 100644 index fd765b4..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-allowed-inner.html +++ /dev/null
@@ -1,7 +0,0 @@ -<!DOCTYPE html> -<script src="utils.js"></script> -<title>Page embedded as a fenced frame</title> -<script> - const key = KEYS["csp-fenced-frame-src-allowed"]; - writeValueToServer(key, "loaded"); -</script> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-allowed-inner.html.headers b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-allowed-inner.html.headers deleted file mode 100644 index 6247f6d..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-allowed-inner.html.headers +++ /dev/null
@@ -1 +0,0 @@ -Supports-Loading-Mode: fenced-frame \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-blocked-inner.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-blocked-inner.html deleted file mode 100644 index f6ef312..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-blocked-inner.html +++ /dev/null
@@ -1,10 +0,0 @@ -<!DOCTYPE html> -<script src="utils.js"></script> -<title>Page embedded as a fenced frame</title> -<script> - // This file is expected to be unreachable from - // `csp-fenced-frame-src-blocked.html` in the parent directory because of CSP - // violation. - const key = KEYS["csp-fenced-frame-src-blocked"]; - writeValueToServer(key, "loaded"); -</script> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-blocked-inner.html.headers b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-blocked-inner.html.headers deleted file mode 100644 index 6247f6d..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-fenced-frame-src-blocked-inner.html.headers +++ /dev/null
@@ -1 +0,0 @@ -Supports-Loading-Mode: fenced-frame \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-allowed-inner.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-allowed-inner.html deleted file mode 100644 index 3e3a50b..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-allowed-inner.html +++ /dev/null
@@ -1,7 +0,0 @@ -<!DOCTYPE html> -<script src="utils.js"></script> -<title>Page embedded as a fenced frame</title> -<script> - const key = KEYS["csp-frame-src-allowed"]; - writeValueToServer(key, "loaded"); -</script> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-allowed-inner.html.headers b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-allowed-inner.html.headers deleted file mode 100644 index 6247f6d..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-allowed-inner.html.headers +++ /dev/null
@@ -1 +0,0 @@ -Supports-Loading-Mode: fenced-frame \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-blocked-inner.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-blocked-inner.html deleted file mode 100644 index 0f45d11..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-blocked-inner.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!DOCTYPE html> -<script src="utils.js"></script> -<title>Page embedded as a fenced frame</title> -<script> - // This file is expected to be unreachable from `csp-frame-src-blocked.html` - // in the parent directory because of CSP violation. - const key = KEYS["csp-frame-src-blocked"]; - writeValueToServer(key, "loaded"); -</script> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-blocked-inner.html.headers b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-blocked-inner.html.headers deleted file mode 100644 index 6247f6d..0000000 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/csp-frame-src-blocked-inner.html.headers +++ /dev/null
@@ -1 +0,0 @@ -Supports-Loading-Mode: fenced-frame \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js index 04f0f46..37a446e 100644 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js +++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js
@@ -110,14 +110,8 @@ "cookie_value" : "00000000-0000-0000-0000-00000000004C", - "csp-fenced-frame-src-blocked" : "00000000-0000-0000-0000-00000000004D", - "csp-fenced-frame-src-allowed" : "00000000-0000-0000-0000-00000000004E", - "csp-frame-src-blocked" : "00000000-0000-0000-0000-00000000004F", - "csp-frame-src-allowed" : "00000000-0000-0000-0000-000000000050", - "frame_navigation" : "00000000-0000-0000-0000-000000000051", "frame_navigation ACK" : "00000000-0000-0000-0000-000000000052", - // Add keys above this list, incrementing the key UUID in hexadecimal }
diff --git a/third_party/updater/chromium_mac_amd64/3pp/fetch.py b/third_party/updater/chromium_mac_amd64/3pp/fetch.py index 7cb5f6b..5bca65f 100755 --- a/third_party/updater/chromium_mac_amd64/3pp/fetch.py +++ b/third_party/updater/chromium_mac_amd64/3pp/fetch.py
@@ -10,6 +10,10 @@ import sys import six.moves.urllib.request +# MIN_VERSION is the earliest working version of the updater for self-update +# testing. If a backwards-incompatible change to the updater is made, it may be +# necessary to increase the version. +MIN_VERSION = 958587 def get_platform(): return 'Mac' @@ -71,7 +75,7 @@ 'chromium-browser-snapshots/o/Mac%2FLAST_CHANGE?alt=media').read()) min_datum = latest - 3000 min_datum -= min_datum % 10000 - return find(platform, min_datum, latest) + return max(MIN_VERSION, find(platform, min_datum, latest)) def print_latest():
diff --git a/third_party/updater/chromium_mac_arm64/3pp/fetch.py b/third_party/updater/chromium_mac_arm64/3pp/fetch.py index a65fdc1..ec509d6a 100755 --- a/third_party/updater/chromium_mac_arm64/3pp/fetch.py +++ b/third_party/updater/chromium_mac_arm64/3pp/fetch.py
@@ -10,6 +10,10 @@ import sys import six.moves.urllib.request +# MIN_VERSION is the earliest working version of the updater for self-update +# testing. If a backwards-incompatible change to the updater is made, it may be +# necessary to increase the version. +MIN_VERSION = 958589 def get_platform(): return 'Mac_Arm' @@ -71,7 +75,7 @@ 'chromium-browser-snapshots/o/Mac%2FLAST_CHANGE?alt=media').read()) min_datum = latest - 3000 min_datum -= min_datum % 10000 - return find(platform, min_datum, latest) + return max(MIN_VERSION, find(platform, min_datum, latest)) def print_latest():
diff --git a/tools/binary_size/libsupersize/viewer/upload_html_viewer.py b/tools/binary_size/libsupersize/viewer/upload_html_viewer.py index 6e60a79..a4e29cc7 100755 --- a/tools/binary_size/libsupersize/viewer/upload_html_viewer.py +++ b/tools/binary_size/libsupersize/viewer/upload_html_viewer.py
@@ -6,11 +6,11 @@ import argparse import os -import requests import shutil import subprocess import sys import tempfile +import urllib.request import uuid FIREBASE_PROJECT = 'chrome-supersize' @@ -28,7 +28,7 @@ def _FirebaseLogin(): """Login into the Firebase CLI""" - subprocess.check_call(['firebase', 'login']) + subprocess.check_call(['firebase', 'login', '--no-localhost']) def _CheckFirebaseCLI(): @@ -79,19 +79,20 @@ def _DownloadCaspianFiles(project_static_dir): for f in CASPIAN_FILES: - response = requests.get(PROD_URL + f) - with open(os.path.join(project_static_dir, f), 'wb') as output: - output.write(response.content) + with urllib.request.urlopen(PROD_URL + f) as response: + with open(os.path.join(project_static_dir, f), 'wb') as output: + shutil.copyfileobj(response, output) def _CopyStaticFiles(project_static_dir): """Copy over static files from the static directory.""" - static_files = os.path.join(os.path.dirname(__file__), 'static') + static_files = os.path.normpath( + os.path.join(os.path.dirname(__file__), 'static')) shutil.copytree(static_files, project_static_dir) if not all( os.path.exists(os.path.join(static_files, f)) for f in CASPIAN_FILES): - print('Some caspian files do not exist in ({}). Downloading *all* caspian ' - 'files from currently deployed instance.'.format(static_files)) + print(f'Some wasm files do not exist in ({static_files}). Using copies ' + f'from {PROD_URL} instead.') _DownloadCaspianFiles(project_static_dir) @@ -138,7 +139,8 @@ if options.deploy_mode != PROD or _Prompt(message): _CheckFirebaseCLI() - _FirebaseLogin() + if options.deploy_mode != DEV: + _FirebaseLogin() with tempfile.TemporaryDirectory(prefix='firebase-') as project_dir: static_dir = _FirebaseInitProjectDir(project_dir) _CopyStaticFiles(static_dir)
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 261cbf5a..c827d5a 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -53235,6 +53235,7 @@ <int value="-240531943" label="ContextualSearchRankerQuery:disabled"/> <int value="-239616243" label="HighDynamicRange:enabled"/> <int value="-239176328" label="BluetoothAggressiveAppearanceFilter:enabled"/> + <int value="-238415226" label="GlobalVaapiLock:disabled"/> <int value="-237367320" label="AssistantAudioEraser:disabled"/> <int value="-236433493" label="ArcKeyboardShortcutHelperIntegration:enabled"/> <int value="-235949168" label="DrawPredictedInkPoint:enabled"/> @@ -53893,6 +53894,7 @@ <int value="270038252" label="SignInProfileCreationEnterprise:disabled"/> <int value="270118291" label="SyncAutofillWalletOfferData:disabled"/> <int value="270267831" label="enable-scripts-require-action"/> + <int value="271437172" label="GlobalVaapiLock:enabled"/> <int value="272108480" label="SmbFs:enabled"/> <int value="272631627" label="BookmarkAppsMac:enabled"/> <int value="273489120" label="CrostiniDiskResizing:disabled"/>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml index 5e1fd15..f6c10c1 100644 --- a/tools/metrics/histograms/metadata/cookie/histograms.xml +++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -1064,6 +1064,9 @@ </histogram> <histogram name="Cookie.TimeInitializeDB" units="ms" expires_after="2021-12-26"> + <obsolete> + Removed Jan 2022: no longer needed and expired. + </obsolete> <owner>bingler@chromium.org</owner> <owner>src/net/cookies/OWNERS</owner> <summary>The amount of time (ms) to initialize the cookies database.</summary>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 04c9085..8531103b 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -12695,6 +12695,9 @@ <histogram name="ReportingAndNEL.TimeInitializeDB" units="ms" expires_after="2020-09-09"> + <obsolete> + Removed Jan 2022: no longer needed and expired. + </obsolete> <owner>yhirano@chromium.org</owner> <owner>src/net/reporting/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml index c07b0dd..4301a47 100644 --- a/tools/metrics/histograms/metadata/password/histograms.xml +++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -2398,6 +2398,8 @@ asynchronous job for {Function} has returned. </summary> <token key="Function"> + <variant name="FillMatchingLoginsAsync" + summary="FillMatchingLoginsAsync()"/> <variant name="GetAllLoginsAsync" summary="GetAllLoginsAsync()"/> <variant name="GetAutofillableLoginsAsync" summary="GetAutofillableLoginsAsync()"/>
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml index 4ed0b3f..932ca3e 100644 --- a/tools/metrics/histograms/metadata/sync/histograms.xml +++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -826,7 +826,7 @@ </histogram> <histogram name="Sync.LocalDeviceInfoDeletionReuploaded" enum="Boolean" - expires_after="2022-01-31"> + expires_after="2022-05-31"> <owner>rushans@google.com</owner> <owner>treib@chromium.org</owner> <component>Services>Sync</component> @@ -1860,6 +1860,28 @@ </summary> </histogram> +<histogram name="Sync.TrustedVaultLocalDataDecryptionIsSuccessful" + enum="BooleanSuccess" expires_after="2022-07-03"> + <owner>mmoskvitin@google.com</owner> + <owner>mastiz@chromium.org</owner> + <component>Services>Sync</component> + <summary> + Records whether local data was successfully decrypted upon every attempt to + read local file. + </summary> +</histogram> + +<histogram name="Sync.TrustedVaultLocalDataEncryptionIsSuccessful" + enum="BooleanSuccess" expires_after="2022-07-03"> + <owner>mmoskvitin@google.com</owner> + <owner>mastiz@chromium.org</owner> + <component>Services>Sync</component> + <summary> + Records whether local data was successfully encrypted upon every attempt to + write local file. + </summary> +</histogram> + <histogram name="Sync.TrustedVaultRecoverabilityDegradedFixTrigger" enum="TrustedVaultUserActionTrigger" expires_after="2022-05-01"> <owner>mmoskvitin@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml index 028feaa..491f313 100644 --- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml +++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -1652,6 +1652,9 @@ <histogram name="WebRTC.PeerConnection.KeyProtocolByMedia" enum="PeerConnectionKeyProtocolByMedia" expires_after="2022-01-09"> + <obsolete> + Support removed 2022-01-13 + </obsolete> <owner>hta@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/webapps/histograms.xml b/tools/metrics/histograms/metadata/webapps/histograms.xml index 970f1cc..5aff2d2 100644 --- a/tools/metrics/histograms/metadata/webapps/histograms.xml +++ b/tools/metrics/histograms/metadata/webapps/histograms.xml
@@ -38,7 +38,7 @@ </histogram> <histogram name="AppBanners.DismissEvent" enum="AppBannersDismissEvent" - expires_after="2021-12-05"> + expires_after="2022-05-22"> <owner>pjmclachlan@google.com</owner> <owner>pcovell@google.com</owner> <summary> @@ -100,7 +100,7 @@ </histogram> <histogram name="AppBanners.UserResponse" enum="AppBannersUserResponse" - expires_after="2022-01-16"> + expires_after="2022-05-22"> <owner>dominickn@chromium.org</owner> <owner>pjmclachlan@google.com</owner> <summary> @@ -377,7 +377,7 @@ </histogram> <histogram name="WebApp.InstallConfirmation.CloseReason" - enum="WidgetClosedReason" expires_after="2022-05-01"> + enum="WidgetClosedReason" expires_after="2022-05-22"> <owner>dmurph@chromium.org</owner> <owner>desktop-pwa-team@google.com</owner> <summary> @@ -389,7 +389,7 @@ </histogram> <histogram name="WebApp.InstallIphPromo.Result" enum="WebAppInstallIphResult" - expires_after="2022-05-01"> + expires_after="2022-05-22"> <owner>phillis@chromium.org</owner> <owner>dmurph@chromium.org</owner> <summary> @@ -728,7 +728,7 @@ </histogram> <histogram name="Webapp.UninstallDialogAction" - enum="WebappUninstallDialogAction" expires_after="2022-05-01"> + enum="WebappUninstallDialogAction" expires_after="2022-05-22"> <owner>benwells@chromium.org</owner> <owner>dominickn@chromium.org</owner> <owner>loyso@chromium.org</owner> @@ -813,7 +813,7 @@ </histogram> <histogram name="Webapp.WebAppUrlLoaderPrepareForLoadResult" - enum="WebAppUrlLoaderResult" expires_after="2022-05-15"> + enum="WebAppUrlLoaderResult" expires_after="2022-05-22"> <owner>qjw@chromium.org</owner> <owner>ortuno@chromium.org</owner> <owner>desktop-pwas-team@google.com</owner>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index 392586b..43197c36 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -15681,6 +15681,9 @@ </event> <event name="Previews" singular="True"> + <obsolete> + Obsoleted 01/2022. + </obsolete> <owner>ryansturm@chromium.org</owner> <summary> Previews related metrics associated with a page load. See @@ -15989,6 +15992,9 @@ </event> <event name="PublicImageCompressionDataUse"> + <obsolete> + Obsoleted 01/2022. + </obsolete> <owner>rajendrant@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -16043,6 +16049,9 @@ </event> <event name="PublicImageCompressionImageLoad"> + <obsolete> + Obsoleted Jan 2022. + </obsolete> <owner>rajendrant@chromium.org</owner> <owner>mcrouse@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 ec5fd43..58f9d35 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,24 +5,24 @@ "remote_path": "perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell" }, "win": { - "hash": "c14f8752d1b3b0b943ba077f058b962e1cab199a", - "remote_path": "perfetto_binaries/trace_processor_shell/win/123bcd603d4bbce8eae4622981b390ba98d52bc7/trace_processor_shell.exe" + "hash": "17b45a581b42997eab6fd2e32c5387848f58b334", + "remote_path": "perfetto_binaries/trace_processor_shell/win/d21ed9d314f222f0d931f66742108403580a3ac4/trace_processor_shell.exe" }, "linux_arm": { "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893", "remote_path": "perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell" }, "mac": { - "hash": "94cd62ca80769398f7c434924bdb57910fdfc073", - "remote_path": "perfetto_binaries/trace_processor_shell/mac/123bcd603d4bbce8eae4622981b390ba98d52bc7/trace_processor_shell" + "hash": "5c9cc5c1b097bf3c852f5275e5fc8310528f5ef3", + "remote_path": "perfetto_binaries/trace_processor_shell/mac/d21ed9d314f222f0d931f66742108403580a3ac4/trace_processor_shell" }, "mac_arm64": { "hash": "c0397e87456ad6c6a7aa0133e5b81c97adbab4ab", "remote_path": "perfetto_binaries/trace_processor_shell/mac_arm64/cefb3e0ec3a0580c996f801e854fe02963c03d5c/trace_processor_shell" }, "linux": { - "hash": "26ff45cad5f66068a3d6ca17d9905653f74787c4", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/123bcd603d4bbce8eae4622981b390ba98d52bc7/trace_processor_shell" + "hash": "7be467bbbbcdb26a431f287ee879dbf86cc19942", + "remote_path": "perfetto_binaries/trace_processor_shell/linux/d21ed9d314f222f0d931f66742108403580a3ac4/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index 3c61bca..18dc1ad 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -577,7 +577,6 @@ crbug.com/1211795 [ mac ] v8.browsing_desktop/browse:media:pinterest:2018 [ Skip ] crbug.com/1211795 [ mac ] v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018 [ Skip ] crbug.com/1211795 [ mac ] v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018 [ Skip ] -crbug.com/1277978 [ mac ] v8.browsing_desktop/browse:tools:photoshop:2021 [ Skip ] # Benchmark v8.browsing_desktop-future (keep in sync with v8.browsing_desktop above) crbug.com/788796 [ linux ] v8.browsing_desktop-future/browse:media:imgur [ Skip ] @@ -611,7 +610,6 @@ crbug.com/1211795 [ mac ] v8.browsing_desktop-future/browse:media:pinterest:2018 [ Skip ] crbug.com/1211795 [ mac ] v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018 [ Skip ] crbug.com/1211795 [ mac ] v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018 [ Skip ] -crbug.com/1277978 [ mac ] v8.browsing_desktop-future/browse:tools:photoshop:2021 [ Skip ] # Benchmark: v8.browsing_mobile (keep in sync with v8.browsing_mobile-future below) crbug.com/958034 [ android-go android-webview ] v8.browsing_mobile/* [ Skip ]
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index c909421..1c506e9b 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -47,10 +47,6 @@ <item id="chrome_feedback_report_app" added_in_milestone="62" content_hash_code="04bf864a" os_list="linux,windows,chromeos,android" file_path="components/feedback/feedback_uploader.cc" /> <item id="chrome_variations_service" added_in_milestone="62" content_hash_code="00f59481" os_list="linux,windows,chromeos,android" file_path="components/variations/service/variations_service.cc" /> <item id="client_download_request" added_in_milestone="62" content_hash_code="04bc89c5" os_list="linux,windows,chromeos" file_path="chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc" /> - <item id="cloud_print" added_in_milestone="65" type="completing" content_hash_code="03a1a8bc" os_list="linux,windows" semantics_fields="1,5" policy_fields="-1,3,4" file_path="chrome/service/cloud_print/cloud_print_url_fetcher.cc" /> - <item id="cloud_print_backend" added_in_milestone="62" type="partial" second_id="cloud_print" content_hash_code="05177cb5" os_list="linux,windows" semantics_fields="2,3,4" file_path="chrome/service/cloud_print/cloud_print_proxy_backend.cc" /> - <item id="cloud_print_credential_update" added_in_milestone="66" content_hash_code="001200a0" os_list="linux,windows" file_path="chrome/service/cloud_print/cloud_print_proxy_backend.cc" /> - <item id="cloud_print_proxy" added_in_milestone="62" type="partial" second_id="cloud_print" content_hash_code="056a8973" os_list="linux,windows" semantics_fields="2,3,4" file_path="chrome/service/cloud_print/cloud_print_proxy.cc" /> <item id="content_hash_verification_job" added_in_milestone="62" content_hash_code="079fc9db" os_list="linux,windows,chromeos" file_path="extensions/browser/content_hash_fetcher.cc" /> <item id="content_suggestion_get_favicon" added_in_milestone="62" content_hash_code="0800f6e5" os_list="linux,windows,chromeos,android" file_path="components/ntp_snippets/content_suggestions_service.cc" /> <item id="conversion_measurement_report" added_in_milestone="84" content_hash_code="06161a36" os_list="linux,windows,chromeos,android" file_path="content/browser/attribution_reporting/attribution_network_sender_impl.cc" /> @@ -145,7 +141,7 @@ <item id="mirroring_get_setup_info" added_in_milestone="68" content_hash_code="03dd5ef2" os_list="windows,linux,chromeos,android" file_path="components/mirroring/service/receiver_setup_querier.cc" /> <item id="missing" added_in_milestone="62" reserved="1" os_list="linux,windows" file_path="" /> <item id="navigation_predictor_srp_prefetch" added_in_milestone="81" content_hash_code="025036ba" os_list="linux,windows,chromeos,android" file_path="chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc" /> - <item id="navigation_url_loader" added_in_milestone="62" content_hash_code="07b5c4cb" os_list="linux,windows,chromeos,android" file_path="content/browser/loader/navigation_url_loader_impl.cc" /> + <item id="navigation_url_loader" added_in_milestone="62" content_hash_code="060edd12" os_list="linux,windows,chromeos,android" file_path="content/browser/loader/navigation_url_loader_impl.cc" /> <item id="network_location_provider" added_in_milestone="64" type="partial" second_id="network_location_request" content_hash_code="0272f3e8" os_list="linux,windows,chromeos" semantics_fields="1" policy_fields="3,4" file_path="services/device/geolocation/network_location_provider.cc" /> <item id="network_location_request" added_in_milestone="65" type="completing" content_hash_code="04d00293" os_list="linux,windows,chromeos,android" semantics_fields="2,3,4,5" policy_fields="-1" file_path="services/device/geolocation/network_location_request.cc" /> <item id="network_time_component" added_in_milestone="62" content_hash_code="01ac0991" os_list="linux,windows,chromeos,android" file_path="components/network_time/network_time_tracker.cc" /> @@ -186,11 +182,10 @@ <item id="popular_sites_fetch" added_in_milestone="62" content_hash_code="00697083" os_list="linux,windows,chromeos,android" file_path="components/ntp_tiles/popular_sites_impl.cc" /> <item id="port_forwarding_controller_socket" added_in_milestone="65" content_hash_code="074810e4" os_list="linux,windows,chromeos" file_path="chrome/browser/devtools/device/port_forwarding_controller.cc" /> <item id="ppapi_download_request" added_in_milestone="62" content_hash_code="07d4e067" os_list="linux,windows,chromeos" file_path="chrome/browser/safe_browsing/download_protection/ppapi_download_request.cc" /> - <item id="predictive_prefetch" added_in_milestone="85" content_hash_code="01acbb76" os_list="linux,windows,chromeos,android" file_path="chrome/browser/predictors/prefetch_manager.cc" /> + <item id="predictive_prefetch" added_in_milestone="85" content_hash_code="00ebd1fd" os_list="linux,windows,chromeos,android" file_path="chrome/browser/predictors/prefetch_manager.cc" /> <item id="prefetch_download" added_in_milestone="62" content_hash_code="0146e99e" os_list="linux,windows,chromeos,android" file_path="components/offline_pages/core/prefetch/prefetch_downloader_impl.cc" /> <item id="prefetch_proxy_probe" added_in_milestone="88" content_hash_code="001d245d" os_list="linux,windows,chromeos,android" file_path="chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc" /> <item id="prefetch_visuals" added_in_milestone="75" content_hash_code="0564010a" os_list="linux,windows,chromeos,android" file_path="components/offline_pages/core/prefetch/visuals_fetch_by_url.cc" /> - <item id="printer_job_handler" added_in_milestone="62" type="partial" second_id="cloud_print" content_hash_code="048348b5" os_list="linux,windows" semantics_fields="2,3,4" file_path="chrome/service/cloud_print/printer_job_handler.cc" /> <item id="profile_avatar" added_in_milestone="62" content_hash_code="06c4a5fd" os_list="linux,windows,chromeos,android" file_path="chrome/browser/profiles/profile_avatar_downloader.cc" /> <item id="profile_resetter_upload" added_in_milestone="62" content_hash_code="07b56813" os_list="linux,windows,chromeos" file_path="chrome/browser/profile_resetter/reset_report_uploader.cc" /> <item id="promo_service" added_in_milestone="72" content_hash_code="01f69c19" os_list="linux,windows,chromeos" file_path="chrome/browser/new_tab_page/promos/promo_service.cc" /> @@ -237,7 +232,7 @@ <item id="sct_auditing" added_in_milestone="87" content_hash_code="0298c98f" os_list="linux,windows,chromeos,android" file_path="chrome/browser/ssl/sct_reporting_service.cc" /> <item id="search_prefetch_service" added_in_milestone="88" content_hash_code="077746c6" os_list="windows,linux,chromeos,android" file_path="chrome/browser/prefetch/search_prefetch/base_search_prefetch_request.cc" /> <item id="security_key_socket" added_in_milestone="66" content_hash_code="00d1acb0" os_list="linux,windows,chromeos" file_path="remoting/host/security_key/security_key_socket.cc" /> - <item id="service_worker_navigation_preload" added_in_milestone="63" content_hash_code="04bcaa60" os_list="linux,windows,chromeos,android" file_path="content/browser/service_worker/service_worker_fetch_dispatcher.cc" /> + <item id="service_worker_navigation_preload" added_in_milestone="63" content_hash_code="0675faf7" os_list="linux,windows,chromeos,android" file_path="content/browser/service_worker/service_worker_fetch_dispatcher.cc" /> <item id="service_worker_script_load" added_in_milestone="90" content_hash_code="035ab34f" os_list="linux,windows,chromeos,android" file_path="content/browser/service_worker/service_worker_new_script_fetcher.cc" /> <item id="service_worker_update_checker" added_in_milestone="71" content_hash_code="01ef068e" os_list="linux,windows,chromeos,android" file_path="content/browser/service_worker/service_worker_single_script_update_checker.cc" /> <item id="services_http_server_error_response" added_in_milestone="68" content_hash_code="079dad59" os_list="linux,windows,chromeos,android" file_path="services/network/public/cpp/server/http_server.cc" /> @@ -292,7 +287,7 @@ <item id="webui_content_scripts_download" added_in_milestone="62" content_hash_code="07257fcb" os_list="linux,windows,chromeos" file_path="extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc" /> <item id="well_known_path_that_should_not_exist" added_in_milestone="86" content_hash_code="03552acf" os_list="linux,windows,chromeos,android" file_path="components/password_manager/core/browser/well_known_change_password_state.cc" /> <item id="whats_new_handler" added_in_milestone="94" content_hash_code="05a798ff" os_list="linux,windows,chromeos" file_path="chrome/browser/ui/webui/whats_new/whats_new_util.cc" /> - <item id="worker_script_load" added_in_milestone="72" content_hash_code="017bc751" os_list="linux,windows,chromeos,android" file_path="content/browser/worker_host/worker_script_fetcher.cc" /> + <item id="worker_script_load" added_in_milestone="72" content_hash_code="042a87a3" os_list="linux,windows,chromeos,android" file_path="content/browser/worker_host/worker_script_fetcher.cc" /> <item id="tailored_security_service" added_in_milestone="97" content_hash_code="021a7daf" os_list="linux,windows,chromeos,android" file_path="components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.cc" /> <item id="managed_acccount_signin_restrictions_secure_connect" added_in_milestone="97" content_hash_code="0119d88f" os_list="linux,windows,chromeos,android" file_path="components/policy/core/browser/signin/user_cloud_signin_restriction_policy_fetcher.cc" /> <item id="ambient_photo_cache" added_in_milestone="98" content_hash_code="07dbf21e" os_list="chromeos" file_path="ash/ambient/ambient_photo_cache.cc" />
diff --git a/tools/traffic_annotation/summary/grouping.xml b/tools/traffic_annotation/summary/grouping.xml index 8f924d77..36930c87 100644 --- a/tools/traffic_annotation/summary/grouping.xml +++ b/tools/traffic_annotation/summary/grouping.xml
@@ -366,14 +366,6 @@ <traffic_annotation unique_id="network_time_component"/> </sender> </group> - <group name="Printing"> - <sender name="Cloud Print"> - <traffic_annotation unique_id="cloud_print_backend"/> - <traffic_annotation unique_id="cloud_print_credential_update"/> - <traffic_annotation unique_id="cloud_print_proxy"/> - <traffic_annotation unique_id="printer_job_handler"/> - </sender> - </group> <group name="Search"> <sender name="Web History"> <traffic_annotation unique_id="web_history_counter"/>
diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_strings_te.xtb b/ui/accessibility/extensions/strings/accessibility_extensions_strings_te.xtb index 6ce3037..ebfbfc83 100644 --- a/ui/accessibility/extensions/strings/accessibility_extensions_strings_te.xtb +++ b/ui/accessibility/extensions/strings/accessibility_extensions_strings_te.xtb
@@ -58,7 +58,7 @@ <translation id="7384431257964758081">అధిక కాంట్రాస్ట్ ప్రారంభించబడింది</translation> <translation id="7586636300921797327">దశ 2: ఎంచుకున్న అడ్డు వరుసలో అన్ని నక్షత్రాలు కనిపించే విధంగా స్లయిడర్ను సర్దుబాటు చేయండి</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="786423340267544509">aria-describedat లేదా longdesc ఫీచర్లు ఉన్న మూలకాలకు హద్దును జోడించు.</translation> <translation id="7942349550061667556">ఎరుపు</translation> <translation id="8260673944985561857">కేరెట్ బ్రౌజింగ్ ఎంపికలు</translation>
diff --git a/ui/base/ime/win/input_method_win_base.cc b/ui/base/ime/win/input_method_win_base.cc index 102350a..15bc17e 100644 --- a/ui/base/ime/win/input_method_win_base.cc +++ b/ui/base/ime/win/input_method_win_base.cc
@@ -263,9 +263,12 @@ // discussed at crbug.com/287620. This approach works if and only if // |attached_window_handle_| is a top-level window, which is assumed to be // true for Chromium-based browser products at least. + // We need to relax this condition by checking |GetFocus()| so this works fine + // for embedded Chromium windows. // TODO(crbug/1286880): Check if this can be replaced with |GetFocus()|. return attached_window_handle_ && - GetActiveWindow() == attached_window_handle_; + (GetActiveWindow() == attached_window_handle_ || + GetFocus() == attached_window_handle_); } LRESULT InputMethodWinBase::OnChar(HWND window_handle,
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb index 6ea7553..28de3d7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -502,7 +502,7 @@ <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5299998344490869684">మీరు ఖచ్చితంగా ట్రాష్ USBను ఖాళీ చేయాలనుకుంటున్నారా?</translation> <translation id="5305688511332277257">ఏవి వ్యవస్థాపించబడలేదు</translation> -<translation id="5317780077021120954">సేవ్ చేయి</translation> +<translation id="5317780077021120954">సేవ్ చేయండి</translation> <translation id="5318819489018851358">Linuxతో షేర్ చేయి</translation> <translation id="5323213332664049067">లాటిన్ అమెరికన్</translation> <translation id="5330145655348521461">ఈ ఫైల్స్ వేరే డెస్క్టాప్లో తెరవబడ్డాయి. దీన్ని వీక్షించడానికి <ph name="USER_NAME" /> (<ph name="MAIL_ADDRESS" />)కు తరలించండి.</translation> @@ -758,7 +758,7 @@ <translation id="7649070708921625228">సహాయం</translation> <translation id="7654209398114106148"><ph name="NUMBER_OF_ITEMS" /> అంశాలను తరలిస్తోంది...</translation> <translation id="7655441028674523381">Google Photosను సులభంగా యాక్సెస్ చేయండి</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7663224033570512922">హిందీ</translation> <translation id="7693909743393669729">డ్రైవ్ను ఫార్మాట్ చేయడం వలన దానిలో స్టోర్ చేసిన మొత్తం డేటా తొలగించబడుతుంది, కనపడకుండా ఉండే కొన్ని విభజనలతో సహా విభజనలు అన్నీ తీసివేయబడతాయి. ఈ చర్యను రద్దు చేయలేరు.</translation> <translation id="7695430100978772476"><ph name="DRIVE_NAME" />ను ఫార్మాట్ చేయడం సాధ్యపడలేదు</translation>
diff --git a/ui/strings/translations/ui_strings_te.xtb b/ui/strings/translations/ui_strings_te.xtb index 049b833..9670fd2 100644 --- a/ui/strings/translations/ui_strings_te.xtb +++ b/ui/strings/translations/ui_strings_te.xtb
@@ -172,7 +172,7 @@ <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation> <translation id="7507604095951736240">ఎమోజి</translation> <translation id="7620655452534002301">తీసివేయబడింది.</translation> -<translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7658239707568436148">రద్దు చేయండి</translation> <translation id="7781829728241885113">నిన్న</translation> <translation id="7814458197256864873">&కాపీ</translation> <translation id="7879499977785298635">బ్లాక్ చేయవద్దు</translation>