diff --git a/DEPS b/DEPS index 8a8a1ef..3670c24 100644 --- a/DEPS +++ b/DEPS
@@ -175,11 +175,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': 'ecd82d832f4f7f1601af5bafd49777c6d930f732', + 'skia_revision': '4f17b60208fa022309ecce72b99bacf942f5ca09', # 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': '984c85e73d1ff13077a179d2d79316d515cff567', + 'v8_revision': 'e5287caf07e74f7fdffdc886384b9638e2bad673', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -187,7 +187,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': 'ee7525af471223f96108c8c38b0202561d4ce8b2', + 'angle_revision': '32457326e05294f7bce458d4e239aff85c9f3d00', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -195,7 +195,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': 'b8b3f5ffc0ea33f06402e03145f26ed6d581b552', + 'pdfium_revision': 'e6e9fec904b871b94d1b58690e0917dc3153b7e8', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -238,7 +238,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '0780cae6bf8dac024f8101a2b691fcb7cd205652', + 'catapult_revision': '297fffa4987be3a1dd6524ffd730d4acc2c1f18f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -302,7 +302,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': '5b7292c8f8e2f979041e1b1aaf8ebd9e64086e28', + 'dawn_revision': '8c8d16a1c53f4a0cf4c03a339f1224966676aed0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -881,7 +881,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '4f3aff5fc2f69ae449ceaa7d772d4d4a3de4e2c0', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'a01816b0bae90d983e18bcd54893e5f0cb4c4aab', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1218,7 +1218,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '6f26bce0b1c4e8ce0e13332f7c0083788def5fdf', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + '6812621f27e9f64d7cee47a733a2ddaaa4800f4f', + Var('chromium_git') + '/openscreen' + '@' + '39fd800d2c43c15bf856901a59dad78ab10a5cb9', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '9e97b73e7dd2bfc07745489d728f6a36665c648f', @@ -1465,7 +1465,7 @@ }, 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'adc4da30f420b1f50815ef3890bb4c95fb867d35', + Var('webrtc_git') + '/src.git' + '@' + '0574822f9f69e4083e0070c1b137a1d9a2369421', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1540,7 +1540,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@04ab397e8e8a731fa6b948d16c65eb310d34c3aa', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6bed80858d3b8f8ced39c4165194dad0251ce700', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/docs/device-setup.md b/android_webview/docs/device-setup.md index f280953a..4b03bfa 100644 --- a/android_webview/docs/device-setup.md +++ b/android_webview/docs/device-setup.md
@@ -42,13 +42,16 @@ ## Physical device -### Flash a prebuilt image (Googler only) +### Flash a prebuilt image Googlers can consult internal instructions [here](http://go/clank-webview/building-webview/device-setup). -Unfortunately, Google does not offer prebuilt `userdebug`/`eng` images for -external contributors. +External contributors can flash a prebuilt userdebug image (based off +aosp-master) onto a Pixel device with [Android Flash +Tool](https://flash.android.com/welcome?continue=%2Fcustom). This requires a +browser capable of WebUSB (we recommend the latest Google Chrome stable +release). ### Building AOSP yourself (hard way)
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java index ec9d08b..980ea8f 100644 --- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java
@@ -156,8 +156,11 @@ @Override public boolean onCreateOptionsMenu(Menu menu) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - getMenuInflater().inflate(R.menu.options_menu, menu); + getMenuInflater().inflate(R.menu.options_menu, menu); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + // Switching WebView providers is only possible for API >= 24. + MenuItem item = menu.findItem(R.id.options_menu_switch_provider); + item.setVisible(false); } return true; }
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index e23650f..e8a5e4b 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -738,10 +738,16 @@ "system/accessibility/floating_menu_button.h", "system/accessibility/select_to_speak_tray.cc", "system/accessibility/select_to_speak_tray.h", + "system/accessibility/switch_access_back_button_bubble_controller.cc", + "system/accessibility/switch_access_back_button_bubble_controller.h", "system/accessibility/switch_access_back_button_view.cc", "system/accessibility/switch_access_back_button_view.h", - "system/accessibility/switch_access_bubble_controller.cc", - "system/accessibility/switch_access_bubble_controller.h", + "system/accessibility/switch_access_menu_bubble_controller.cc", + "system/accessibility/switch_access_menu_bubble_controller.h", + "system/accessibility/switch_access_menu_button.cc", + "system/accessibility/switch_access_menu_button.h", + "system/accessibility/switch_access_menu_view.cc", + "system/accessibility/switch_access_menu_view.h", "system/accessibility/tray_accessibility.cc", "system/accessibility/tray_accessibility.h", "system/accessibility/unified_accessibility_detailed_view_controller.cc", @@ -1956,7 +1962,7 @@ "system/accessibility/autoclick_menu_bubble_controller_unittest.cc", "system/accessibility/dictation_button_tray_unittest.cc", "system/accessibility/select_to_speak_tray_unittest.cc", - "system/accessibility/switch_access_bubble_controller_unittest.cc", + "system/accessibility/switch_access_menu_bubble_controller_unittest.cc", "system/accessibility/tray_accessibility_unittest.cc", "system/bluetooth/bluetooth_notification_controller_unittest.cc", "system/bluetooth/bluetooth_power_controller_unittest.cc",
diff --git a/ash/accessibility/accessibility_controller_impl.cc b/ash/accessibility/accessibility_controller_impl.cc index ec973c1..d20924a 100644 --- a/ash/accessibility/accessibility_controller_impl.cc +++ b/ash/accessibility/accessibility_controller_impl.cc
@@ -32,7 +32,7 @@ #include "ash/sticky_keys/sticky_keys_controller.h" #include "ash/strings/grit/ash_strings.h" #include "ash/system/accessibility/accessibility_feature_disable_dialog.h" -#include "ash/system/accessibility/switch_access_bubble_controller.h" +#include "ash/system/accessibility/switch_access_menu_bubble_controller.h" #include "ash/system/power/backlights_forced_off_setter.h" #include "ash/system/power/power_status.h" #include "ash/system/power/scoped_backlights_forced_off.h" @@ -1841,7 +1841,7 @@ return; } else { switch_access_bubble_controller_ = - std::make_unique<SwitchAccessBubbleController>(); + std::make_unique<SwitchAccessMenuBubbleController>(); MaybeCreateSwitchAccessEventHandler(); ShowAccessibilityNotification( A11yNotificationType::kSwitchAccessEnabled);
diff --git a/ash/accessibility/accessibility_controller_impl.h b/ash/accessibility/accessibility_controller_impl.h index ea32f6c..9e3c17f 100644 --- a/ash/accessibility/accessibility_controller_impl.h +++ b/ash/accessibility/accessibility_controller_impl.h
@@ -38,7 +38,7 @@ class AccessibilityObserver; class ScopedBacklightsForcedOff; class SelectToSpeakEventHandler; -class SwitchAccessBubbleController; +class SwitchAccessMenuBubbleController; class SwitchAccessEventHandler; enum AccessibilityNotificationVisibility { @@ -385,7 +385,7 @@ // Test helpers: SwitchAccessEventHandler* GetSwitchAccessEventHandlerForTest(); - SwitchAccessBubbleController* GetSwitchAccessBubbleControllerForTest() { + SwitchAccessMenuBubbleController* GetSwitchAccessBubbleControllerForTest() { return switch_access_bubble_controller_.get(); } void no_switch_access_disable_confirmation_dialog_for_testing( @@ -450,7 +450,7 @@ // List of key codes that Switch Access should capture. std::vector<int> switch_access_keys_to_capture_; - std::unique_ptr<SwitchAccessBubbleController> + std::unique_ptr<SwitchAccessMenuBubbleController> switch_access_bubble_controller_; std::unique_ptr<SwitchAccessEventHandler> switch_access_event_handler_; SwitchAccessEventHandlerDelegate* switch_access_event_handler_delegate_ =
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd index 8b8648c..609750a 100644 --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd
@@ -679,6 +679,15 @@ <message name="IDS_ASH_SWITCH_ACCESS_BACK_BUTTON_DESCRIPTION" desc="The tooltip text for the Switch Access back button. The back button allows users to exit the feature's current focus area."> Back button </message> + <message name="IDS_ASH_SWITCH_ACCESS_SCROLL_DOWN" desc="The label for the Switch Access menu option to scroll the selected view down."> + Scroll Down + </message> + <message name="IDS_ASH_SWITCH_ACCESS_SELECT" desc="The label for the Switch Access menu option to select the focused element."> + Select + </message> + <message name="IDS_ASH_SWITCH_ACCESS_SETTINGS" desc="The label for the Switch Access menu option to open the settings page."> + Settings + </message> <message name="IDS_ASH_STATUS_TRAY_ACCESSIBILITY_VIRTUAL_KEYBOARD" desc="The label used in the accessibility menu of the system tray to toggle on/off the onscreen keyboard."> On-screen keyboard </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SCROLL_DOWN.png.sha1 b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SCROLL_DOWN.png.sha1 new file mode 100644 index 0000000..1f1207c --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SCROLL_DOWN.png.sha1
@@ -0,0 +1 @@ +2b47402c230e3dfdd70ffdb6545e212aa3421f9d \ No newline at end of file
diff --git a/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SELECT.png.sha1 b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SELECT.png.sha1 new file mode 100644 index 0000000..1f1207c --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SELECT.png.sha1
@@ -0,0 +1 @@ +2b47402c230e3dfdd70ffdb6545e212aa3421f9d \ No newline at end of file
diff --git a/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SETTINGS.png.sha1 b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SETTINGS.png.sha1 new file mode 100644 index 0000000..1f1207c --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_SETTINGS.png.sha1
@@ -0,0 +1 @@ +2b47402c230e3dfdd70ffdb6545e212aa3421f9d \ No newline at end of file
diff --git a/ash/resources/vector_icons/BUILD.gn b/ash/resources/vector_icons/BUILD.gn index f11a149d..ef9cd16b 100644 --- a/ash/resources/vector_icons/BUILD.gn +++ b/ash/resources/vector_icons/BUILD.gn
@@ -147,6 +147,9 @@ "shelf_unlock_button.icon", "switch_access.icon", "switch_access_back.icon", + "switch_access_scroll_down.icon", + "switch_access_select.icon", + "switch_access_settings.icon", "system_menu_accessibility.icon", "system_menu_accessibility_auto_click.icon", "system_menu_accessibility_chromevox.icon",
diff --git a/ash/resources/vector_icons/switch_access_scroll_down.icon b/ash/resources/vector_icons/switch_access_scroll_down.icon new file mode 100644 index 0000000..d10dcdf --- /dev/null +++ b/ash/resources/vector_icons/switch_access_scroll_down.icon
@@ -0,0 +1,20 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 20, +MOVE_TO, 11, 9.71f, +R_LINE_TO, 1.87f, -1.95f, +LINE_TO, 14, 8.91f, +LINE_TO, 10, 13, +LINE_TO, 6, 8.91f, +R_LINE_TO, 1.13f, -1.15f, +LINE_TO, 9, 9.63f, +V_LINE_TO, 3, +R_H_LINE_TO, 2, +CLOSE, +MOVE_TO, 14, 17, +H_LINE_TO, 6, +R_V_LINE_TO, -2, +R_H_LINE_TO, 8, +CLOSE
diff --git a/ash/resources/vector_icons/switch_access_select.icon b/ash/resources/vector_icons/switch_access_select.icon new file mode 100644 index 0000000..4f2e9a7 --- /dev/null +++ b/ash/resources/vector_icons/switch_access_select.icon
@@ -0,0 +1,65 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 20, +MOVE_TO, 3, 3, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +H_LINE_TO, 3, +CLOSE, +R_MOVE_TO, 0, 4, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +H_LINE_TO, 3, +CLOSE, +R_MOVE_TO, 0, 4, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +H_LINE_TO, 3, +CLOSE, +R_MOVE_TO, 0, 4, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +H_LINE_TO, 3, +CLOSE, +R_MOVE_TO, 4, 0, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +H_LINE_TO, 7, +CLOSE, +R_MOVE_TO, 4, 0, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +R_H_LINE_TO, -2, +CLOSE, +R_MOVE_TO, 4, 0, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +R_H_LINE_TO, -2, +CLOSE, +R_MOVE_TO, 0, -4, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +R_H_LINE_TO, -2, +CLOSE, +R_MOVE_TO, 0, -4, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +R_H_LINE_TO, -2, +CLOSE, +R_MOVE_TO, 0, -4, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +R_H_LINE_TO, -2, +CLOSE, +R_MOVE_TO, -4, 0, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +R_H_LINE_TO, -2, +CLOSE, +MOVE_TO, 7, 3, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +H_LINE_TO, 7, +CLOSE
diff --git a/ash/resources/vector_icons/switch_access_settings.icon b/ash/resources/vector_icons/switch_access_settings.icon new file mode 100644 index 0000000..b03f6ea --- /dev/null +++ b/ash/resources/vector_icons/switch_access_settings.icon
@@ -0,0 +1,17 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 20, +MOVE_TO, 10, 14, +R_ARC_TO, 2, 2, 0, 1, 1, 0, 4, +ARC_TO, 2, 2, 0, 0, 1, 10, 14, +CLOSE, +R_MOVE_TO, 0, -2, +R_ARC_TO, 2, 2, 0, 1, 1, 0, -4, +ARC_TO, 2, 2, 0, 0, 1, 10, 12, +CLOSE, +R_MOVE_TO, 0, -6, +R_ARC_TO, 2, 2, 0, 1, 1, 0, -4, +ARC_TO, 2, 2, 0, 0, 1, 10, 6, +CLOSE
diff --git a/ash/shortcut_viewer/strings/ash_components_strings_ne.xtb b/ash/shortcut_viewer/strings/ash_components_strings_ne.xtb index 6bbdc97..95bc193 100644 --- a/ash/shortcut_viewer/strings/ash_components_strings_ne.xtb +++ b/ash/shortcut_viewer/strings/ash_components_strings_ne.xtb
@@ -59,7 +59,7 @@ <translation id="2840766858109427815">अर्को पृष्ठमा जानुहोस्</translation> <translation id="2872353916818027657">प्राथमिक मनिटर बदल्नुहोस्</translation> <translation id="2914313326123580426">विकासकर्ताका उपकरणहरू नामक प्यानल देखाउनुहोस् वा लुकाउनुहोस्</translation> -<translation id="292495055542441795">पूर्ण स्क्रिन टगल गर्नुहोस्</translation> +<translation id="292495055542441795">फुल स्क्रिन टगल गर्नुहोस्</translation> <translation id="3020183492814296499">सर्टकटहरू</translation> <translation id="3084301071537457911">आफ्नो सेल्फमा भएको अर्को वस्तुलाई हाइलाइट गर्नुहोस्</translation> <translation id="309173601632226815">आफ्नो सेल्फमा भएको लन्चर बटनलाई हाइलाइट गर्नुहोस्</translation> @@ -197,7 +197,7 @@ <translation id="8644639153978066712">लुकाइएका फाइलहरूलाई फाइल अनुप्रयोगमा देखाउनुहोस्</translation> <translation id="8717459106217102612">अघिल्लो शब्द वा अक्षर चयन गर्नुहोस्</translation> <translation id="8727232706774971183">आफ्ना सूचनाहरू हेर्नुहोस्</translation> -<translation id="8855885154700222542">पूर्ण स्क्रिन नामक कुञ्जी</translation> +<translation id="8855885154700222542">फुल स्क्रिन नामक कुञ्जी</translation> <translation id="8881584919399569791">सक्रिय विन्डो बायाँपट्टीको डेस्कमा सार्नुहोस्</translation> <translation id="88986195241502842">पृष्ठ तल</translation> <translation id="8924883688469390268">अघिल्लो प्रयोगकर्तामा बदल्नुहोस्</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 27a1cee..2eb69b0 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -30,7 +30,7 @@ <translation id="1289185460362160437">يمكنك العودة يوم <ph name="COME_BACK_DAY_OF_WEEK" /> في <ph name="COME_BACK_TIME" />.</translation> <translation id="1290331692326790741">إشارة ضعيفة</translation> <translation id="1293264513303784526">جهاز USB-C (المنفذ الأيسر)</translation> -<translation id="1294929383540927798">تغيير إعدادات الإشعارات لشاشة التأمين</translation> +<translation id="1294929383540927798">تغيير إعدادات الإشعارات لشاشة القفل</translation> <translation id="1301069673413256657">بروتوكول GSM</translation> <translation id="1302880136325416935">عرض إعدادات البلوتوث. <ph name="STATE_TEXT" /></translation> <translation id="1312604459020188865">قوة الإشارة <ph name="SIGNAL_STRENGTH" /></translation> @@ -55,7 +55,7 @@ <translation id="1550523713251050646">انقر للحصول على المزيد من الخيارات</translation> <translation id="1570871743947603115">تبديل البلوتوث. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">الوصول إلى جميع أنشطتك في جلسة واحدة</translation> -<translation id="1632985212731562677">يمكن إيقاف ميزة "الوصول عبر مفتاح التحويل" في "الإعدادات" > "إمكانية الوصول".</translation> +<translation id="1632985212731562677">يمكن إيقاف ميزة "الوصول عبر مفتاح التحويل" في "الإعدادات" > "أدوات تمكين الوصول".</translation> <translation id="1654477262762802994">بدء طلب بحث صوتي</translation> <translation id="1658406695958299976">عذرًا، لا يمكن التحقق من كلمة المرور حتى الآن. ملاحظة: في حال تغيير كلمة المرور مؤخرًا، سيتم تطبيق كلمة المرور الجديدة بعد تسجيل الخروج، يُرجى استخدام كلمة المرور القديمة هنا.</translation> <translation id="1677472565718498478">الوقت المتبقي <ph name="TIME" /></translation> @@ -254,7 +254,7 @@ <translation id="4065525899979931964">{NUM_APPS,plural, =1{الإشعارات متوقفة لتطبيق واحد}zero{الإشعارات متوقفة لـ # تطبيق}two{الإشعارات متوقفة لتطبيقَين (#)}few{الإشعارات متوقفة لـ # تطبيقات}many{الإشعارات متوقفة لـ # تطبيقًا}other{الإشعارات متوقفة لـ # تطبيق}}</translation> <translation id="4072264167173457037">إشارة متوسطة</translation> <translation id="4112140312785995938">الانتقال إلى الخلف</translation> -<translation id="4129129681837227511">للاطِّلاع على الإشعارات على شاشة التأمين، يمكنك فتح القفل لتغيير الإعداد</translation> +<translation id="4129129681837227511">للاطِّلاع على الإشعارات على شاشة القفل، يمكنك فتح القفل لتغيير الإعداد</translation> <translation id="4144413954005649103">يمكنك النقر بزر الماوس الأيمن أو الضغط مع الاستمرار حتّى يعرض "مساعد Google" معلومات ذات صلة بالعنصر الذي تختاره على الشاشة.</translation> <translation id="4146833061457621061">تشغيل الموسيقى</translation> <translation id="4149156641122542261">إدارة جهاز <ph name="DEVICE_TYPE" /> عن طريق <ph name="DOMAIN" /></translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 04a280a..f412a16 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -413,6 +413,7 @@ <translation id="6267036997247669271"><ph name="NAME" />: সক্রিয় করা হচ্ছে...</translation> <translation id="6283712521836204486">'বিরক্ত করবে না' মোড বন্ধ আছে</translation> <translation id="6284232397434400372">রেজোলিউশন পরিবর্তন করা হয়েছে</translation> +<translation id="6288235558961782912">পরে অভিভাবকের অনুমতি সহ <ph name="USER_EMAIL_ADDRESS" /> আবার যোগ করা যেতে পারে।</translation> <translation id="6297287540776456956">একটি অঞ্চল নির্বাচন করতে স্টাইলাস ব্যবহার করুন</translation> <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" /> আবর্তিত হয়েছে</translation> <translation id="6376931439017688372">ব্লুটুথ চালু আছে</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index d738259..e327a06 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -412,6 +412,7 @@ <translation id="6267036997247669271"><ph name="NAME" />: מפעיל...</translation> <translation id="6283712521836204486">מצב 'נא לא להפריע' מושבת.</translation> <translation id="6284232397434400372">הרזולוציה השתנתה</translation> +<translation id="6288235558961782912">ניתן יהיה להוסיף את <ph name="USER_EMAIL_ADDRESS" /> מחדש מאוחר יותר לאחר שיתקבל אישור של הורה.</translation> <translation id="6297287540776456956">בחר אזור באמצעות הסטיילוס</translation> <translation id="6310121235600822547">בוצע סיבוב של <ph name="DISPLAY_NAME" /> אל <ph name="ROTATION" /></translation> <translation id="6376931439017688372">Bluetooth פועל</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index 5925e18..0ec4bcd 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -105,7 +105,7 @@ <translation id="2277103315734023688">अगाडि जानुहोस्</translation> <translation id="2292698582925480719">प्रदर्शनको अनुपात</translation> <translation id="2295777434187870477">माइक सक्रिय छ, टगल गर्नुले माइक म्युट गर्ने छ।</translation> -<translation id="2298170939937364391">पूर्ण स्क्रिन म्याग्निफायर सक्षम पारियो। यसलाई निष्क्रिय पार्न फेरि Ctrl+Search+M थिच्नुहोस्।</translation> +<translation id="2298170939937364391">फुल स्क्रिन म्याग्निफायर सक्षम पारियो। यसलाई निष्क्रिय पार्न फेरि Ctrl+Search+M थिच्नुहोस्।</translation> <translation id="2302092602801625023">यो खाता Family Link मार्फत व्यवस्थित गरिन्छ</translation> <translation id="2303600792989757991">सञ्झ्याल सिंहावलोकन टगल गर्नुहोस्</translation> <translation id="2339073806695260576">टिपोट गर्न, स्क्रिनसट खिच्न, लेजर पोइन्टर वा म्याग्निफाइङ्ग ग्लासको प्रयोग गर्न सेल्फमा रहेको स्टाइलस बटनमा ट्याप गर्नुहोस्।</translation> @@ -228,7 +228,7 @@ <translation id="3783640748446814672">alt</translation> <translation id="3784455785234192852">लक गर्नुहोस्</translation> <translation id="3798670284305777884">स्पिकर (आन्तरिक)</translation> -<translation id="3799080171973636491">तपाईंले पूर्ण स्क्रिन म्याग्निफायरको किबोर्ड सर्टकट थिच्नुभयो। तपाईं यसलाई सक्रिय गर्न चाहनुहुन्छ?</translation> +<translation id="3799080171973636491">तपाईंले फुल स्क्रिन म्याग्निफायरको किबोर्ड सर्टकट थिच्नुभयो। तपाईं यसलाई सक्रिय गर्न चाहनुहुन्छ?</translation> <translation id="380165613292957338">नमस्ते, म कसरी मद्दत गर्न सक्छु?</translation> <translation id="383629559565718788">किबोर्डका सेटिङहरू देखाउनुहोस्</translation> <translation id="3846575436967432996">सञ्जाल जानकारी उपलब्ध छैन</translation> @@ -423,7 +423,7 @@ <translation id="6452181791372256707">अस्वीकार</translation> <translation id="6453179446719226835">भाषा परिवर्तन गरिएको छ</translation> <translation id="6459472438155181876">स्क्रिनलाई <ph name="DISPLAY_NAME" /> मा विस्तार गर्दै</translation> -<translation id="6482559668224714696">पूर्ण स्क्रिन म्याग्निफायर</translation> +<translation id="6482559668224714696">फुल स्क्रिन म्याग्निफायर</translation> <translation id="6490471652906364588">USB-C यन्त्र (दायाँ पोर्ट)</translation> <translation id="649452524636452238">स्मार्ट कार्डको PIN</translation> <translation id="6501401484702599040">स्क्रिन <ph name="RECEIVER_NAME" /> मा cast गर्दै</translation> @@ -641,7 +641,7 @@ <translation id="9151726767154816831">अद्यावधिक गर्न रिस्टार्ट गरी powerwash गर्नुहोस्</translation> <translation id="9168436347345867845">यो कार्य पछि गर्नुहोस्</translation> <translation id="9179259655489829027">यस सुविधाले तपाईंलाई पासवर्ड प्रविष्ट नगरिकनै साइन इन भएका जुनसुकै प्रयोगकर्तामाथि द्रुत रूपमा पहुँच राख्न दिन्छ।आफूले विश्वास गर्ने खाताहरूमा मात्र यो सुविधाको प्रयोग गर्नुहोस्।</translation> -<translation id="9183456764293710005">पूर्ण स्क्रिन म्याग्निफायर</translation> +<translation id="9183456764293710005">फुल स्क्रिन म्याग्निफायर</translation> <translation id="9193626018745640770">कुनै अज्ञात प्रापकमा cast गर्दै</translation> <translation id="9194617393863864469">अर्को प्रयोगकर्तालाई साइन इन गर्नुहोस् ...</translation> <translation id="9198992156681343238"><ph name="DISPLAY_NAME" /> रिजोल्युसन परिवर्तन गरी <ph name="RESOLUTION" /> पारियो। परिवर्तनहरू सुरक्षित गर्न पुष्टि गर्नुहोस् नामक बटनमा क्लिक गर्नुहोस्। अघिल्ला सेटिङहरूलाई <ph name="TIMEOUT_SECONDS" /> भित्र पुनर्स्थापना गरिने छ।</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index 322c0d7..3d37b38 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -412,6 +412,7 @@ <translation id="6267036997247669271"><ph name="NAME" />: செயல்படுத்துகிறது...</translation> <translation id="6283712521836204486">'தொந்தரவு செய்ய வேண்டாம்' ஆஃப் செய்யப்பட்டுள்ளது.</translation> <translation id="6284232397434400372">தெளிவு மாற்றப்பட்டது</translation> +<translation id="6288235558961782912">பெற்றோரின் அனுமதியுடன் <ph name="USER_EMAIL_ADDRESS" /> பயனரைப் பின்னர் சேர்க்கலாம்.</translation> <translation id="6297287540776456956">பகுதியைத் தேர்ந்தெடுக்க, ஸ்டைஸைப் பயன்படுத்தவும்</translation> <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" /> ஆகச் சுழற்றப்பட்டது</translation> <translation id="6376931439017688372">புளூடூத் இயக்கப்பட்டுள்ளது</translation>
diff --git a/ash/system/accessibility/switch_access_back_button_bubble_controller.cc b/ash/system/accessibility/switch_access_back_button_bubble_controller.cc new file mode 100644 index 0000000..7a1095b --- /dev/null +++ b/ash/system/accessibility/switch_access_back_button_bubble_controller.cc
@@ -0,0 +1,79 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/system/accessibility/switch_access_back_button_bubble_controller.h" + +#include "ash/public/cpp/shell_window_ids.h" +#include "ash/shell.h" +#include "ash/system/accessibility/switch_access_back_button_view.h" +#include "ash/system/tray/tray_background_view.h" +#include "ash/system/tray/tray_constants.h" +#include "ash/system/unified/unified_system_tray_view.h" + +namespace ash { + +namespace { +constexpr int kBackButtonRadiusDip = 18; +constexpr int kBackButtonDiameterDip = 2 * kBackButtonRadiusDip; +} // namespace + +SwitchAccessBackButtonBubbleController:: + SwitchAccessBackButtonBubbleController() {} + +SwitchAccessBackButtonBubbleController:: + ~SwitchAccessBackButtonBubbleController() { + if (widget_ && !widget_->IsClosed()) + widget_->CloseNow(); +} + +void SwitchAccessBackButtonBubbleController::ShowBackButton( + const gfx::Rect& anchor) { + if (widget_) { + DCHECK(bubble_view_); + bubble_view_->ChangeAnchorRect(anchor); + return; + } + + TrayBubbleView::InitParams init_params; + init_params.delegate = this; + // Anchor within the overlay container. + init_params.parent_window = + Shell::GetContainer(Shell::GetPrimaryRootWindow(), + kShellWindowId_AccessibilityPanelContainer); + init_params.anchor_mode = TrayBubbleView::AnchorMode::kRect; + init_params.anchor_rect = anchor; + init_params.is_anchored_to_status_area = false; + init_params.has_shadow = false; + + // The back button is a circle, so the preferred width and height are the + // diameter, and the corner radius is the circle radius. + init_params.corner_radius = kBackButtonRadiusDip; + init_params.preferred_width = kBackButtonDiameterDip; + init_params.max_height = kBackButtonDiameterDip; + + bubble_view_ = new TrayBubbleView(init_params); + + back_button_view_ = new SwitchAccessBackButtonView(kBackButtonDiameterDip); + back_button_view_->SetBackground(UnifiedSystemTrayView::CreateBackground()); + bubble_view_->AddChildView(back_button_view_); + bubble_view_->set_color(SK_ColorTRANSPARENT); + bubble_view_->layer()->SetFillsBoundsOpaquely(false); + + widget_ = views::BubbleDialogDelegateView::CreateBubble(bubble_view_); + TrayBackgroundView::InitializeBubbleAnimations(widget_); + bubble_view_->InitializeAndShowBubble(); +} + +void SwitchAccessBackButtonBubbleController::CloseBubble() { + if (widget_ && !widget_->IsClosed()) + widget_->CloseWithReason(views::Widget::ClosedReason::kUnspecified); +} + +void SwitchAccessBackButtonBubbleController::BubbleViewDestroyed() { + back_button_view_ = nullptr; + bubble_view_ = nullptr; + widget_ = nullptr; +} + +} // namespace ash
diff --git a/ash/system/accessibility/switch_access_back_button_bubble_controller.h b/ash/system/accessibility/switch_access_back_button_bubble_controller.h new file mode 100644 index 0000000..d588b68 --- /dev/null +++ b/ash/system/accessibility/switch_access_back_button_bubble_controller.h
@@ -0,0 +1,44 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_BUBBLE_CONTROLLER_H_ +#define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_BUBBLE_CONTROLLER_H_ + +#include "ash/system/tray/tray_bubble_view.h" + +namespace ash { + +class SwitchAccessBackButtonView; + +// Manages the Switch Access back button bubble. +class ASH_EXPORT SwitchAccessBackButtonBubbleController + : public TrayBubbleView::Delegate { + public: + SwitchAccessBackButtonBubbleController(); + ~SwitchAccessBackButtonBubbleController() override; + + SwitchAccessBackButtonBubbleController( + const SwitchAccessBackButtonBubbleController&) = delete; + SwitchAccessBackButtonBubbleController& operator=( + const SwitchAccessBackButtonBubbleController&) = delete; + + void ShowBackButton(const gfx::Rect& anchor); + void CloseBubble(); + + // TrayBubbleView::Delegate: + void BubbleViewDestroyed() override; + + private: + friend class SwitchAccessMenuBubbleControllerTest; + + // Owned by views hierarchy. + SwitchAccessBackButtonView* back_button_view_ = nullptr; + TrayBubbleView* bubble_view_ = nullptr; + + views::Widget* widget_ = nullptr; +}; + +} // namespace ash + +#endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_BUBBLE_CONTROLLER_H_
diff --git a/ash/system/accessibility/switch_access_back_button_view.cc b/ash/system/accessibility/switch_access_back_button_view.cc index 329ac5e..ae3b1b97 100644 --- a/ash/system/accessibility/switch_access_back_button_view.cc +++ b/ash/system/accessibility/switch_access_back_button_view.cc
@@ -37,7 +37,6 @@ // This code should not be called presently, as the button is never shown. // TODO(crbug/973719): Transition to using new back button and menu which // will be implemented using views/. - LOG(WARNING) << "Implementation of back button pressed not finished."; } const char* SwitchAccessBackButtonView::GetClassName() const {
diff --git a/ash/system/accessibility/switch_access_bubble_controller.cc b/ash/system/accessibility/switch_access_bubble_controller.cc deleted file mode 100644 index ab5b933b..0000000 --- a/ash/system/accessibility/switch_access_bubble_controller.cc +++ /dev/null
@@ -1,76 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ash/system/accessibility/switch_access_bubble_controller.h" - -#include "ash/public/cpp/shell_window_ids.h" -#include "ash/shell.h" -#include "ash/system/accessibility/switch_access_back_button_view.h" -#include "ash/system/tray/tray_background_view.h" -#include "ash/system/tray/tray_constants.h" -#include "ash/system/unified/unified_system_tray_view.h" - -namespace ash { - -namespace { -constexpr int kBackButtonRadiusDip = 18; -constexpr int kBackButtonDiameterDip = 2 * kBackButtonRadiusDip; -} // namespace - -SwitchAccessBubbleController::SwitchAccessBubbleController() {} - -SwitchAccessBubbleController::~SwitchAccessBubbleController() { - if (back_button_widget_ && !back_button_widget_->IsClosed()) - back_button_widget_->CloseNow(); -} - -void SwitchAccessBubbleController::ShowBackButton(const gfx::Rect& anchor) { - if (back_button_widget_) { - DCHECK(back_button_bubble_view_); - back_button_bubble_view_->ChangeAnchorRect(anchor); - return; - } - - TrayBubbleView::InitParams init_params; - init_params.delegate = this; - // Anchor within the overlay container. - init_params.parent_window = Shell::GetContainer( - Shell::GetPrimaryRootWindow(), kShellWindowId_OverlayContainer); - init_params.anchor_mode = TrayBubbleView::AnchorMode::kRect; - init_params.anchor_rect = anchor; - init_params.has_shadow = false; - - // The back button is a circle, so the preferred width and height are the - // diameter, and the corner radius is the circle radius. - init_params.corner_radius = kBackButtonRadiusDip; - init_params.preferred_width = kBackButtonDiameterDip; - init_params.max_height = kBackButtonDiameterDip; - - back_button_bubble_view_ = new TrayBubbleView(init_params); - - back_button_view_ = new SwitchAccessBackButtonView(kBackButtonDiameterDip); - back_button_view_->SetBackground(UnifiedSystemTrayView::CreateBackground()); - back_button_bubble_view_->AddChildView(back_button_view_); - back_button_bubble_view_->set_color(SK_ColorTRANSPARENT); - back_button_bubble_view_->layer()->SetFillsBoundsOpaquely(false); - - back_button_widget_ = - views::BubbleDialogDelegateView::CreateBubble(back_button_bubble_view_); - TrayBackgroundView::InitializeBubbleAnimations(back_button_widget_); - back_button_bubble_view_->InitializeAndShowBubble(); -} - -void SwitchAccessBubbleController::CloseBubble() { - if (back_button_widget_ && !back_button_widget_->IsClosed()) - back_button_widget_->CloseWithReason( - views::Widget::ClosedReason::kLostFocus); -} - -void SwitchAccessBubbleController::BubbleViewDestroyed() { - back_button_view_ = nullptr; - back_button_bubble_view_ = nullptr; - back_button_widget_ = nullptr; -} - -} // namespace ash
diff --git a/ash/system/accessibility/switch_access_bubble_controller.h b/ash/system/accessibility/switch_access_bubble_controller.h deleted file mode 100644 index 00ae8c9..0000000 --- a/ash/system/accessibility/switch_access_bubble_controller.h +++ /dev/null
@@ -1,45 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BUBBLE_CONTROLLER_H_ -#define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BUBBLE_CONTROLLER_H_ - -#include "ash/system/tray/tray_bubble_view.h" - -namespace ash { - -class SwitchAccessBackButtonView; - -// Manages the Switch Access back button bubble. -class ASH_EXPORT SwitchAccessBubbleController - : public TrayBubbleView::Delegate { - public: - SwitchAccessBubbleController(); - ~SwitchAccessBubbleController() override; - - SwitchAccessBubbleController(const SwitchAccessBubbleController&) = delete; - SwitchAccessBubbleController& operator=(const SwitchAccessBubbleController&) = - delete; - - void ShowBackButton(const gfx::Rect& anchor); - void CloseBubble(); - - SwitchAccessBackButtonView* GetBackButtonViewForTesting() { - return back_button_view_; - } - - // TrayBubbleView::Delegate: - void BubbleViewDestroyed() override; - - private: - // Owned by views hierarchy. - SwitchAccessBackButtonView* back_button_view_ = nullptr; - TrayBubbleView* back_button_bubble_view_ = nullptr; - - views::Widget* back_button_widget_ = nullptr; -}; - -} // namespace ash - -#endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BUBBLE_CONTROLLER_H_
diff --git a/ash/system/accessibility/switch_access_bubble_controller_unittest.cc b/ash/system/accessibility/switch_access_bubble_controller_unittest.cc deleted file mode 100644 index c9ee20c..0000000 --- a/ash/system/accessibility/switch_access_bubble_controller_unittest.cc +++ /dev/null
@@ -1,60 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ash/system/accessibility/switch_access_bubble_controller.h" - -#include "ash/accessibility/accessibility_controller_impl.h" -#include "ash/shell.h" -#include "ash/system/accessibility/switch_access_back_button_view.h" -#include "ash/test/ash_test_base.h" -#include "base/command_line.h" -#include "ui/accessibility/accessibility_switches.h" - -namespace ash { - -class SwitchAccessBubbleControllerTest : public AshTestBase { - public: - SwitchAccessBubbleControllerTest() = default; - ~SwitchAccessBubbleControllerTest() override = default; - - SwitchAccessBubbleControllerTest(const SwitchAccessBubbleControllerTest&) = - delete; - SwitchAccessBubbleControllerTest& operator=( - const SwitchAccessBubbleControllerTest&) = delete; - - // testing::Test: - void SetUp() override { - base::CommandLine::ForCurrentProcess()->AppendSwitch( - ::switches::kEnableExperimentalAccessibilitySwitchAccess); - AshTestBase::SetUp(); - Shell::Get()->accessibility_controller()->SetSwitchAccessEnabled(true); - } - - SwitchAccessBubbleController* GetBubbleController() { - return Shell::Get() - ->accessibility_controller() - ->GetSwitchAccessBubbleControllerForTest(); - } - - gfx::Rect GetBackButtonBounds() { - SwitchAccessBubbleController* bubble_controller = GetBubbleController(); - if (bubble_controller && bubble_controller->GetBackButtonViewForTesting()) - return bubble_controller->GetBackButtonViewForTesting() - ->GetBoundsInScreen(); - return gfx::Rect(); - } -}; - -// TODO(anastasi): Add more tests for closing and repositioning the button. -TEST_F(SwitchAccessBubbleControllerTest, ShowBackButton) { - EXPECT_TRUE(GetBubbleController()); - gfx::Rect anchor_rect(100, 100, 0, 0); - GetBubbleController()->ShowBackButton(anchor_rect); - - gfx::Rect bounds = GetBackButtonBounds(); - EXPECT_EQ(bounds.width(), 36); - EXPECT_EQ(bounds.height(), 36); -} - -} // namespace ash
diff --git a/ash/system/accessibility/switch_access_menu_bubble_controller.cc b/ash/system/accessibility/switch_access_menu_bubble_controller.cc new file mode 100644 index 0000000..599c64d --- /dev/null +++ b/ash/system/accessibility/switch_access_menu_bubble_controller.cc
@@ -0,0 +1,78 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/system/accessibility/switch_access_menu_bubble_controller.h" + +#include "ash/public/cpp/shell_window_ids.h" +#include "ash/shell.h" +#include "ash/system/accessibility/switch_access_back_button_bubble_controller.h" +#include "ash/system/accessibility/switch_access_menu_view.h" +#include "ash/system/tray/tray_background_view.h" +#include "ash/system/tray/tray_constants.h" +#include "ash/system/unified/unified_system_tray_view.h" + +namespace ash { + +SwitchAccessMenuBubbleController::SwitchAccessMenuBubbleController() + : back_button_controller_( + std::make_unique<SwitchAccessBackButtonBubbleController>()) {} + +SwitchAccessMenuBubbleController::~SwitchAccessMenuBubbleController() { + if (widget_ && !widget_->IsClosed()) + widget_->CloseNow(); +} + +void SwitchAccessMenuBubbleController::ShowBackButton(const gfx::Rect& anchor) { + back_button_controller_->ShowBackButton(anchor); +} + +void SwitchAccessMenuBubbleController::ShowMenu(const gfx::Rect& anchor) { + if (widget_) { + DCHECK(bubble_view_); + bubble_view_->ChangeAnchorRect(anchor); + return; + } + + TrayBubbleView::InitParams init_params; + init_params.delegate = this; + // Anchor within the overlay container. + init_params.parent_window = + Shell::GetContainer(Shell::GetPrimaryRootWindow(), + kShellWindowId_AccessibilityPanelContainer); + init_params.anchor_mode = TrayBubbleView::AnchorMode::kRect; + init_params.anchor_rect = anchor; + init_params.is_anchored_to_status_area = false; + init_params.insets = gfx::Insets(kUnifiedMenuPadding, kUnifiedMenuPadding); + init_params.corner_radius = kUnifiedTrayCornerRadius; + init_params.has_shadow = false; + init_params.translucent = true; + bubble_view_ = new TrayBubbleView(init_params); + + menu_view_ = new SwitchAccessMenuView(); + menu_view_->SetBorder( + views::CreateEmptyBorder(kUnifiedTopShortcutSpacing, 0, 0, 0)); + bubble_view_->SetPreferredWidth(menu_view_->GetBubbleWidthDip()); + bubble_view_->AddChildView(menu_view_); + + menu_view_->SetPaintToLayer(); + menu_view_->layer()->SetFillsBoundsOpaquely(false); + + widget_ = views::BubbleDialogDelegateView::CreateBubble(bubble_view_); + TrayBackgroundView::InitializeBubbleAnimations(widget_); + bubble_view_->InitializeAndShowBubble(); +} + +void SwitchAccessMenuBubbleController::CloseAll() { + back_button_controller_->CloseBubble(); + if (widget_ && !widget_->IsClosed()) + widget_->CloseWithReason(views::Widget::ClosedReason::kUnspecified); +} + +void SwitchAccessMenuBubbleController::BubbleViewDestroyed() { + bubble_view_ = nullptr; + menu_view_ = nullptr; + widget_ = nullptr; +} + +} // namespace ash
diff --git a/ash/system/accessibility/switch_access_menu_bubble_controller.h b/ash/system/accessibility/switch_access_menu_bubble_controller.h new file mode 100644 index 0000000..1f2a950 --- /dev/null +++ b/ash/system/accessibility/switch_access_menu_bubble_controller.h
@@ -0,0 +1,49 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUBBLE_CONTROLLER_H_ +#define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUBBLE_CONTROLLER_H_ + +#include "ash/system/tray/tray_bubble_view.h" + +namespace ash { + +class SwitchAccessBackButtonBubbleController; +class SwitchAccessMenuView; + +// Manages the Switch Access menu bubble. +class ASH_EXPORT SwitchAccessMenuBubbleController + : public TrayBubbleView::Delegate { + public: + SwitchAccessMenuBubbleController(); + ~SwitchAccessMenuBubbleController() override; + + SwitchAccessMenuBubbleController(const SwitchAccessMenuBubbleController&) = + delete; + SwitchAccessMenuBubbleController& operator=( + const SwitchAccessMenuBubbleController&) = delete; + + void ShowBackButton(const gfx::Rect& anchor); + void ShowMenu(const gfx::Rect& anchor); + void CloseAll(); + + // TrayBubbleView::Delegate: + void BubbleViewDestroyed() override; + + private: + friend class SwitchAccessMenuBubbleControllerTest; + + std::unique_ptr<SwitchAccessBackButtonBubbleController> + back_button_controller_; + + // Owned by views hierarchy. + SwitchAccessMenuView* menu_view_ = nullptr; + TrayBubbleView* bubble_view_ = nullptr; + + views::Widget* widget_ = nullptr; +}; + +} // namespace ash + +#endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUBBLE_CONTROLLER_H_
diff --git a/ash/system/accessibility/switch_access_menu_bubble_controller_unittest.cc b/ash/system/accessibility/switch_access_menu_bubble_controller_unittest.cc new file mode 100644 index 0000000..f242ca3 --- /dev/null +++ b/ash/system/accessibility/switch_access_menu_bubble_controller_unittest.cc
@@ -0,0 +1,94 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/system/accessibility/switch_access_menu_bubble_controller.h" + +#include "ash/accessibility/accessibility_controller_impl.h" +#include "ash/shell.h" +#include "ash/system/accessibility/switch_access_back_button_bubble_controller.h" +#include "ash/system/accessibility/switch_access_back_button_view.h" +#include "ash/system/accessibility/switch_access_menu_button.h" +#include "ash/system/accessibility/switch_access_menu_view.h" +#include "ash/test/ash_test_base.h" +#include "base/command_line.h" +#include "ui/accessibility/accessibility_switches.h" + +namespace ash { + +class SwitchAccessMenuBubbleControllerTest : public AshTestBase { + public: + SwitchAccessMenuBubbleControllerTest() = default; + ~SwitchAccessMenuBubbleControllerTest() override = default; + + SwitchAccessMenuBubbleControllerTest( + const SwitchAccessMenuBubbleControllerTest&) = delete; + SwitchAccessMenuBubbleControllerTest& operator=( + const SwitchAccessMenuBubbleControllerTest&) = delete; + + // AshTestBase: + void SetUp() override { + base::CommandLine::ForCurrentProcess()->AppendSwitch( + ::switches::kEnableExperimentalAccessibilitySwitchAccess); + AshTestBase::SetUp(); + Shell::Get()->accessibility_controller()->SetSwitchAccessEnabled(true); + } + + SwitchAccessMenuBubbleController* GetBubbleController() { + return Shell::Get() + ->accessibility_controller() + ->GetSwitchAccessBubbleControllerForTest(); + } + + SwitchAccessMenuView* GetMenuView() { + return GetBubbleController()->menu_view_; + } + + std::vector<SwitchAccessMenuButton*> GetMenuButtons() { + return std::vector<SwitchAccessMenuButton*>( + {GetMenuView()->scroll_down_button_, GetMenuView()->select_button_, + GetMenuView()->settings_button_}); + } + + gfx::Rect GetBackButtonBounds() { + SwitchAccessMenuBubbleController* bubble_controller = GetBubbleController(); + if (bubble_controller && bubble_controller->back_button_controller_ && + bubble_controller->back_button_controller_->back_button_view_) { + return bubble_controller->back_button_controller_->back_button_view_ + ->GetBoundsInScreen(); + } + return gfx::Rect(); + } + + int GetExpectedButtonWidth() { return SwitchAccessMenuButton::kWidthDip; } + int GetExpectedBubbleWidth() { + return 288; // From the Switch Access spec. + } +}; + +// TODO(anastasi): Add more tests for closing and repositioning the button. +TEST_F(SwitchAccessMenuBubbleControllerTest, ShowBackButton) { + EXPECT_TRUE(GetBubbleController()); + gfx::Rect anchor_rect(100, 100, 0, 0); + GetBubbleController()->ShowBackButton(anchor_rect); + + gfx::Rect bounds = GetBackButtonBounds(); + EXPECT_EQ(bounds.width(), 36); + EXPECT_EQ(bounds.height(), 36); +} + +TEST_F(SwitchAccessMenuBubbleControllerTest, ShowMenu) { + EXPECT_TRUE(GetBubbleController()); + gfx::Rect anchor_rect(10, 10, 0, 0); + GetBubbleController()->ShowMenu(anchor_rect); + EXPECT_TRUE(GetMenuView()); + + for (SwitchAccessMenuButton* button : GetMenuButtons()) { + EXPECT_TRUE(button); + EXPECT_EQ(button->width(), GetExpectedButtonWidth()); + } + + EXPECT_EQ(GetMenuView()->width(), GetExpectedBubbleWidth()); +} + +} // namespace ash
diff --git a/ash/system/accessibility/switch_access_menu_button.cc b/ash/system/accessibility/switch_access_menu_button.cc new file mode 100644 index 0000000..afd7aa778 --- /dev/null +++ b/ash/system/accessibility/switch_access_menu_button.cc
@@ -0,0 +1,76 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/system/accessibility/switch_access_menu_button.h" + +#include "ash/style/ash_color_provider.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/canvas.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/gfx/vector_icon_types.h" +#include "ui/views/controls/image_view.h" +#include "ui/views/controls/label.h" +#include "ui/views/layout/box_layout.h" +#include "ui/views/style/typography.h" + +namespace ash { + +namespace { +constexpr int kButtonBottomPaddingDefaultDip = 8; +constexpr int kButtonBottomPaddingSmallDip = 1; +constexpr int kButtonTopPaddingDip = 16; +constexpr int kIconSizeDip = 20; +constexpr int kLabelMinSidePaddingDip = 8; +constexpr int kLabelMaxWidthDip = + SwitchAccessMenuButton::kWidthDip - 2 * kLabelMinSidePaddingDip; +constexpr int kLabelTopPaddingDefaultDip = 16; +constexpr int kLabelTopPaddingSmallDip = 8; +constexpr int kTextLineHeightDip = 20; +} // namespace + +SwitchAccessMenuButton::SwitchAccessMenuButton(views::ButtonListener* listener, + const gfx::VectorIcon& icon, + int label_text_id) + : views::Button(listener), + image_view_(new views::ImageView()), + label_(new views::Label(l10n_util::GetStringUTF16(label_text_id), + views::style::CONTEXT_BUTTON)) { + std::unique_ptr<views::BoxLayout> layout = std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kVertical, + gfx::Insets(kButtonTopPaddingDip, kLabelMinSidePaddingDip, + kButtonBottomPaddingDefaultDip, kLabelMinSidePaddingDip), + kLabelTopPaddingDefaultDip); + + SkColor icon_color = AshColorProvider::Get()->GetContentLayerColor( + AshColorProvider::ContentLayerType::kIconPrimary, + AshColorProvider::AshColorMode::kDark); + SkColor label_color = AshColorProvider::Get()->GetContentLayerColor( + AshColorProvider::ContentLayerType::kTextPrimary, + AshColorProvider::AshColorMode::kDark); + + image_view_->SetImage(gfx::CreateVectorIcon(icon, kIconSizeDip, icon_color)); + label_->SetAutoColorReadabilityEnabled(false); + label_->SetEnabledColor(label_color); + label_->SetMultiLine(true); + label_->SetMaximumWidth(kLabelMaxWidthDip); + + AddChildView(image_view_); + AddChildView(label_); + + // The layout padding changes with the size of the text label. + gfx::Size label_size = label_->CalculatePreferredSize(); + int left_padding_dip = (kWidthDip - label_size.width()) / 2; + int right_padding_dip = kWidthDip - left_padding_dip - label_size.width(); + int bottom_padding_dip = kButtonBottomPaddingDefaultDip; + if (label_size.height() > kTextLineHeightDip) { + bottom_padding_dip = kButtonBottomPaddingSmallDip; + layout->set_between_child_spacing(kLabelTopPaddingSmallDip); + } + layout->set_inside_border_insets( + gfx::Insets(kButtonTopPaddingDip, left_padding_dip, bottom_padding_dip, + right_padding_dip)); + SetLayoutManager(std::move(layout)); +} + +} // namespace ash
diff --git a/ash/system/accessibility/switch_access_menu_button.h b/ash/system/accessibility/switch_access_menu_button.h new file mode 100644 index 0000000..c1dfaef --- /dev/null +++ b/ash/system/accessibility/switch_access_menu_button.h
@@ -0,0 +1,41 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUTTON_H_ +#define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUTTON_H_ + +#include "ui/views/controls/button/button.h" + +namespace gfx { +struct VectorIcon; +} + +namespace views { +class ImageView; +class Label; +} // namespace views + +namespace ash { + +class SwitchAccessMenuButton : public views::Button { + public: + SwitchAccessMenuButton(views::ButtonListener* listener, + const gfx::VectorIcon& icon, + int accessible_name_id); + ~SwitchAccessMenuButton() override = default; + + SwitchAccessMenuButton(const SwitchAccessMenuButton&) = delete; + SwitchAccessMenuButton& operator=(const SwitchAccessMenuButton&) = delete; + + static constexpr int kWidthDip = 80; + + private: + // Owned by the views hierarchy. + views::ImageView* image_view_; + views::Label* label_; +}; + +} // namespace ash + +#endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUTTON_H_
diff --git a/ash/system/accessibility/switch_access_menu_view.cc b/ash/system/accessibility/switch_access_menu_view.cc new file mode 100644 index 0000000..7b5562f --- /dev/null +++ b/ash/system/accessibility/switch_access_menu_view.cc
@@ -0,0 +1,55 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/system/accessibility/switch_access_menu_view.h" + +#include "ash/resources/vector_icons/vector_icons.h" +#include "ash/strings/grit/ash_strings.h" +#include "ash/system/accessibility/switch_access_menu_button.h" +#include "ash/system/tray/tray_constants.h" +#include "ui/events/event.h" +#include "ui/views/layout/box_layout.h" + +namespace ash { + +SwitchAccessMenuView::SwitchAccessMenuView() + : scroll_down_button_( + new SwitchAccessMenuButton(this, + kSwitchAccessScrollDownIcon, + IDS_ASH_SWITCH_ACCESS_SCROLL_DOWN)), + select_button_(new SwitchAccessMenuButton(this, + kSwitchAccessSelectIcon, + IDS_ASH_SWITCH_ACCESS_SELECT)), + settings_button_( + new SwitchAccessMenuButton(this, + kSwitchAccessSettingsIcon, + IDS_ASH_SWITCH_ACCESS_SETTINGS)) { + SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kHorizontal, kUnifiedMenuItemPadding, + kUnifiedMenuPadding)); + + AddChildView(select_button_); + AddChildView(scroll_down_button_); + AddChildView(settings_button_); +} + +int SwitchAccessMenuView::GetBubbleWidthDip() const { + // Fixed at 3 menu items, as the menu currently has a max of 3 items per row + // and will not show with less than 3 items. In the future this will vary with + // the number of menu items displayed. + return (3 * SwitchAccessMenuButton::kWidthDip) + (2 * kUnifiedMenuPadding) + + kUnifiedMenuItemPadding.left() + kUnifiedMenuItemPadding.right(); +} + +void SwitchAccessMenuView::ButtonPressed(views::Button* sender, + const ui::Event& event) { + // TODO(crbug/973719): Transition to using new back button and menu which + // will be implemented using views/. +} + +const char* SwitchAccessMenuView::GetClassName() const { + return "SwitchAccessMenuView"; +} + +} // namespace ash
diff --git a/ash/system/accessibility/switch_access_menu_view.h b/ash/system/accessibility/switch_access_menu_view.h new file mode 100644 index 0000000..cd38fad7 --- /dev/null +++ b/ash/system/accessibility/switch_access_menu_view.h
@@ -0,0 +1,43 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_VIEW_H_ +#define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_VIEW_H_ + +#include "ui/views/controls/button/button.h" +#include "ui/views/view.h" + +namespace ash { + +class SwitchAccessMenuButton; + +// View for the Switch Access menu. +class SwitchAccessMenuView : public views::View, public views::ButtonListener { + public: + SwitchAccessMenuView(); + ~SwitchAccessMenuView() override = default; + + SwitchAccessMenuView(const SwitchAccessMenuView&) = delete; + SwitchAccessMenuView& operator=(const SwitchAccessMenuView&) = delete; + + int GetBubbleWidthDip() const; + + // views::ButtonListener: + void ButtonPressed(views::Button* sender, const ui::Event& event) override; + + // views::View: + const char* GetClassName() const override; + + private: + friend class SwitchAccessMenuBubbleControllerTest; + + // Owned by the views hierarchy. + SwitchAccessMenuButton* scroll_down_button_; + SwitchAccessMenuButton* select_button_; + SwitchAccessMenuButton* settings_button_; +}; + +} // namespace ash + +#endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_VIEW_H_
diff --git a/base/logging.h b/base/logging.h index cb24b9483..bc602f9 100644 --- a/base/logging.h +++ b/base/logging.h
@@ -926,7 +926,7 @@ // This is useful since the LogMessage class uses a lot of Win32 calls // that will lose the value of GLE and the code that called the log function // will have lost the thread error value when the log call returns. - base::internal::ScopedClearLastError last_error_; + base::ScopedClearLastError last_error_; DISALLOW_COPY_AND_ASSIGN(LogMessage); };
diff --git a/base/scoped_clear_last_error.h b/base/scoped_clear_last_error.h index b19f043..656dad8 100644 --- a/base/scoped_clear_last_error.h +++ b/base/scoped_clear_last_error.h
@@ -1,4 +1,4 @@ -// Copyright (c) 2018 The Chromium Authors. All rights reserved. +// 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. @@ -12,7 +12,6 @@ #include "build/build_config.h" namespace base { -namespace internal { // ScopedClearLastError stores and resets the value of thread local error codes // (errno, GetLastError()), and restores them in the destructor. This is useful @@ -41,7 +40,7 @@ ~ScopedClearLastError(); private: - unsigned int last_system_error_; + const unsigned long last_system_error_; DISALLOW_COPY_AND_ASSIGN(ScopedClearLastError); }; @@ -52,7 +51,6 @@ #endif // defined(OS_WIN) -} // namespace internal } // namespace base #endif // BASE_SCOPED_CLEAR_LAST_ERROR_H_
diff --git a/base/scoped_clear_last_error_unittest.cc b/base/scoped_clear_last_error_unittest.cc index 3ae6b394..c9e5978 100644 --- a/base/scoped_clear_last_error_unittest.cc +++ b/base/scoped_clear_last_error_unittest.cc
@@ -13,7 +13,6 @@ #endif // defined(OS_WIN) namespace base { -namespace internal { TEST(ScopedClearLastError, TestNoError) { errno = 1; @@ -55,5 +54,4 @@ #endif // defined(OS_WIN) -} // namespace internal } // namespace base
diff --git a/base/scoped_clear_last_error_win.cc b/base/scoped_clear_last_error_win.cc index cdf9963..18ebd69 100644 --- a/base/scoped_clear_last_error_win.cc +++ b/base/scoped_clear_last_error_win.cc
@@ -1,4 +1,4 @@ -// Copyright (c) 2018 The Chromium Authors. All rights reserved. +// 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. @@ -7,16 +7,14 @@ #include <windows.h> namespace base { -namespace internal { ScopedClearLastError::ScopedClearLastError() - : last_system_error_(::GetLastError()) { - ::SetLastError(0); + : ScopedClearLastErrorBase(), last_system_error_(GetLastError()) { + SetLastError(0); } ScopedClearLastError::~ScopedClearLastError() { - ::SetLastError(last_system_error_); + SetLastError(last_system_error_); } -} // namespace internal } // namespace base
diff --git a/base/strings/stringprintf.cc b/base/strings/stringprintf.cc index 738cc63..123c912 100644 --- a/base/strings/stringprintf.cc +++ b/base/strings/stringprintf.cc
@@ -62,7 +62,7 @@ va_list ap_copy; va_copy(ap_copy, ap); - base::internal::ScopedClearLastError last_error; + base::ScopedClearLastError last_error; int result = vsnprintfT(stack_buf, base::size(stack_buf), format, ap_copy); va_end(ap_copy);
diff --git a/base/threading/scoped_blocking_call_internal.cc b/base/threading/scoped_blocking_call_internal.cc index 05e1eb8..2d15f4c 100644 --- a/base/threading/scoped_blocking_call_internal.cc +++ b/base/threading/scoped_blocking_call_internal.cc
@@ -70,7 +70,7 @@ UncheckedScopedBlockingCall::~UncheckedScopedBlockingCall() { // TLS affects result of GetLastError() on Windows. ScopedClearLastError // prevents side effect. - base::internal::ScopedClearLastError save_last_error; + base::ScopedClearLastError save_last_error; DCHECK_EQ(this, tls_last_scoped_blocking_call.Get().Get()); tls_last_scoped_blocking_call.Get().Set(previous_scoped_blocking_call_); if (blocking_observer_ && !previous_scoped_blocking_call_)
diff --git a/build/fuchsia/common_args.py b/build/fuchsia/common_args.py index 24544f2..2cfeeca 100644 --- a/build/fuchsia/common_args.py +++ b/build/fuchsia/common_args.py
@@ -62,6 +62,10 @@ common_args.add_argument('--ssh-config', '-F', help='The path to the SSH configuration used for ' 'connecting to the target device.') + common_args.add_argument('--enable-fuchsia-system-log', + action='store_true', + help='Write the Fuchsia system log to the test ' + 'system_log instead of the Fuchsia kernel log.') common_args.add_argument('--fuchsia-out-dir', help='Path to a Fuchsia build output directory. ' 'Equivalent to setting --ssh_config and '
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 68200a3..c084d0b 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -0.20200413.2.1 \ No newline at end of file +0.20200413.3.1 \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 68200a3..c084d0b 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -0.20200413.2.1 \ No newline at end of file +0.20200413.3.1 \ No newline at end of file
diff --git a/build/fuchsia/run_package.py b/build/fuchsia/run_package.py index e6d3978..62bbd3b8 100644 --- a/build/fuchsia/run_package.py +++ b/build/fuchsia/run_package.py
@@ -20,6 +20,7 @@ import threading import uuid +from symbolizer import RunSymbolizer from symbolizer import SymbolizerFilter FAR = common.GetHostToolPathFromPlatform('far') @@ -36,6 +37,49 @@ stdout=subprocess.PIPE) +def _BuildIdsPaths(package_paths): + """Generate build ids paths for symbolizer processes.""" + build_ids_paths = map( + lambda package_path: os.path.join( + os.path.dirname(package_path), 'ids.txt'), + package_paths) + return build_ids_paths + + +class SystemLogReader(object): + """Collects and symbolizes Fuchsia system log to a file.""" + + def __init__(self): + self._listener_proc = None + self._symbolizer_proc = None + self._system_log = None + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + """Stops the system logging processes and closes the output file.""" + if self._symbolizer_proc: + self._symbolizer_proc.kill() + if self._listener_proc: + self._listener_proc.kill() + if self._system_log: + self._system_log.close() + + def Start(self, target, package_paths, system_log_file): + """Start a system log reader as a long-running SSH task.""" + logging.debug('Writing fuchsia system log to %s' % system_log_file) + + self._listener_proc = target.RunCommandPiped(['log_listener'], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + + self._system_log = open(system_log_file,'w', buffering=1) + self._symbolizer_proc = RunSymbolizer(self._listener_proc.stdout, + self._system_log, + _BuildIdsPaths(package_paths)) + + class MergedInputStream(object): """Merges a number of input streams into a UNIX pipe on a dedicated thread. Terminates when the file descriptor of the primary stream (the first in @@ -194,11 +238,8 @@ output_stream = process.stdout # Run the log data through the symbolizer process. - build_ids_paths = map( - lambda package_path: os.path.join( - os.path.dirname(package_path), 'ids.txt'), - package_paths) - output_stream = SymbolizerFilter(output_stream, build_ids_paths) + output_stream = SymbolizerFilter(output_stream, + _BuildIdsPaths(package_paths)) for next_line in output_stream: print(next_line.rstrip())
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index 02fb07f1..cd743e4 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -18,7 +18,7 @@ from common_args import AddCommonArgs, ConfigureLogging, GetDeploymentTargetForArgs from net_test_server import SetupTestServer -from run_package import RunPackage, RunPackageArgs +from run_package import RunPackage, RunPackageArgs, SystemLogReader DEFAULT_TEST_SERVER_CONCURRENCY = 4 @@ -139,32 +139,37 @@ child_args.extend(args.child_args) with GetDeploymentTargetForArgs(args) as target: - target.Start() + with SystemLogReader() as system_logger: + target.Start() - if args.test_launcher_filter_file: - target.PutFile(args.test_launcher_filter_file, TEST_FILTER_PATH, - for_package=args.package_name) - child_args.append('--test-launcher-filter-file=' + TEST_FILTER_PATH) + if args.enable_fuchsia_system_log: + if args.system_log_file and args.system_log_file != '-': + system_logger.Start(target, args.package, args.system_log_file) - test_server = None - if args.enable_test_server: - assert test_concurrency - test_server = SetupTestServer(target, test_concurrency, - args.package_name) + if args.test_launcher_filter_file: + target.PutFile(args.test_launcher_filter_file, TEST_FILTER_PATH, + for_package=args.package_name) + child_args.append('--test-launcher-filter-file=' + TEST_FILTER_PATH) - run_package_args = RunPackageArgs.FromCommonArgs(args) - returncode = RunPackage( - args.output_directory, target, args.package, args.package_name, - child_args, run_package_args) + test_server = None + if args.enable_test_server: + assert test_concurrency + test_server = SetupTestServer(target, test_concurrency, + args.package_name) - if test_server: - test_server.Stop() + run_package_args = RunPackageArgs.FromCommonArgs(args) + returncode = RunPackage( + args.output_directory, target, args.package, args.package_name, + child_args, run_package_args) - if args.test_launcher_summary_output: - target.GetFile(TEST_RESULT_PATH, args.test_launcher_summary_output, - for_package=args.package_name) + if test_server: + test_server.Stop() - return returncode + if args.test_launcher_summary_output: + target.GetFile(TEST_RESULT_PATH, args.test_launcher_summary_output, + for_package=args.package_name) + + return returncode if __name__ == '__main__':
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 11e9d67..0226f80c 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -980,6 +980,7 @@ "//chrome/test/data/autofill/", "//chrome/test/data/background_sync/", "//chrome/test/data/banners/", + "//chrome/test/data/dom_distiller/", "//chrome/test/data/browsing_data/", "//chrome/test/data/encoding_tests/auto_detect/Big5_with_no_encoding_specified.html", "//chrome/test/data/geolocation/",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni index 2caff11..13a01d02 100644 --- a/chrome/android/chrome_test_java_sources.gni +++ b/chrome/android/chrome_test_java_sources.gni
@@ -8,6 +8,7 @@ chrome_test_java_sources = [ "javatests/src/org/chromium/chrome/browser/ActivityTabProviderTest.java", "javatests/src/org/chromium/chrome/browser/AudioTest.java", + "javatests/src/org/chromium/chrome/browser/ChromeActionModeHandlerTest.java", "javatests/src/org/chromium/chrome/browser/ChromeActivityTest.java", "javatests/src/org/chromium/chrome/browser/ChromeBackgroundServiceTest.java", "javatests/src/org/chromium/chrome/browser/ContentViewFocusTest.java", @@ -150,6 +151,7 @@ "javatests/src/org/chromium/chrome/browser/document/LauncherActivityTest.java", "javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java", "javatests/src/org/chromium/chrome/browser/dom_distiller/DistilledPagePrefsTest.java", + "javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeTest.java", "javatests/src/org/chromium/chrome/browser/download/ChromeDownloadDelegateTest.java", "javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceManagerTest.java", "javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceTest.java",
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java index 5dcfa07d..e435604 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java
@@ -31,6 +31,7 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.DisabledTest; import org.chromium.chrome.browser.autofill_assistant.proto.ActionProto; import org.chromium.chrome.browser.autofill_assistant.proto.ChipProto; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto; @@ -94,6 +95,7 @@ @Test @MediumTest + @DisabledTest(message = "https://crbug.com/1070272") public void newTabButtonHidesAndRecoversAutofillAssistant() throws Exception { ArrayList<ActionProto> list = new ArrayList<>(); list.add((ActionProto) ActionProto.newBuilder()
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb index f4661d6..ddcc952 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb
@@ -14,7 +14,7 @@ <translation id="4212246570487010370">ब्राउजिङ जारी राख्नुहोस्</translation> <translation id="4648718555153979859">तपाईंका ट्याबहरू यहाँ एकै ठाउँमा समूहबद्ध गरिएको छन्</translation> <translation id="5007392906805964215">समीक्षा गर्नुहोस्</translation> -<translation id="5073204694187207510">पूर्ण स्क्रिन ग्रिड लुकाउनुहोस्</translation> +<translation id="5073204694187207510">फुल स्क्रिन ग्रिड लुकाउनुहोस्</translation> <translation id="5082793167783849073">कुनै समूह बनाएर द्रुत रूपमा पृष्ठहरूको तुलना गर्नुहोस्। सुरु गर्न कुनै लिंकमा छोइराख्नुहोस्।</translation> <translation id="5580090775658607195"><ph name="TAB_COUNT" /> ट्याबहरू समूहबद्ध गरिए</translation> <translation id="58326064309361797">ट्याबहरूलाई समूहबद्ध गर्न तिनीहरूलाई ड्र्याग गर्नुहोस्</translation> @@ -24,7 +24,7 @@ <translation id="6615455863669487791">मलाई देखाउनुहोस्</translation> <translation id="6840760312327750441">ट्याबहरू समूहबद्ध गर्न कुनै ट्याबमा छोइराख्नुहोस्। त्यसपछि, त्यसलाई ड्र्याग गरी अर्को ट्याबमा लैजानुहोस्।</translation> <translation id="7151209024774799310">समूहबाट ट्याबहरू हटाउनुहोस्</translation> -<translation id="7559245342362162951">समूहका ट्याबहरूलाई पूर्ण स्क्रिन ग्रिडमा देखाउनुहोस्</translation> +<translation id="7559245342362162951">समूहका ट्याबहरूलाई फुल स्क्रिन ग्रिडमा देखाउनुहोस्</translation> <translation id="7792771145871471484">सुझावहरूको समीक्षा गर्नुहोस्।</translation> <translation id="7885132941432959125">ट्याब सारेर दायाँतिर लैजानुहोस्</translation> <translation id="7966321538264951561">सिफारिसहरू खारेज गर्नुहोस्।</translation>
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java index b83d375..e6e3204 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -298,8 +298,10 @@ // Native should already have been loaded because of FeedSurfaceMediator. if (ChromeFeatureList.isEnabled(ChromeFeatureList.INTEREST_FEED_V2)) { - // TODO(iwells): Temporary. This should probably move to FeedSurfaceMediator. + // TODO(jianli): Temporary: simulate opening the feed V2 surface. This should probably + // move to FeedSurfaceMediator. mFeedStreamSurface = new FeedStreamSurface(mActivity); + mFeedStreamSurface.surfaceOpened(); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java index f140c970..84f6be4e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java
@@ -45,15 +45,12 @@ */ public class ChromeActionModeHandler { /** Observes the active WebContents being initialized into a Tab. */ - private final Consumer<WebContents> mInitWebContentsObserver; + private final Callback<WebContents> mInitWebContentsObserver; private final ActivityTabProvider.ActivityTabTabObserver mActivityTabTabObserver; private Tab mActiveTab; - /** Set to {@code true} once the first Tab content is changed. */ - private boolean mContentChanged; - /** * @param activityTabProvider {@link ActivityTabProvider} instance. * @param actionBarObserver observer called when the contextual action bar's visibility @@ -84,19 +81,6 @@ TabWebContentsObserver.from(tab).addInitWebContentsObserver( mInitWebContentsObserver); mActiveTab = tab; - - // For the very first tab being observed, we miss mInitWebContentsObserver - // because TabObserver.onContentChanged -> - // TabWebContentsObserver.initWebContents occurs before this activity tab - // observer is ready. Manually triggers it here. - if (!mContentChanged && tab.getWebContents() != null) { - mInitWebContentsObserver.accept(tab.getWebContents()); - } - } - - @Override - public void onContentChanged(Tab tab) { - mContentChanged = true; } }; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java index e7a0f46..099b453b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java
@@ -31,7 +31,6 @@ import org.chromium.chrome.browser.tab.TabSelectionType; import org.chromium.chrome.browser.tab.TabUtils; import org.chromium.chrome.browser.tabmodel.TabModelSelector; -import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver; import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils; import org.chromium.components.navigation_interception.InterceptNavigationDelegate; @@ -87,8 +86,6 @@ // Hold on to the InterceptNavigationDelegate that the custom tab uses. InterceptNavigationDelegate mCustomTabNavigationDelegate; - private TabModelSelectorTabModelObserver mTabModelSelectorObserver; - public ReaderModeManager(TabModelSelector selector, ChromeActivity activity) { super(selector); mTabModelSelector = selector;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadMetrics.java index d42e228..18e4a56 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadMetrics.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadMetrics.java
@@ -6,9 +6,7 @@ import androidx.annotation.IntDef; -import org.chromium.base.Log; import org.chromium.base.metrics.RecordHistogram; -import org.chromium.content_public.browser.BrowserStartupController; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -39,11 +37,6 @@ * @param mimeType The mime type of the download. */ public static void recordDownloadOpen(@DownloadOpenSource int source, String mimeType) { - if (!isNativeLoaded()) { - Log.w(TAG, "Native is not loaded, dropping download open metrics."); - return; - } - @DownloadFilter.Type int type = DownloadFilter.fromMimeType(mimeType); if (type == DownloadFilter.Type.VIDEO) { @@ -59,10 +52,6 @@ } public static void recordDownloadPageOpen(@DownloadOpenSource int source) { - if (!isNativeLoaded()) { - Log.w(TAG, "Native is not loaded, dropping download open metrics."); - return; - } RecordHistogram.recordEnumeratedHistogram( "Android.DownloadPage.OpenSource", source, DownloadOpenSource.MAX_VALUE); } @@ -95,8 +84,4 @@ } }); } - - private static boolean isNativeLoaded() { - return BrowserStartupController.getInstance().isNativeStarted(); - } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java index b15bda9..a6191c1d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.tab; +import android.os.Handler; import android.view.View; import androidx.annotation.IntDef; @@ -12,9 +13,10 @@ import org.chromium.base.ActivityState; import org.chromium.base.ApplicationState; import org.chromium.base.ApplicationStatus; -import org.chromium.base.Consumer; +import org.chromium.base.Callback; import org.chromium.base.ContextUtils; import org.chromium.base.Log; +import org.chromium.base.ObserverList; import org.chromium.base.ObserverList.RewindableIterator; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.AppHooks; @@ -32,8 +34,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.util.ArrayList; -import java.util.List; /** * WebContentsObserver used by Tab. @@ -73,7 +73,8 @@ } private final TabImpl mTab; - private final List<Consumer<WebContents>> mInitObservers = new ArrayList<>(); + private final ObserverList<Callback<WebContents>> mInitObservers = new ObserverList<>(); + private final Handler mHandler = new Handler(); private WebContentsObserver mObserver; public static TabWebContentsObserver from(Tab tab) { @@ -97,16 +98,22 @@ /** * Adds an observer triggered when |initWebContents| is invoked. + * <p>A newly created tab adding this observer misses the event because + * |TabObserver.onContentChanged| -> |TabWebContentsObserver.initWebContents| + * occurs before the observer is added. Manually trigger it here. + * @param observer Observer to add. */ - public void addInitWebContentsObserver(Consumer<WebContents> initObserver) { - mInitObservers.add(initObserver); + public void addInitWebContentsObserver(Callback<WebContents> observer) { + if (mInitObservers.addObserver(observer) && mTab.getWebContents() != null) { + observer.onResult(mTab.getWebContents()); + } } /** * Remove the InitWebContents observer from the list. */ - public void removeInitWebContentsObserver(Consumer<WebContents> initObserver) { - mInitObservers.remove(initObserver); + public void removeInitWebContentsObserver(Callback<WebContents> observer) { + mInitObservers.removeObserver(observer); } @Override @@ -122,7 +129,7 @@ // is not the default behavior for embedded web views. WebContentsAccessibility.fromWebContents(webContents).setShouldFocusOnPageLoad(true); - for (Consumer<WebContents> consumer : mInitObservers) consumer.accept(webContents); + for (Callback<WebContents> callback : mInitObservers) callback.onResult(webContents); } @Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeActionModeHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeActionModeHandlerTest.java new file mode 100644 index 0000000..d5427e7 --- /dev/null +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeActionModeHandlerTest.java
@@ -0,0 +1,67 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser; + +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.SmallTest; + +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tab.TabLaunchType; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.components.embedder_support.util.UrlConstants; +import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.content_public.browser.test.util.WebContentsUtils; +import org.chromium.content_public.common.ContentUrlConstants; +import org.chromium.net.test.EmbeddedTestServer; + +/** + * Tests {@link ChromeActionModeHandler} operation. + */ +@RunWith(ChromeJUnit4ClassRunner.class) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +public class ChromeActionModeHandlerTest { + @Rule + public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + + private void assertActionModeIsReady() { + // clang-format off + TestThreadUtils.runOnUiThreadBlocking( + () -> Assert.assertTrue(WebContentsUtils.isActionModeSupported( + mActivityTestRule.getWebContents()))); + // clang-format on + } + + @Test + @SmallTest + public void testActionModeSetForNewTab() { + EmbeddedTestServer testServer = EmbeddedTestServer.createAndStartServer( + InstrumentationRegistry.getInstrumentation().getContext()); + + mActivityTestRule.startMainActivityWithURL(UrlConstants.NTP_URL); + mActivityTestRule.loadUrl(ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL); + assertActionModeIsReady(); + + LoadUrlParams urlParams = new LoadUrlParams(ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL); + Tab tab = mActivityTestRule.getActivity().getActivityTabProvider().get(); + + // Assert that a new tab has an action mode callback set as expected. + // clang-format off + TestThreadUtils.runOnUiThreadBlockingNoException( + () -> mActivityTestRule.getActivity().getTabModelSelector().openNewTab( + urlParams, TabLaunchType.FROM_LONGPRESS_FOREGROUND, tab, true)); + // clang-format on + assertActionModeIsReady(); + testServer.stopAndDestroyServer(); + } +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettingsTest.java index 9bfd11ff..1c04c8d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettingsTest.java
@@ -17,13 +17,15 @@ import androidx.preference.Preference; import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.chromium.base.task.PostTask; import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.accessibility.FontSizePrefs; -import org.chromium.chrome.browser.settings.SettingsActivityTest; +import org.chromium.chrome.browser.settings.SettingsActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference; import org.chromium.content_public.browser.UiThreadTaskTraits; @@ -38,6 +40,15 @@ */ @RunWith(ChromeJUnit4ClassRunner.class) public class AccessibilitySettingsTest { + @Rule + public SettingsActivityTestRule<AccessibilitySettings> mSettingsActivityTestRule = + new SettingsActivityTestRule<>(AccessibilitySettings.class); + + @Before + public void setUp() { + mSettingsActivityTestRule.startSettingsActivity(); + } + /** * Tests setting FontScaleFactor and ForceEnableZoom in AccessibilitySettings and ensures * that ForceEnableZoom changes corresponding to FontScaleFactor. @@ -46,12 +57,7 @@ @SmallTest @Feature({"Accessibility"}) public void testAccessibilitySettings() throws Exception { - String accessibilitySettingsClassname = AccessibilitySettings.class.getName(); - AccessibilitySettings accessibilitySettings = - (AccessibilitySettings) SettingsActivityTest - .startSettingsActivity(InstrumentationRegistry.getInstrumentation(), - accessibilitySettingsClassname) - .getMainFragment(); + AccessibilitySettings accessibilitySettings = mSettingsActivityTestRule.getFragment(); TextScalePreference textScalePref = (TextScalePreference) accessibilitySettings.findPreference( AccessibilitySettings.PREF_TEXT_SCALE); @@ -98,12 +104,7 @@ @SmallTest @Feature({"Accessibility"}) public void testCaptionPreferences() { - String accessibilitySettingsClassname = AccessibilitySettings.class.getName(); - AccessibilitySettings accessibilitySettings = - (AccessibilitySettings) SettingsActivityTest - .startSettingsActivity(InstrumentationRegistry.getInstrumentation(), - accessibilitySettingsClassname) - .getMainFragment(); + AccessibilitySettings accessibilitySettings = mSettingsActivityTestRule.getFragment(); Preference captionsPref = accessibilitySettings.findPreference(AccessibilitySettings.PREF_CAPTIONS); Assert.assertNotNull(captionsPref);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragmentTest.java index 027465d1..077724a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragmentTest.java
@@ -4,7 +4,6 @@ package org.chromium.chrome.browser.autofill.settings; -import android.support.test.InstrumentationRegistry; import android.support.test.filters.MediumTest; import android.view.KeyEvent; import android.widget.EditText; @@ -24,7 +23,7 @@ import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.settings.SettingsActivity; -import org.chromium.chrome.browser.settings.SettingsActivityTest; +import org.chromium.chrome.browser.settings.SettingsActivityTestRule; import org.chromium.content_public.browser.test.util.Criteria; import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.TestThreadUtils; @@ -41,6 +40,9 @@ public class AutofillProfilesFragmentTest { @Rule public final AutofillTestRule rule = new AutofillTestRule(); + @Rule + public final SettingsActivityTestRule<AutofillProfilesFragment> mSettingsActivityTestRule = + new SettingsActivityTestRule<>(AutofillProfilesFragment.class); @Before public void setUp() throws TimeoutException { @@ -65,9 +67,7 @@ @MediumTest @Feature({"Preferences"}) public void testAddProfile() throws Exception { - SettingsActivity activity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), - AutofillProfilesFragment.class.getName()); + SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity(); AutofillProfilesFragment autofillProfileFragment = (AutofillProfilesFragment) activity.getMainFragment(); @@ -108,9 +108,7 @@ @MediumTest @Feature({"Preferences"}) public void testAddIncompletedProfile() throws Exception { - SettingsActivity activity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), - AutofillProfilesFragment.class.getName()); + SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity(); AutofillProfilesFragment autofillProfileFragment = (AutofillProfilesFragment) activity.getMainFragment(); @@ -133,9 +131,7 @@ @MediumTest @Feature({"Preferences"}) public void testDeleteProfile() throws Exception { - SettingsActivity activity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), - AutofillProfilesFragment.class.getName()); + SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity(); AutofillProfilesFragment autofillProfileFragment = (AutofillProfilesFragment) activity.getMainFragment(); @@ -167,9 +163,7 @@ @MediumTest @Feature({"Preferences"}) public void testEditProfile() throws Exception { - SettingsActivity activity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), - AutofillProfilesFragment.class.getName()); + SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity(); AutofillProfilesFragment autofillProfileFragment = (AutofillProfilesFragment) activity.getMainFragment(); @@ -211,9 +205,7 @@ @MediumTest @Feature({"Preferences"}) public void testOpenProfileWithCompleteState() throws Exception { - SettingsActivity activity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), - AutofillProfilesFragment.class.getName()); + SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity(); AutofillProfilesFragment autofillProfileFragment = (AutofillProfilesFragment) activity.getMainFragment(); @@ -239,11 +231,8 @@ @MediumTest @Feature({"Preferences"}) public void testOpenProfileWithInvalidState() throws Exception { - SettingsActivity activity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), - AutofillProfilesFragment.class.getName()); - AutofillProfilesFragment autofillProfileFragment = - (AutofillProfilesFragment) activity.getMainFragment(); + SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity(); + AutofillProfilesFragment autofillProfileFragment = mSettingsActivityTestRule.getFragment(); // Check the preferences on the initial screen. Assert.assertEquals(6 /* One toggle + one add button + four profiles. */, @@ -267,9 +256,7 @@ @MediumTest @Feature({"Preferences"}) public void testKeyboardShownOnDpadCenter() throws TimeoutException { - SettingsActivity activity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), - AutofillProfilesFragment.class.getName()); + SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity(); AutofillProfilesFragment fragment = (AutofillProfilesFragment) activity.getMainFragment(); AutofillProfileEditorPreference addProfile =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java index f8461b1..9e211a0 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java
@@ -36,16 +36,13 @@ * Tests for making sure the distillability service is communicating correctly. */ @RunWith(ChromeJUnit4ClassRunner.class) -@CommandLineFlags.Add({ - "enable-dom-distiller", "reader-mode-heuristics=alwaystrue", - ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, -}) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) public class DistillabilityServiceTest { @Rule public ChromeActivityTestRule<ChromeActivity> mActivityTestRule = new ChromeActivityTestRule<>(ChromeActivity.class); - private static final String TEST_PAGE = "/chrome/test/data/android/simple.html"; + private static final String TEST_PAGE = "/chrome/test/data/dom_distiller/simple_article.html"; @Before public void setUp() throws InterruptedException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeTest.java new file mode 100644 index 0000000..0d455ff --- /dev/null +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeTest.java
@@ -0,0 +1,209 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.dom_distiller; + +import static com.google.common.truth.Truth.assertThat; + +import static org.hamcrest.Matchers.notNullValue; + +import android.app.Activity; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.MediumTest; + +import androidx.annotation.NonNull; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.ApplicationStatus; +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Restriction; +import org.chromium.chrome.browser.ChromeTabbedActivity; +import org.chromium.chrome.browser.customtabs.CustomTabActivity; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.infobar.InfoBar; +import org.chromium.chrome.browser.infobar.ReaderModeInfoBar; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.test.ChromeActivityTestRule; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.util.ChromeTabUtils; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.content_public.browser.test.util.Criteria; +import org.chromium.content_public.browser.test.util.CriteriaHelper; +import org.chromium.content_public.browser.test.util.TestCallbackHelperContainer; +import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; + +import java.util.Objects; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicReference; + +/** + * End-to-end tests for Reader Mode (Simplified view). + */ +@RunWith(ChromeJUnit4ClassRunner.class) +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +public class ReaderModeTest { + @Rule + public ChromeActivityTestRule<ChromeTabbedActivity> mActivityTestRule = + new ChromeActivityTestRule<>(ChromeTabbedActivity.class); + + private static final String TEST_PAGE = "/chrome/test/data/dom_distiller/simple_article.html"; + private static final String TITLE = "Test Page Title"; + private static final String CONTENT = "Lorem ipsum"; + + @SuppressWarnings("FieldCanBeLocal") + private EmbeddedTestServer mTestServer; + private String mURL; + + @Before + public void setUp() throws InterruptedException, TimeoutException { + mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); + mURL = mTestServer.getURL(TEST_PAGE); + mActivityTestRule.startMainActivityWithURL(mURL); + } + + @After + public void tearDown() { + mTestServer.stopAndDestroyServer(); + } + + @Test + @MediumTest + public void testReaderModeInfobarShown() { + waitForReaderModeInfobar(); + } + + @Test + @MediumTest + @Features.EnableFeatures(ChromeFeatureList.READER_MODE_IN_CCT) + public void testReaderModeInCCT() throws TimeoutException { + Tab originalTab = mActivityTestRule.getActivity().getActivityTab(); + String innerHtml = getInnerHtml(originalTab); + assertThat(innerHtml).doesNotContain("article-header"); + + TestThreadUtils.runOnUiThreadBlocking(() -> { + mActivityTestRule.getActivity().getReaderModeManager().activateReaderMode(originalTab); + }); + CustomTabActivity customTabActivity = waitForCustomTabActivity(); + CriteriaHelper.pollUiThread( + Criteria.checkThat(customTabActivity::getActivityTab, notNullValue())); + @NonNull + Tab distillerViewerTab = Objects.requireNonNull(customTabActivity.getActivityTab()); + waitForDistillation(TITLE, distillerViewerTab); + + innerHtml = getInnerHtml(distillerViewerTab); + assertThat(innerHtml).contains("article-header"); + assertThat(innerHtml).contains(CONTENT); + } + + @Test + @MediumTest + @Features.EnableFeatures(ChromeFeatureList.READER_MODE_IN_CCT) + public void testReaderModeInCCT_Incognito() throws TimeoutException { + ChromeTabUtils.fullyLoadUrlInNewTab(InstrumentationRegistry.getInstrumentation(), + mActivityTestRule.getActivity(), mURL, true); + + Tab originalTab = mActivityTestRule.getActivity().getActivityTab(); + assertThat(originalTab.isIncognito()).isEqualTo(true); + String innerHtml = getInnerHtml(originalTab); + assertThat(innerHtml).doesNotContain("article-header"); + + TestThreadUtils.runOnUiThreadBlocking(() -> { + mActivityTestRule.getActivity().getReaderModeManager().activateReaderMode(originalTab); + }); + CustomTabActivity customTabActivity = waitForCustomTabActivity(); + CriteriaHelper.pollUiThread( + Criteria.checkThat(customTabActivity::getActivityTab, notNullValue())); + @NonNull + Tab distillerViewerTab = Objects.requireNonNull(customTabActivity.getActivityTab()); + waitForDistillation(TITLE, distillerViewerTab); + + innerHtml = getInnerHtml(distillerViewerTab); + assertThat(innerHtml).contains("article-header"); + assertThat(innerHtml).contains(CONTENT); + } + + @Test + @MediumTest + @Features.DisableFeatures(ChromeFeatureList.READER_MODE_IN_CCT) + public void testReaderModeInTab() throws TimeoutException { + Tab tab = mActivityTestRule.getActivity().getActivityTab(); + String innerHtml = getInnerHtml(tab); + assertThat(innerHtml).doesNotContain("article-header"); + + TestThreadUtils.runOnUiThreadBlocking(() -> { + mActivityTestRule.getActivity().getReaderModeManager().activateReaderMode(tab); + }); + waitForDistillation(TITLE, mActivityTestRule.getActivity().getActivityTab()); + + innerHtml = getInnerHtml(tab); + assertThat(innerHtml).contains("article-header"); + assertThat(innerHtml).contains(CONTENT); + } + + /** + * Wait until a {@link CustomTabActivity} shows up, and return it. + * @return a {@link CustomTabActivity} + */ + private CustomTabActivity waitForCustomTabActivity() { + AtomicReference<CustomTabActivity> activity = new AtomicReference<>(); + CriteriaHelper.pollUiThread(() -> { + for (Activity runningActivity : ApplicationStatus.getRunningActivities()) { + if (runningActivity instanceof CustomTabActivity) { + activity.set((CustomTabActivity) runningActivity); + return true; + } + } + return false; + }); + return activity.get(); + } + + /** + * @param tab The tab to be inspected. + * @return The inner HTML of a certain {@link Tab}. + */ + private String getInnerHtml(Tab tab) throws TimeoutException { + TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper javascriptHelper = + new TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper(); + javascriptHelper.evaluateJavaScriptForTests( + tab.getWebContents(), "document.body.innerHTML"); + javascriptHelper.waitUntilHasValue(); + return javascriptHelper.getJsonResultAndClear(); + } + + /** + * Wait until a {@link ReaderModeInfoBar} shows up. + */ + private void waitForReaderModeInfobar() { + CriteriaHelper.pollUiThread(() -> { + for (InfoBar infobar : mActivityTestRule.getInfoBars()) { + if (infobar instanceof ReaderModeInfoBar) return true; + } + return false; + }); + } + + /** + * Wait until the distilled content is shown on the {@link Tab}. + * @param expectedTitle The expected title of the distilled content + * @param tab the tab to wait + */ + private void waitForDistillation( + @SuppressWarnings("SameParameterValue") String expectedTitle, Tab tab) { + CriteriaHelper.pollUiThread( + Criteria.equals("chrome-distiller", () -> tab.getUrl().getScheme())); + ChromeTabUtils.waitForTabPageLoaded(tab, null); + // Distiller Viewer load the content dynamically, so waitForTabPageLoaded() is not enough. + CriteriaHelper.pollUiThread(Criteria.equals(expectedTitle, tab::getTitle)); + } +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/night_mode/settings/ThemeSettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/night_mode/settings/ThemeSettingsFragmentTest.java index 753f35f..3112aa4 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/night_mode/settings/ThemeSettingsFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/night_mode/settings/ThemeSettingsFragmentTest.java
@@ -8,12 +8,12 @@ import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.UI_THEME_DARKEN_WEBSITES_ENABLED; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.UI_THEME_SETTING; -import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.view.View; import android.widget.LinearLayout; import org.junit.Assert; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,8 +26,7 @@ import org.chromium.chrome.browser.night_mode.NightModeUtils; import org.chromium.chrome.browser.night_mode.ThemeType; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; -import org.chromium.chrome.browser.settings.SettingsActivity; -import org.chromium.chrome.browser.settings.SettingsActivityTest; +import org.chromium.chrome.browser.settings.SettingsActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.util.browser.Features; import org.chromium.components.browser_ui.widget.RadioButtonWithDescription; @@ -51,6 +50,10 @@ Arrays.asList(new ParameterSet().value(false).name("DefaultLightDisabled"), new ParameterSet().value(true).name("DefaultLightEnabled")); + @Rule + public SettingsActivityTestRule<ThemeSettingsFragment> mSettingsActivityTestRule = + new SettingsActivityTestRule<>(ThemeSettingsFragment.class); + private boolean mDefaultToLight; private ThemeSettingsFragment mFragment; private RadioButtonGroupThemePreference mPreference; @@ -65,10 +68,8 @@ super.setUpTest(); SharedPreferencesManager.getInstance().removeKey(UI_THEME_SETTING); SharedPreferencesManager.getInstance().removeKey(UI_THEME_DARKEN_WEBSITES_ENABLED); - SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), - ThemeSettingsFragment.class.getName()); - mFragment = (ThemeSettingsFragment) settingsActivity.getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); + mFragment = mSettingsActivityTestRule.getFragment(); mPreference = (RadioButtonGroupThemePreference) mFragment.findPreference( ThemeSettingsFragment.PREF_UI_THEME_PREF); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/settings/NotificationSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/settings/NotificationSettingsTest.java index f7c360da..ca7860b6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/settings/NotificationSettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/settings/NotificationSettingsTest.java
@@ -5,7 +5,6 @@ package org.chromium.chrome.browser.notifications.settings; import android.os.Build; -import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import androidx.fragment.app.Fragment; @@ -24,7 +23,7 @@ import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.offlinepages.prefetch.PrefetchPrefs; import org.chromium.chrome.browser.settings.SettingsActivity; -import org.chromium.chrome.browser.settings.SettingsActivityTest; +import org.chromium.chrome.browser.settings.SettingsActivityTestRule; import org.chromium.chrome.browser.site_settings.ContentSettingsResources; import org.chromium.chrome.browser.site_settings.SingleCategorySettings; import org.chromium.chrome.browser.site_settings.SiteSettingsCategory; @@ -45,6 +44,9 @@ public class NotificationSettingsTest { @Rule public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); + @Rule + public final SettingsActivityTestRule<NotificationSettings> mSettingsActivityTestRule = + new SettingsActivityTestRule<>(NotificationSettings.class); private SettingsActivity mActivity; @Rule @@ -52,8 +54,7 @@ @Before public void setUp() { - mActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), NotificationSettings.class.getName()); + mActivity = mSettingsActivityTestRule.startSettingsActivity(); } // TODO(https://crbug.com/894334): Remove format suppression once formatting bug is fixed. @@ -66,8 +67,7 @@ public void testContentSuggestionsToggle() { // clang-format on - final PreferenceFragmentCompat fragment = - (PreferenceFragmentCompat) mActivity.getMainFragment(); + final PreferenceFragmentCompat fragment = mSettingsActivityTestRule.getFragment(); final ChromeSwitchPreference toggle = (ChromeSwitchPreference) fragment.findPreference( NotificationSettings.PREF_SUGGESTIONS); @@ -103,7 +103,7 @@ public void testToggleDisabledWhenPrefetchingDisabled() { // clang-format on - PreferenceFragmentCompat fragment = (PreferenceFragmentCompat) mActivity.getMainFragment(); + PreferenceFragmentCompat fragment = mSettingsActivityTestRule.getFragment(); ChromeSwitchPreference toggle = (ChromeSwitchPreference) fragment.findPreference( NotificationSettings.PREF_SUGGESTIONS); @@ -123,8 +123,7 @@ // clang-format on TestThreadUtils.runOnUiThreadBlocking(() -> { - PreferenceFragmentCompat fragment = - (PreferenceFragmentCompat) mActivity.getMainFragment(); + PreferenceFragmentCompat fragment = mSettingsActivityTestRule.getFragment(); Preference fromWebsites = fragment.findPreference(NotificationSettings.PREF_FROM_WEBSITES); @@ -154,8 +153,7 @@ public void testWebsiteNotificationsSummary() { // clang-format on - final PreferenceFragmentCompat fragment = - (PreferenceFragmentCompat) mActivity.getMainFragment(); + final PreferenceFragmentCompat fragment = mSettingsActivityTestRule.getFragment(); final Preference fromWebsites = fragment.findPreference(NotificationSettings.PREF_FROM_WEBSITES);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsTest.java index 9b8e569..dd716684 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsTest.java
@@ -96,7 +96,7 @@ import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.PrefServiceBridge; import org.chromium.chrome.browser.settings.SettingsActivity; -import org.chromium.chrome.browser.settings.SettingsActivityTest; +import org.chromium.chrome.browser.settings.SettingsActivityTestRule; import org.chromium.chrome.browser.settings.SettingsLauncher; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.test.ChromeBrowserTestRule; @@ -137,6 +137,10 @@ public IntentsTestRule<HistoryActivity> mHistoryActivityTestRule = new IntentsTestRule<>(HistoryActivity.class, false, false); + @Rule + public SettingsActivityTestRule<PasswordSettings> mSettingsActivityTestRule = + new SettingsActivityTestRule<>(PasswordSettings.class); + private static final class FakePasswordManagerHandler implements PasswordManagerHandler { // This class has exactly one observer, set on construction and expected to last at least as // long as this object (a good candidate is the owner of this object). @@ -432,7 +436,7 @@ TestThreadUtils.runOnUiThreadBlocking(() -> { // Disable the timer for progress bar. - PasswordSettings fragment = (PasswordSettings) settingsActivity.getMainFragment(); + PasswordSettings fragment = mSettingsActivityTestRule.getFragment(); fragment.getExportFlowForTesting() .getDialogManagerForTesting() .replaceCallbackDelayerForTesting(mManualDelayer); @@ -481,7 +485,7 @@ private void requestShowingExportErrorWithButton( SettingsActivity settingsActivity, int positiveButtonLabelId) { TestThreadUtils.runOnUiThreadBlocking(() -> { - PasswordSettings fragment = (PasswordSettings) settingsActivity.getMainFragment(); + PasswordSettings fragment = mSettingsActivityTestRule.getFragment(); // To show an error, the error type for UMA needs to be specified. Because it is not // relevant for cases when the error is forcibly displayed in tests, // HistogramExportResult.NO_CONSUMER is passed as an arbitrarily chosen value. @@ -532,12 +536,10 @@ @Feature({"Preferences"}) public void testResetListEmpty() { // Load the preferences, they should show the empty list. - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); TestThreadUtils.runOnUiThreadBlocking(() -> { - PasswordSettings savePasswordPreferences = - (PasswordSettings) settingsActivity.getMainFragment(); + PasswordSettings savePasswordPreferences = mSettingsActivityTestRule.getFragment(); // Emulate an update from PasswordStore. This should not crash. savePasswordPreferences.passwordListAvailable(0); }); @@ -555,12 +557,10 @@ PrefServiceBridge.getInstance().setBoolean(Pref.REMEMBER_PASSWORDS_ENABLED, true); }); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); TestThreadUtils.runOnUiThreadBlocking(() -> { - PasswordSettings savedPasswordPrefs = - (PasswordSettings) settingsActivity.getMainFragment(); + PasswordSettings savedPasswordPrefs = mSettingsActivityTestRule.getFragment(); ChromeSwitchPreference onOffSwitch = (ChromeSwitchPreference) savedPasswordPrefs.findPreference( PasswordSettings.PREF_SAVE_PASSWORDS_SWITCH); @@ -578,11 +578,9 @@ PrefServiceBridge.getInstance().setBoolean(Pref.REMEMBER_PASSWORDS_ENABLED, false); }); - final SettingsActivity settingsActivity2 = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); TestThreadUtils.runOnUiThreadBlocking(() -> { - PasswordSettings savedPasswordPrefs = - (PasswordSettings) settingsActivity2.getMainFragment(); + PasswordSettings savedPasswordPrefs = mSettingsActivityTestRule.getFragment(); ChromeSwitchPreference onOffSwitch = (ChromeSwitchPreference) savedPasswordPrefs.findPreference( PasswordSettings.PREF_SAVE_PASSWORDS_SWITCH); @@ -601,9 +599,8 @@ // Add a password entry, because the link is only displayed if the password list is not // empty. setPasswordSource(new SavedPasswordEntry("https://example.com", "test user", "password")); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); - PasswordSettings savedPasswordPrefs = (PasswordSettings) settingsActivity.getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); + PasswordSettings savedPasswordPrefs = mSettingsActivityTestRule.getFragment(); Assert.assertNull( savedPasswordPrefs.findPreference(PasswordSettings.PREF_KEY_MANAGE_ACCOUNT_LINK)); } @@ -622,9 +619,8 @@ overrideProfileSyncService(false, false); SigninTestUtil.addAndSignInTestAccount(); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); - PasswordSettings savedPasswordPrefs = (PasswordSettings) settingsActivity.getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); + PasswordSettings savedPasswordPrefs = mSettingsActivityTestRule.getFragment(); Assert.assertNull( savedPasswordPrefs.findPreference(PasswordSettings.PREF_KEY_MANAGE_ACCOUNT_LINK)); @@ -644,9 +640,8 @@ overrideProfileSyncService(false, true); SigninTestUtil.addAndSignInTestAccount(); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); - PasswordSettings savedPasswordPrefs = (PasswordSettings) settingsActivity.getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); + PasswordSettings savedPasswordPrefs = mSettingsActivityTestRule.getFragment(); Assert.assertNotNull( savedPasswordPrefs.findPreference(PasswordSettings.PREF_KEY_MANAGE_ACCOUNT_LINK)); @@ -666,9 +661,8 @@ overrideProfileSyncService(true, true); SigninTestUtil.addAndSignInTestAccount(); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); - PasswordSettings savedPasswordPrefs = (PasswordSettings) settingsActivity.getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); + PasswordSettings savedPasswordPrefs = mSettingsActivityTestRule.getFragment(); Assert.assertNull( savedPasswordPrefs.findPreference(PasswordSettings.PREF_KEY_MANAGE_ACCOUNT_LINK)); @@ -687,11 +681,10 @@ Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED, true); }); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); TestThreadUtils.runOnUiThreadBlocking(() -> { - PasswordSettings passwordPrefs = (PasswordSettings) settingsActivity.getMainFragment(); + PasswordSettings passwordPrefs = mSettingsActivityTestRule.getFragment(); ChromeBaseCheckBoxPreference onOffSwitch = (ChromeBaseCheckBoxPreference) passwordPrefs.findPreference( PasswordSettings.PREF_AUTOSIGNIN_SWITCH); @@ -710,10 +703,9 @@ Pref.PASSWORD_MANAGER_AUTO_SIGNIN_ENABLED, false); }); - final SettingsActivity settingsActivity2 = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); TestThreadUtils.runOnUiThreadBlocking(() -> { - PasswordSettings passwordPrefs = (PasswordSettings) settingsActivity2.getMainFragment(); + PasswordSettings passwordPrefs = mSettingsActivityTestRule.getFragment(); ChromeBaseCheckBoxPreference onOffSwitch = (ChromeBaseCheckBoxPreference) passwordPrefs.findPreference( PasswordSettings.PREF_AUTOSIGNIN_SWITCH); @@ -737,8 +729,7 @@ "example user", "example password"), new SavedPasswordEntry("https://test.com", "test user", "test password")}); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); Espresso.onView(withText(containsString("test user"))).perform(click()); @@ -782,8 +773,7 @@ mMockPasswordEditingDelegate); setPasswordSource(new SavedPasswordEntry("https://example.com", "test user", "password")); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); Espresso.onView(withText(containsString("test user"))).perform(click()); @@ -812,8 +802,7 @@ mMockPasswordEditingDelegate); setPasswordSource(new SavedPasswordEntry("https://example.com", "test user", "password")); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); Espresso.onView(withText(containsString("test user"))).perform(click()); @@ -879,8 +868,7 @@ ReauthenticationManager.setApiOverride(ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); checkExportMenuItemState(MenuItemState.DISABLED); } @@ -896,8 +884,7 @@ ReauthenticationManager.setApiOverride(ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); checkExportMenuItemState(MenuItemState.ENABLED); } @@ -915,8 +902,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); openActionBarOverflowOrOptionsMenu( InstrumentationRegistry.getInstrumentation().getTargetContext()); @@ -944,8 +930,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -968,8 +953,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1016,8 +1000,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.UNAVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); View mainDecorView = settingsActivity.getWindow().getDecorView(); openActionBarOverflowOrOptionsMenu( @@ -1042,8 +1025,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.UNAVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Trigger exporting and let it fail on the unavailable lock. openActionBarOverflowOrOptionsMenu( @@ -1067,8 +1049,7 @@ ReauthenticationManager.setApiOverride(ReauthenticationManager.OverrideState.AVAILABLE); ReauthenticationManager.setSkipSystemReauth(true); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); openActionBarOverflowOrOptionsMenu( InstrumentationRegistry.getInstrumentation().getTargetContext()); @@ -1094,8 +1075,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Ensure that the last reauthentication time stamp is recent enough. ReauthenticationManager.recordLastReauth( @@ -1131,8 +1111,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); Intents.init(); @@ -1172,8 +1151,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); Intents.init(); @@ -1219,8 +1197,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1245,8 +1222,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1280,8 +1256,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); openActionBarOverflowOrOptionsMenu( InstrumentationRegistry.getInstrumentation().getTargetContext()); @@ -1321,8 +1296,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1350,8 +1324,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); Intents.init(); @@ -1409,8 +1382,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); Intents.init(); @@ -1462,8 +1434,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1499,8 +1470,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1538,8 +1508,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1573,8 +1542,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1619,8 +1587,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); reauthenticateAndRequestExport(settingsActivity); @@ -1658,8 +1625,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.UNAVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + final SettingsActivity settingsActivity = mSettingsActivityTestRule.startSettingsActivity(); View mainDecorView = settingsActivity.getWindow().getDecorView(); Espresso.onView(withText(containsString("test user"))).perform(click()); @@ -1684,8 +1650,7 @@ ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); Espresso.onView(withText(containsString("test user"))).perform(click()); @@ -1707,11 +1672,8 @@ @SuppressWarnings("AlwaysShowAction") // We need to ensure the icon is in the action bar. public void testSearchIconVisibleInActionBarWithFeature() { setPasswordSource(null); // Initialize empty preferences. - PasswordSettings f = - (PasswordSettings) SettingsActivityTest - .startSettingsActivity(InstrumentationRegistry.getInstrumentation(), - PasswordSettings.class.getName()) - .getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); + PasswordSettings f = mSettingsActivityTestRule.getFragment(); // Force the search option into the action bar. TestThreadUtils.runOnUiThreadBlocking( @@ -1734,8 +1696,7 @@ setPasswordSource( // Initialize preferences new SavedPasswordEntry("https://example.com", "test user", "test password")); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); Espresso.onView(withText(containsString("test user"))).perform(click()); @@ -1749,12 +1710,9 @@ @SmallTest @Feature({"Preferences"}) public void testSearchTextInOverflowMenuVisibleWithFeature() { - setPasswordSource(null); // Initialize empty preferences. - PasswordSettings f = - (PasswordSettings) SettingsActivityTest - .startSettingsActivity(InstrumentationRegistry.getInstrumentation(), - PasswordSettings.class.getName()) - .getMainFragment(); + setPasswordSource(null); // Initialize empty preferences.mSettingsActivityTestRule + mSettingsActivityTestRule.startSettingsActivity(); + PasswordSettings f = mSettingsActivityTestRule.getFragment(); // Force the search option into the overflow menu. TestThreadUtils.runOnUiThreadBlocking( @@ -1779,8 +1737,7 @@ @Feature({"Preferences"}) public void testTriggeringSearchRestoresHelpIcon() { setPasswordSource(null); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); Espresso.onView(isRoot()).check(waitForView(withText(R.string.password_settings_title))); // Retrieve the initial status and ensure that the help option is there at all. @@ -1824,8 +1781,7 @@ @Feature({"Preferences"}) public void testSearchFiltersByUserName() { setPasswordSourceWithMultipleEntries(GREEK_GODS); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Search for a string matching multiple user names. Case doesn't need to match. Espresso.onView(withSearchMenuIdOrText()).perform(click()); @@ -1847,8 +1803,7 @@ @Feature({"Preferences"}) public void testSearchFiltersByUrl() { setPasswordSourceWithMultipleEntries(GREEK_GODS); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Search for a string that matches multiple URLs. Case doesn't need to match. Espresso.onView(withSearchMenuIdOrText()).perform(click()); @@ -1870,8 +1825,7 @@ @Feature({"Preferences"}) public void testSearchDisplaysNoResultMessageIfSearchTurnsUpEmpty() { setPasswordSourceWithMultipleEntries(GREEK_GODS); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Open the search which should hide the Account link. Espresso.onView(withSearchMenuIdOrText()).perform(click()); @@ -1903,11 +1857,7 @@ @Feature({"Preferences"}) public void testSearchIconClickedHidesExceptionsTemporarily() { setPasswordExceptions(new String[] {"http://exclu.de", "http://not-inclu.de"}); - final PasswordSettings savePasswordPreferences = - (PasswordSettings) SettingsActivityTest - .startSettingsActivity(InstrumentationRegistry.getInstrumentation(), - PasswordSettings.class.getName()) - .getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); Espresso.onView(withText(R.string.section_saved_passwords_exceptions)) .check(matches(isDisplayed())); @@ -1934,11 +1884,8 @@ @Feature({"Preferences"}) public void testSearchIconClickedHidesGeneralPrefs() { setPasswordSource(ZEUS_ON_EARTH); - final PasswordSettings prefs = - (PasswordSettings) SettingsActivityTest - .startSettingsActivity(InstrumentationRegistry.getInstrumentation(), - PasswordSettings.class.getName()) - .getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); + final PasswordSettings prefs = mSettingsActivityTestRule.getFragment(); final AtomicReference<Boolean> menuInitiallyVisible = new AtomicReference<>(); TestThreadUtils.runOnUiThreadBlocking( () @@ -1976,8 +1923,7 @@ @Feature({"Preferences"}) public void testSearchBarBackButtonRestoresGeneralPrefs() { setPasswordSourceWithMultipleEntries(GREEK_GODS); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); Espresso.onView(withSearchMenuIdOrText()).perform(click()); Espresso.onView(withId(R.id.search_src_text)) @@ -2002,8 +1948,7 @@ @Feature({"Preferences"}) public void testSearchViewCloseIconExistsOnlyToClearQueries() { setPasswordSourceWithMultipleEntries(GREEK_GODS); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Trigger search which shouldn't have the button yet. Espresso.onView(withSearchMenuIdOrText()).perform(click()); @@ -2032,11 +1977,8 @@ @Feature({"Preferences"}) public void testSearchIconColorAffectsOnlyLocalSearchDrawable() { // Open the password preferences and remember the applied color filter. - final PasswordSettings f = - (PasswordSettings) SettingsActivityTest - .startSettingsActivity(InstrumentationRegistry.getInstrumentation(), - PasswordSettings.class.getName()) - .getMainFragment(); + mSettingsActivityTestRule.startSettingsActivity(); + final PasswordSettings f = mSettingsActivityTestRule.getFragment(); Espresso.onView(withId(R.id.search_button)).check(matches(isDisplayed())); final AtomicReference<ColorFilter> passwordSearchFilter = new AtomicReference<>(); TestThreadUtils.runOnUiThreadBlocking(() -> { @@ -2085,8 +2027,7 @@ ReauthenticationManager.setApiOverride(ReauthenticationManager.OverrideState.AVAILABLE); ReauthenticationManager.setScreenLockSetUpOverride( ReauthenticationManager.OverrideState.AVAILABLE); - SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Open the search and filter all but "Zeus". Espresso.onView(withSearchMenuIdOrText()).perform(click());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettingsTest.java index 576b23d..2e92310 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettingsTest.java
@@ -24,7 +24,7 @@ import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; import org.chromium.chrome.browser.settings.MainSettings; import org.chromium.chrome.browser.settings.SettingsActivity; -import org.chromium.chrome.browser.settings.SettingsActivityTest; +import org.chromium.chrome.browser.settings.SettingsActivityTestRule; import org.chromium.chrome.browser.site_settings.ContentSettingValues; import org.chromium.chrome.browser.site_settings.PermissionInfo; import org.chromium.chrome.browser.site_settings.WebsitePreferenceBridgeJni; @@ -51,6 +51,9 @@ public class SearchEngineSettingsTest { @Rule public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); + @Rule + public final SettingsActivityTestRule<SearchEngineSettings> mSettingsActivityTestRule = + new SettingsActivityTestRule<>(SearchEngineSettings.class); /** * Change search engine and make sure it works correctly. @@ -63,12 +66,11 @@ public void testSearchEnginePreference() throws Exception { ensureTemplateUrlServiceLoaded(); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), SearchEngineSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Set the second search engine as the default using TemplateUrlService. TestThreadUtils.runOnUiThreadBlocking(() -> { - SearchEngineSettings pref = (SearchEngineSettings) settingsActivity.getMainFragment(); + SearchEngineSettings pref = mSettingsActivityTestRule.getFragment(); pref.setValueForTesting("1"); // Ensure that the second search engine in the list is selected. @@ -178,18 +180,17 @@ public void testSearchEnginePreferenceHttp() throws Exception { ensureTemplateUrlServiceLoaded(); - final SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), SearchEngineSettings.class.getName()); + mSettingsActivityTestRule.startSettingsActivity(); // Set the first search engine as the default using TemplateUrlService. TestThreadUtils.runOnUiThreadBlocking(() -> { - SearchEngineSettings pref = (SearchEngineSettings) settingsActivity.getMainFragment(); + SearchEngineSettings pref = mSettingsActivityTestRule.getFragment(); pref.setValueForTesting("0"); }); TestThreadUtils.runOnUiThreadBlocking(() -> { // Ensure that the first search engine in the list is selected. - SearchEngineSettings pref = (SearchEngineSettings) settingsActivity.getMainFragment(); + SearchEngineSettings pref = mSettingsActivityTestRule.getFragment(); Assert.assertNotNull(pref); Assert.assertEquals("0", pref.getValueForTesting());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java index 5b8294a..1fdc64d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java
@@ -10,13 +10,8 @@ import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static android.support.test.espresso.matcher.ViewMatchers.withText; -import android.app.Activity; -import android.app.Instrumentation; -import android.content.Context; -import android.content.Intent; import android.support.test.filters.SmallTest; -import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -36,20 +31,6 @@ */ @RunWith(ChromeJUnit4ClassRunner.class) public class SettingsActivityTest { - /** - * Launches the settings activity with the specified fragment. - * Returns the activity that was started. - */ - public static SettingsActivity startSettingsActivity( - Instrumentation instrumentation, String fragmentName) { - Context context = instrumentation.getTargetContext(); - Intent intent = - SettingsLauncher.getInstance().createIntentForSettingsPage(context, fragmentName); - Activity activity = instrumentation.startActivitySync(intent); - Assert.assertTrue(activity instanceof SettingsActivity); - return (SettingsActivity) activity; - } - @Rule public SettingsActivityTestRule<MainSettings> mSettingsActivityTestRule = new SettingsActivityTestRule<>(MainSettings.class);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java index 22997171..54cf768 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java
@@ -15,7 +15,6 @@ import static org.hamcrest.core.AllOf.allOf; -import android.support.test.InstrumentationRegistry; import android.support.test.espresso.contrib.RecyclerViewActions; import android.view.View; import android.widget.ImageView; @@ -26,6 +25,7 @@ import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -39,7 +39,7 @@ import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.PrefServiceBridge; import org.chromium.chrome.browser.settings.SettingsActivity; -import org.chromium.chrome.browser.settings.SettingsActivityTest; +import org.chromium.chrome.browser.settings.SettingsActivityTestRule; import org.chromium.chrome.browser.translate.TranslateBridge; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.util.browser.RecyclerViewTestUtils; @@ -56,13 +56,14 @@ @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public class LanguageSettingsTest { // clang-format on - + @Rule + public final SettingsActivityTestRule<LanguageSettings> mSettingsActivityTestRule = + new SettingsActivityTestRule<>(LanguageSettings.class); private SettingsActivity mActivity; @Before public void setUp() throws Exception { - mActivity = SettingsActivityTest.startSettingsActivity( - InstrumentationRegistry.getInstrumentation(), LanguageSettings.class.getName()); + mActivity = mSettingsActivityTestRule.startSettingsActivity(); } private void addLanguage() {
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 88e9b20d..4e4b3666 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -8994,6 +8994,11 @@ Dark Theme </message> + <!-- Live caption. --> + <message name="IDS_LIVE_CAPTION_BUBBLE_TITLE" desc="Title for the Live Caption bubble"> + Live Caption + </message> + <!-- Media Galleries. --> <if expr="not is_android"> <message name="IDS_MEDIA_GALLERIES_DIALOG_HEADER" desc="Header for media gallery permissions dialog.">
diff --git a/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_BUBBLE_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_BUBBLE_TITLE.png.sha1 new file mode 100644 index 0000000..dd1b2633 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_BUBBLE_TITLE.png.sha1
@@ -0,0 +1 @@ +23623f3947076791ead1af3b2c0435977a59e2a0 \ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_af.xtb b/chrome/app/resources/chromium_strings_af.xtb index db56d115..a5b15583 100644 --- a/chrome/app/resources/chromium_strings_af.xtb +++ b/chrome/app/resources/chromium_strings_af.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Google API-sleutels ontbreek. Sommige funksies van Chromium sal gedeaktiveer word.</translation> <translation id="3296368748942286671">Hou aan om agtergrondprogramme te laat loop wanneer Chromium toe is</translation> <translation id="331951419404882060">Chromium-bedryfstelsel kon nie jou data sinkroniseer nie weens 'n fout met aanmelding.</translation> +<translation id="347328004046849135">Chromium sal jou in kennis stel wanneer jy met 'n gekompromitteerde wagwoord aanmeld</translation> <translation id="3474745554856756813">Dit sal <ph name="ITEMS_COUNT" /> items op hierdie toestel uitvee. Meld as <ph name="USER_EMAIL" /> by Chromium aan om jou data later op te haal.</translation> <translation id="3509308970982693815">Maak asseblief alle Chromium-vensters toe en probeer weer.</translation> <translation id="3575459661164320785">Daar is skadelike sagteware op jou rekenaar. Chromium kan dit verwyder, jou instellings teruglaai en uitbreidings deaktiveer om jou blaaier weer normaal te laat werk.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Verlaat Chromium in elk geval?</translation> <translation id="4748217263233248895">'n Spesiale sekuriteitopdatering vir Chromium is sopas toegepas. Herbegin nou en ons sal jou oortjies teruglaai.</translation> <translation id="4750035648288509542">Amper op datum! Herbegin Chromium om opdatering te voltooi. Incognitovensters sal nie weer oopgemaak word nie.</translation> +<translation id="4788777615168560705">Chromium kan nie jou wagwoorde nagaan nie. Probeer ná 24 weer uur of <ph name="BEGIN_LINK" />gaan wagwoorde in jou Google-rekening na<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Dit gebruik dieselfde speltoetser wat in Google-soektog gebruik word. Teks wat jy in die blaaier tik, word na Google toe gestuur. Jy kan altyd hierdie gedrag in instellings verander.</translation> <translation id="4888717733111232871">Inkomende reël vir Chromium om mDNS-verkeer toe te laat.</translation> <translation id="4943838377383847465">Chromium is in agtergrondmodus.</translation> <translation id="4987820182225656817">Gaste kan Chromium gebruik sonder om iets agter te laat.</translation> <translation id="4994636714258228724">Voeg jouself by Chromium</translation> +<translation id="5224391634244552924">Geen gestoorde wagwoorde nie. Chromium kan jou wagwoorde nagaan wanneer jy hulle stoor.</translation> <translation id="5277894862589591112">Herbegin Chromium om jou veranderinge toe te pas</translation> <translation id="5358375970380395591">Jy meld tans met 'n bestuurde rekening aan en gee sy administrateur beheer oor jou Chromium-profiel. Jou Chromium-data, soos jou programme, boekmerke, geskiedenis, wagwoorde en ander instellings, sal permanent aan <ph name="USER_NAME" /> gekoppel word. Jy sal hierdie data via die Google-rekening se kontroleskerm kan uitvee, maar jy sal nie hierdie data met 'n ander rekening kan assosieer nie. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Dateer Chromium tans op (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium-bedryfstelsel kon nie jou data sinkroniseer nie. Dateer asseblief jou Sinkroniseringwagfrase op.</translation> <translation id="7067091210845072982">As 'n prent nie 'n nuttige beskrywing het nie, sal Chromium probeer om een vir jou te verskaf. Prente word na Google toe gestuur om beskrywings te skep.</translation> <translation id="7196312274710523067">Kon nie Chromium begin nie. Probeer weer.</translation> +<translation id="7197677400338048821">Chromium kan nie jou wagwoorde nagaan nie. Probeer weer ná 24 uur.</translation> <translation id="7205698830395646142">Versteek in Chromium-kieslys</translation> <translation id="7223968959479464213">Taakbestuurder – Chromium</translation> <translation id="731644333568559921">Dateer Chromium-bedryfstelsel op</translation>
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb index 78dea9ec..ee23734 100644 --- a/chrome/app/resources/chromium_strings_ar.xtb +++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -5,7 +5,7 @@ <translation id="1098170124587656448">يستطيع Chromium مساعدتك في الحفاظ على أمان معلوماتك من عمليات اختراق البيانات والإضافات الضارة وغيرها من المشاكل.</translation> <translation id="1104942323762546749">يرغب Chromium في تصدير كلمات المرور، لذا يُرجى كتابة كلمة مرور Windows للسماح بذلك.</translation> <translation id="113122355610423240">Chromium هو متصفحك التلقائي</translation> -<translation id="1185134272377778587">لمحة عامة عن Chromium</translation> +<translation id="1185134272377778587">لمحة عن Chromium</translation> <translation id="1396446129537741364">يحاول Chromium إظهار كلمات المرور.</translation> <translation id="1414495520565016063">تم تسجيل دخولك إلى Chromium!</translation> <translation id="151962892725702025">تعذر على نظام التشغيل Chromium مزامنة البيانات نظرًا لأن المزامنة غير متاحة في نطاقك.</translation> @@ -58,6 +58,7 @@ <translation id="328888136576916638">مفاتيح واجهة برمجة تطبيقات Google مفقودة. وسيترتب على ذلك توقف بعض وظائف Chromium عن العمل.</translation> <translation id="3296368748942286671">استمرار تشغيل تطبيقات الخلفية عند إغلاق Chromium</translation> <translation id="331951419404882060">تعذر على نظام التشغيل Chromium مزامنة البيانات نظرًا لحدوث خطأ أثناء تسجيل الدخول.</translation> +<translation id="347328004046849135">في حال تسجيل الدخول باستخدام كلمة مرور محتمَل تعرّضها للاختراق، سيرسل Chromium إشعارًا إليك.</translation> <translation id="3474745554856756813">سيعمل هذا على حذف <ph name="ITEMS_COUNT" /> من العناصر من هذا الجهاز. لاسترداد بياناتك لاحقًا، سجّل الدخول إلى Chromium كـ <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">يُرجى إغلاق جميع نوافذ Chromium وإعادة المحاولة.</translation> <translation id="3575459661164320785">هناك برنامج ضار على جهاز الكمبيوتر. ويمكن لمتصفِّح Chrome إزالته واستعادة إعداداتك وإيقاف الإضافات لكي يعمل متصفِّحك بشكلٍ طبيعي من جديد.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">هل تريد الخروج من Chromium على أي حال؟</translation> <translation id="4748217263233248895">تم للتو تطبيق تحديث أمان خاص لمتصفِّح Chromium. يمكنك إعادة التشغيل الآن وستتم استعادة علامات التبويب.</translation> <translation id="4750035648288509542">أوشك التحديث على الانتهاء. يجب إعادة تشغيل Chromium لإكمال التحديث. ولن تتم إعادة فتح نوافذ التصفّح المتخفي.</translation> +<translation id="4788777615168560705">يتعذّر على Chromium التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة أو <ph name="BEGIN_LINK" />التحقُّق من كلمات المرور في حسابك على Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">يستخدم ذلك المدقق الإملائي نفسه الذي يتم استخدامه في "بحث Google". ويتم إرسال النص الذي تكتبه في المتصفّح إلى Google. يمكنك دائمًا تغيير هذا السلوك في الإعدادات.</translation> <translation id="4888717733111232871">قاعدة الوارد إلى Chromium للسماح بحركة مرور mDNS.</translation> <translation id="4943838377383847465">Chromium في وضع الخلفية.</translation> <translation id="4987820182225656817">يمكن للضيف استخدام Chromium بدون أن يترك أي أثر وراءه.</translation> <translation id="4994636714258228724">إضافة نفسك إلى Chromium</translation> +<translation id="5224391634244552924">ما مِن كلمات مرور محفوظة. لا يستطيع Chromium التحقُّق من كلمات المرور إلا عند حفظها.</translation> <translation id="5277894862589591112">لتطبيق التغييرات، يُرجى إعادة تشغيل Chromium</translation> <translation id="5358375970380395591">أنت تسجل الدخول باستخدام حساب يخضع للإدارة وتتيح للمشرف إمكانية التحكم في ملفك الشخصي على Chromium. وستكون بياناتك في Chromium مثل تطبيقاتك وإشاراتك المرجعية وسجلك وكلمات المرور التابعة لك والإعدادات الأخرى مرتبطة دائمًا بالمستخدم <ph name="USER_NAME" />. ستتمكن من حذف هذه البيانات عبر لوحة تحكم حسابات Google، ولكنك لن تتمكن من إقران هذه البيانات بحساب آخر. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">جارٍ تحديث Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">تعذر على نظام التشغيل Chromium مزامنة البيانات. يُرجى تحديث عبارة مرور المزامنة.</translation> <translation id="7067091210845072982">في حال لم تتضمن صورة ما وصفًا مفيدًا، سيحاول Chromium توفير وصف لك. لإنشاء الأوصاف، سيتم إرسال الصور إلى Google.</translation> <translation id="7196312274710523067">تعذَّر إطلاق Chromium. يُرجى إعادة المحاولة.</translation> +<translation id="7197677400338048821">يتعذّر على Chromium التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة.</translation> <translation id="7205698830395646142">الإخفاء في قائمة Chromium</translation> <translation id="7223968959479464213">إدارة المهام - Chromium</translation> <translation id="731644333568559921">تحديث ن&ظام التشغيل Chromium</translation> @@ -180,7 +184,7 @@ <translation id="7451052299415159299">يحتاج Chromium إلى إذن للوصول إلى الكاميرا من أجل موقع الويب هذا.</translation> <translation id="7483335560992089831">لا يمكن تثبيت إصدار Chromium ذاته الذي يتم تشغيله حاليًا. يُرجى إغلاق Chromium وإعادة المحاولة.</translation> <translation id="753534427205733210">{0,plural, =1{ستتم إعادة تشغيل Chromium في غضون دقيقة واحدة}zero{ستتم إعادة تشغيل Chromium في غضون # دقيقة}two{ستتم إعادة تشغيل Chromium في غضون دقيقتين}few{ستتم إعادة تشغيل Chromium في غضون # دقائق}many{ستتم إعادة تشغيل Chromium في غضون # دقيقةً}other{ستتم إعادة تشغيل Chromium في غضون # دقيقة}}</translation> -<translation id="7549178288319965365">لمحة عامة عن نظام التشغيل Chromium</translation> +<translation id="7549178288319965365">لمحة عن نظام التشغيل Chromium</translation> <translation id="7561906087460245826">محو البيانات من Chromium أيضًا (<ph name="URL" />)</translation> <translation id="7585853947355360626">في حال عدم عرض إعداد على هذه الصفحة، انتقل إلى <ph name="LINK_BEGIN" /> إعدادات نظام التشغيل Chromium<ph name="LINK_END" /></translation>
diff --git a/chrome/app/resources/chromium_strings_bs.xtb b/chrome/app/resources/chromium_strings_bs.xtb index 0ca3dbd..4f27a0d 100644 --- a/chrome/app/resources/chromium_strings_bs.xtb +++ b/chrome/app/resources/chromium_strings_bs.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Nedostaju ključevi za Google API. Neke funkcionalnosti Google Chromea će se onemogućiti.</translation> <translation id="3296368748942286671">Ostavi aplikacije da rade u pozadini kada se zatvori Chromium</translation> <translation id="331951419404882060">Chromium OS nije sinhronizirao vaše podatke zbog greške prilikom prijave.</translation> +<translation id="347328004046849135">Chromium će vas obavijestiti kada se prijavite s ugroženom lozinkom</translation> <translation id="3474745554856756813">Time će se izbrisati sljedeći broj stavki s uređaja: <ph name="ITEMS_COUNT" />. TDa biste kasnije dohvatili svoje podatke, prijavite se na Chromium kao <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Zatvorite sve prozore Chromiuma i pokušajte ponovo.</translation> <translation id="3575459661164320785">Na vašem računaru se nalazi štetni softver. Chromium ga može ukloniti, vratiti vaše postavke i onemogućiti ekstenziju kako bi vaš preglednik ponovo radio normalno.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Ipak napustiti Chromium?</translation> <translation id="4748217263233248895">Upravo je primijenjeno posebno sigurnosno ažuriranje za Chromium. Ponovo pokrenite sustav i vratit ćemo vaše kartice.</translation> <translation id="4750035648288509542">Još malo pa je ažurirano! Ponovo pokrenite Chromium da završite ažuriranje. Anonimni prozori se neće ponovo otvoriti.</translation> +<translation id="4788777615168560705">Chromium ne može provjeravati vaše lozinke. Pokušajte ponovo za 24 sata ili <ph name="BEGIN_LINK" />provjerite lozinke na Google računu<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Ova usluga koristi isti alat za provjeru pravopisa koji se koristi u Google Pretraživanju. Tekst koji pišete u pregledniku šalje se Googleu. Ovo ponašanje možete uvijek promijeniti u postavkama.</translation> <translation id="4888717733111232871">Ulazno pravilo kako bi Chromium dopustio mDNS promet.</translation> <translation id="4943838377383847465">Chromium je u pozadinskom načinu rada.</translation> <translation id="4987820182225656817">Gosti mogu koristiti Chromium, a da ne ostave tragove o korištenju.</translation> <translation id="4994636714258228724">Dodajte se u Chromium</translation> +<translation id="5224391634244552924">Nema sačuvanih lozinki. Chromium može provjeravati vaše lozinke kada ih sačuvate.</translation> <translation id="5277894862589591112">Za primjenu promjena, ponovo pokrenite Chromium</translation> <translation id="5358375970380395591">Prijavljujete se s upravljanim računom i dajete njegovom administratoru kontrolu nad svojim Chromium profilom. Vaši podaci iz Chromiuma, kao što su vaše aplikacije, oznake, historija, lozinke i druge postavke, trajno će se vezati za račun <ph name="USER_NAME" />. Moći ćete izbrisati ove podatke na kontrolnoj tabli Google računa, ali nećete moći povezati ove podatke s drugim računom. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Ažuriranje Chromiuma (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS nije uspio sinhronizirati vaše podatke. Ažurirajte svoj pristupni izraz za sinhronizaciju.</translation> <translation id="7067091210845072982">Ako slika ne sadrži koristan opis, Chromium će ga pokušati pružiti. Slike se šalju Googleu radi kreiranja opisa.</translation> <translation id="7196312274710523067">Pokretanje Chromiuma nije uspjelo. Pokušajte ponovo.</translation> +<translation id="7197677400338048821">Chromium ne može provjeravati vaše lozinke. Pokušajte ponovo za 24 sata.</translation> <translation id="7205698830395646142">Sakrij u meniju Chromiuma</translation> <translation id="7223968959479464213">Upravitelj zadataka za Chromium</translation> <translation id="731644333568559921">Ažuriraj &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb index e7e81b7f..d8520cda 100644 --- a/chrome/app/resources/chromium_strings_ca.xtb +++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Falten les claus de l'API de Google. Es desactivaran algunes de les funcions de Chromium.</translation> <translation id="3296368748942286671">Continua executant les aplicacions en segon pla quan es tanqui Chromium</translation> <translation id="331951419404882060">Chromium OS no ha pogut sincronitzar les vostres dades a causa d'un error amb l'inici de sessió.</translation> +<translation id="347328004046849135">Chromium t'enviarà una notificació quan iniciïs la sessió amb una contrasenya en perill</translation> <translation id="3474745554856756813">Amb aquesta acció, se suprimiran <ph name="ITEMS_COUNT" /> elements d'aquest dispositiu. Per recuperar les teves dades més endavant, inicia la sessió a Chromium com a <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Tanqueu totes les finestres de Chromium i torneu-ho a provar.</translation> <translation id="3575459661164320785">Hi ha programari nociu a l'ordinador. Chromium el pot suprimir, restaurar la configuració i desactivar les extensions perquè el navegador torni a funcionar amb normalitat.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Vols sortir de Chromium igualment?</translation> <translation id="4748217263233248895">S'acaba d'aplicar una actualització de seguretat especial per a Chromium. Reinicia el navegador i restaurarem les pestanyes.</translation> <translation id="4750035648288509542">Gairebé has acabat amb l'actualització. Reinicia Chromium per completar-la. Les finestres d'incògnit no es tornaran a obrir.</translation> +<translation id="4788777615168560705">Chromium no pot comprovar les teves contrasenyes. Torna-ho a provar al cap de 24 hores o <ph name="BEGIN_LINK" />comprova les contrasenyes al teu Compte de Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Fa servir el mateix corrector ortogràfic que s'utilitza a la Cerca de Google. El text que escrius al navegador s'envia a Google. Pots canviar aquest comportament sempre que vulguis a la configuració.</translation> <translation id="4888717733111232871">Regla d'entrada de Chromium per permetre el trànsit de mDNS.</translation> <translation id="4943838377383847465">Chromium està en mode de segon pla.</translation> <translation id="4987820182225656817">Els convidats poden utilitzar Chromium sense deixar-hi rastre.</translation> <translation id="4994636714258228724">Afegeix-me a Chromium</translation> +<translation id="5224391634244552924">No hi ha cap contrasenya desada. Chromium pot comprovar les teves contrasenyes quan les deses.</translation> <translation id="5277894862589591112">Torna a iniciar Chromium perquè s'apliquin els canvis</translation> <translation id="5358375970380395591">Esteu a punt d'iniciar la sessió amb un compte gestionat i d'atorgar el control del vostre perfil de Chromium a l'administrador corresponent. Les dades de Chromium, com ara aplicacions, adreces d'interès, historial, contrasenyes i altres configuracions, s'enllaçaran permanentment amb <ph name="USER_NAME" />. Podreu suprimir aquestes dades mitjançant el Tauler de Comptes de Google, però no les podreu associar amb un altre compte. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">S'està actualitzant Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Chromium OS no ha pogut sincronitzar les vostres dades. Actualitzeu la frase de contrasenya de sincronització.</translation> <translation id="7067091210845072982">Si una imatge no té una descripció útil, Chromium provarà d'oferir-te'n una. Per crear les descripcions, les imatges s'envien a Google.</translation> <translation id="7196312274710523067">No s'ha pogut iniciar Chromium. Torna-ho a provar.</translation> +<translation id="7197677400338048821">Chromium no pot comprovar les teves contrasenyes. Torna-ho a provar al cap de 24 hores.</translation> <translation id="7205698830395646142">Amaga al menú de Chromium</translation> <translation id="7223968959479464213">Gestor de tasques: Chromium</translation> <translation id="731644333568559921">Actualitza &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb index c12e9a06..5cab9ab4 100644 --- a/chrome/app/resources/chromium_strings_cs.xtb +++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Chybí klíče rozhraní Google API. Některé funkce Chromium nebudou k dispozici.</translation> <translation id="3296368748942286671">Po ukončení prohlížeče Chromium nechat aplikace na pozadí spuštěné</translation> <translation id="331951419404882060">Chromium OS vaše data nemohl synchronizovat, protože při přihlašování došlo k chybě.</translation> +<translation id="347328004046849135">Pokud se přihlásíte pomocí prolomeného hesla, Chromium vám to oznámí</translation> <translation id="3474745554856756813">Z tohoto zařízení bude smazán následující počet položek: <ph name="ITEMS_COUNT" />. Budete-li chtít své údaje později načíst, přihlaste se do prohlížeče Chromium jako <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Zavřete prosím všechna okna prohlížeče Chromium a zkuste to znovu.</translation> <translation id="3575459661164320785">Máte v počítači škodlivý software. Chromium ho může odstranit, obnovit vaše nastavení a zakázat rozšíření, aby prohlížeč opět fungoval jako obvykle.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Přesto Chromium ukončit?</translation> <translation id="4748217263233248895">Právě byla nainstalována mimořádná bezpečnostní aktualizace prohlížeče Chromium. Restartujte jej, vaše karty budou obnoveny.</translation> <translation id="4750035648288509542">Aktualizace je téměř dokončena. Aktualizaci dokončíte restartováním prohlížeče Chromium. Anonymní okna se neobnoví.</translation> +<translation id="4788777615168560705">Chromium nemůže zkontrolovat hesla. Zkuste to znovu zítra, případně <ph name="BEGIN_LINK" />hesla zkontrolujte v účtu Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Tato funkce využívá stejnou službu kontroly pravopisu, jaká se používá ve vyhledávání Google. Text, který v prohlížeči zadáte, se odešle do Googlu. Toto chování můžete kdykoliv změnit v nastavení.</translation> <translation id="4888717733111232871">Pravidlo příchozího provozu pro prohlížeč Chromium, které povolí provoz mDNS.</translation> <translation id="4943838377383847465">Chromium je v režimu na pozadí.</translation> <translation id="4987820182225656817">Hosté mohou Chromium používat, aniž by po nich zůstaly jakékoliv stopy.</translation> <translation id="4994636714258228724">Přidejte do prohlížeče Chromium svůj účet</translation> +<translation id="5224391634244552924">Nemáte žádná uložená hesla. Chromium může hesla zkontrolovat, pouze když si je uložíte.</translation> <translation id="5277894862589591112">Chcete-li změny použít, restartujte Chromium</translation> <translation id="5358375970380395591">Přihlašujete se pomocí spravovaného účtu a poskytujete jeho správci kontrolu nad vaším profilem prohlížeče Chromium. Vaše údaje prohlížeče Chromium, například aplikace, záložky, historie, hesla a jiná nastavení, budou trvale přidružena k účtu <ph name="USER_NAME" />. Tyto údaje budete moci smazat pomocí Hlavního panelu v Účtech Google, ale nebudete je moci přidružit k jinému účtu. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Aktualizace prohlížeče Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS vaše data nemohl synchronizovat. Aktualizujte prosím heslovou frázi pro synchronizaci.</translation> <translation id="7067091210845072982">Pokud obrázek nemá užitečný popis, Chromium se vám jej pokusí poskytnout. Za účelem vytváření popisů jsou obrázky odesílány do Googlu.</translation> <translation id="7196312274710523067">Chromium nelze spustit. Zkuste to znovu.</translation> +<translation id="7197677400338048821">Chromium nemůže zkontrolovat hesla. Zkuste to znovu za 24 hodin.</translation> <translation id="7205698830395646142">Skrýt v nabídce Chromium</translation> <translation id="7223968959479464213">Správce úloh – Chromium</translation> <translation id="731644333568559921">Aktualizovat &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb index ad0747b..e50cb2d7 100644 --- a/chrome/app/resources/chromium_strings_da.xtb +++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Der mangler Google API-nøgler. Nogle funktioner i Chromium deaktiveres.</translation> <translation id="3296368748942286671">Fortsæt med at køre baggrundsapps, når Chromium er lukket</translation> <translation id="331951419404882060">Chromium OS kunne ikke synkronisere dine data på grund af en loginfejl.</translation> +<translation id="347328004046849135">Chromium giver dig besked, når du logger ind med en kompromitteret adgangskode</translation> <translation id="3474745554856756813">Denne handling sletter <ph name="ITEMS_COUNT" /> elementer på denne enhed. Hvis du senere vil hente dine data igen, skal du logge ind på Chromium som <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Luk alle Chromium-vinduer, og prøv igen.</translation> <translation id="3575459661164320785">Der er skadelig software på din computer. Chromium kan fjerne den, gendanne dine indstillinger og deaktivere udgivelser, så din browser fungerer normalt igen.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Vil du slutte Chromium alligevel?</translation> <translation id="4748217263233248895">En særlig sikkerhedsopdatering til Chromium blev netop anvendt. Genstart nu, hvorefter vi gendanner dine faner.</translation> <translation id="4750035648288509542">Næsten opdateret! Genstart Chromium for at fuldføre opdateringen. Inkognitovinduer åbnes ikke igen.</translation> +<translation id="4788777615168560705">Chromium kan ikke tjekke dine adgangskoder. Prøv igen efter 24 timer, eller <ph name="BEGIN_LINK" />tjek adgangskoder på din Google-konto<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Dette anvender den samme stavekontrol, som anvendes i Google Søgning. Tekst, som du angiver i browseren, sendes til Google. Du kan altid ændre denne adfærd i indstillingerne.</translation> <translation id="4888717733111232871">Indgående regel for Chromium om at tillade mDNS-trafik.</translation> <translation id="4943838377383847465">Chromium kører i baggrunden.</translation> <translation id="4987820182225656817">Gæster kan bruge Chromium uden at efterlade noget.</translation> <translation id="4994636714258228724">Tilføj dig selv i Chromium</translation> +<translation id="5224391634244552924">Der er ingen gemte adgangskoder. Chromium kan tjekke dine adgangskoder, når du gemmer dem.</translation> <translation id="5277894862589591112">Åbn Chromium igen for at anvende ændringerne</translation> <translation id="5358375970380395591">Du er ved at logge ind med en managerstyret konto og giver dens administrator kontrol over din profil i Chromium. Dine Chromium-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via kontrolpanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Opdaterer Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Chromium OS kunne ikke synkronisere dine data. Opdater din adgangssætning til synkronisering.</translation> <translation id="7067091210845072982">Hvis et billede ikke har en brugbar beskrivelse, forsøger Chromium at angive en for dig. Billederne sendes til Google, så der kan oprettes beskrivelser.</translation> <translation id="7196312274710523067">Chromium kunne ikke startes. Prøv igen.</translation> +<translation id="7197677400338048821">Chromium kan ikke tjekke dine adgangskoder. Prøv igen efter 24 timer.</translation> <translation id="7205698830395646142">Skjul i Chromium-menuen</translation> <translation id="7223968959479464213">Jobliste – Chromium</translation> <translation id="731644333568559921">Opdater &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb index 3bfe4d9..1dbfaf0 100644 --- a/chrome/app/resources/chromium_strings_de.xtb +++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Google API-Schlüssel fehlen. Einige Funktionen von Chromium sind deaktiviert.</translation> <translation id="3296368748942286671">Apps weiter im Hintergrund ausführen, wenn Chromium geschlossen wird</translation> <translation id="331951419404882060">Chromium OS konnte Ihre Daten aufgrund eines Fehlers bei der Anmeldung nicht synchronisieren.</translation> +<translation id="347328004046849135">Chromium benachrichtigt Sie, wenn Sie sich mit einem gehackten Passwort anmelden</translation> <translation id="3474745554856756813">Dadurch werden <ph name="ITEMS_COUNT" /> Elemente von diesem Gerät gelöscht. Wenn Sie Ihre Daten später abrufen möchten, melden Sie sich als <ph name="USER_EMAIL" /> in Chromium an.</translation> <translation id="3509308970982693815">Schließen Sie bitte alle Chromium-Fenster und versuchen Sie es erneut.</translation> <translation id="3575459661164320785">Schädliche Software wurde auf Ihrem Computer gefunden. Chromium kann diese Software entfernen, Ihre Einstellungen wiederherstellen und Erweiterungen deaktivieren, sodass Ihr Browser wieder wie gewohnt funktioniert.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Chromium trotzdem beenden?</translation> <translation id="4748217263233248895">Da soeben ein kritisches Sicherheitsupdate für Chromium installiert wurde, sollten Sie jetzt einen Neustart durchführen. Ihre Tabs werden dann automatisch wiederhergestellt.</translation> <translation id="4750035648288509542">Fast geschafft! Chromium zum Abschluss der Aktualisierung neu starten. Inkognitofenster werden nicht wieder geöffnet.</translation> +<translation id="4788777615168560705">Chromium kann Ihre Passwörter nicht prüfen. Versuchen Sie es in 24 Stunden noch einmal oder <ph name="BEGIN_LINK" />prüfen Sie die Passwörter in Ihrem Google-Konto<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Es wird dieselbe Rechtschreibprüfung wie in der Google-Suche verwendet. Der in den Browser eingegebene Text wird an Google gesendet. Sie können dies jederzeit in den Einstellungen ändern.</translation> <translation id="4888717733111232871">Eingangsregel für die Zulassung von mDNS-Verkehr in Chromium</translation> <translation id="4943838377383847465">Chromium wird im Hintergrundmodus ausgeführt.</translation> <translation id="4987820182225656817">Gastnutzer können Chromium verwenden, ohne Daten zu hinterlassen.</translation> <translation id="4994636714258228724">Mich zu Chromium hinzufügen</translation> +<translation id="5224391634244552924">Keine gespeicherten Passwörter. Chromium kann Ihre Passwörter prüfen, wenn Sie sie speichern.</translation> <translation id="5277894862589591112">Starten Sie Chromium neu, um die Änderungen zu übernehmen</translation> <translation id="5358375970380395591">Sie melden sich mit einem verwalteten Konto an und ermöglichen dessen Administrator Zugriff auf Ihr Chromium-Profil. Ihre Chromium-Daten, wie Apps, Lesezeichen, Verlauf, Passwörter und andere Einstellungen, werden dauerhaft mit <ph name="USER_NAME" /> verknüpft. Sie können diese Daten über das Google Konten-Dashboard löschen, aber nicht mit einem anderen Konto verknüpfen. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium wird aktualisiert (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Chromium OS konnte Ihre Daten nicht synchronisieren. Bitte aktualisieren Sie Ihre Passphrase für die Synchronisierung.</translation> <translation id="7067091210845072982">Wenn ein Bild keine brauchbare Beschreibung hat, versucht Chromium, eine für Sie zu finden. Damit entsprechende Beschreibungen erstellt werden können, werden die Bilder an Google gesendet.</translation> <translation id="7196312274710523067">Chromium konnte nicht gestartet werden. Versuchen Sie es noch einmal.</translation> +<translation id="7197677400338048821">Chromium kann Ihre Passwörter nicht prüfen. Bitte versuchen Sie es in 24 Stunden noch einmal.</translation> <translation id="7205698830395646142">Im Chromium-Menü ausblenden</translation> <translation id="7223968959479464213">Taskmanager - Chromium</translation> <translation id="731644333568559921">&Chromium OS aktualisieren</translation>
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb index 6e69e2c..1ac82af 100644 --- a/chrome/app/resources/chromium_strings_en-GB.xtb +++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Google API keys are missing. Some functionality of Chromium will be disabled.</translation> <translation id="3296368748942286671">Continue running background apps when Chromium is closed</translation> <translation id="331951419404882060">Chromium OS could not sync your data due to an error signing in.</translation> +<translation id="347328004046849135">Chromium will notify you when you sign in with a compromised password</translation> <translation id="3474745554856756813">This will delete <ph name="ITEMS_COUNT" /> items from this device. To retrieve your data later, sign in to Chromium as <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Please close all Chromium windows and try again.</translation> <translation id="3575459661164320785">There's harmful software on your computer. Chromium can remove it, restore your settings and disable extensions to make your browser work normally again.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Quit Chromium anyway?</translation> <translation id="4748217263233248895">A special security update for Chromium was just applied. Restart now and we'll restore your tabs.</translation> <translation id="4750035648288509542">Nearly up to date! Relaunch Chromium to finish updating. Incognito windows won't reopen.</translation> +<translation id="4788777615168560705">Chromium can't check your passwords. Try again after 24 hours or <ph name="BEGIN_LINK" />check passwords in your Google Account<ph name="END_LINK" />.</translation> <translation id="479167709087336770">This uses the same spell checker that's used in Google search. Text that you type in the browser is sent to Google. You can always change this behaviour in settings.</translation> <translation id="4888717733111232871">Inbound rule for Chromium to allow mDNS traffic.</translation> <translation id="4943838377383847465">Chromium is in background mode.</translation> <translation id="4987820182225656817">Guests can use Chromium without leaving anything behind.</translation> <translation id="4994636714258228724">Add yourself to Chromium</translation> +<translation id="5224391634244552924">No saved passwords. Chromium can check your passwords when you save them.</translation> <translation id="5277894862589591112">To apply your changes, relaunch Chromium</translation> <translation id="5358375970380395591">You are signing in with a managed account and giving its administrator control over your Chromium profile. Your Chromium data, such as your apps, bookmarks, history, passwords and other settings will become permanently tied to <ph name="USER_NAME" />. You will be able to delete this data via the Google Accounts Dashboard, but you will not be able to associate this data with another account. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Updating Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS could not sync your data. Please update your Sync passphrase.</translation> <translation id="7067091210845072982">If an image doesn’t have a useful description, Chromium will try to provide one for you. To create descriptions, images are sent to Google.</translation> <translation id="7196312274710523067">Couldn't launch Chromium. Try again.</translation> +<translation id="7197677400338048821">Chromium can't check your passwords. Try again after 24 hours.</translation> <translation id="7205698830395646142">Hide in Chromium Menu</translation> <translation id="7223968959479464213">Task Manager - Chromium</translation> <translation id="731644333568559921">Update &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb index 742bf34..9f42defc 100644 --- a/chrome/app/resources/chromium_strings_eu.xtb +++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Google API gakoak falta dira. Chromium-en funtzionalitate batzuk desgaituko dira.</translation> <translation id="3296368748942286671">Mantendu atzeko planoko aplikazioak abian Chromium ixten denean</translation> <translation id="331951419404882060">Saioa hastean gertatu den errore bat dela-eta, Chromium OS sistemak ezin izan ditu sinkronizatu zure datuak.</translation> +<translation id="347328004046849135">Arriskuan dagoen pasahitz batekin hasten baduzu saioa, jakinarazi egingo dizu Chromium-ek</translation> <translation id="3474745554856756813">Gailuko <ph name="ITEMS_COUNT" /> elementu ezabatuko dira. Geroago datuak eskuratu nahi izanez gero, hasi saioa Chromium-en <ph name="USER_EMAIL" /> gisa.</translation> <translation id="3509308970982693815">Itxi Chromium leiho guztiak eta saiatu berriro.</translation> <translation id="3575459661164320785">Software kaltegarria duzu ordenagailuan. Chromium-ek hura kendu, ezarpenak leheneratu eta luzapenak desgai ditzake, arakatzaileak ohiko moduan funtziona dezan berriro.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Chromium-etik irten nahi duzu hala ere?</translation> <translation id="4748217263233248895">Chromium-en segurtasun-eguneratze berezi bat aplikatu berri da. Berrabiarazi gailua, eta fitxak leheneratuko dizkizugu.</translation> <translation id="4750035648288509542">Ia amaitu dugu eguneratzen. Abiarazi berriro Chromium eguneratzen amaitzeko. Ezkutuko moduko leihoak ez dira berriro irekiko.</translation> +<translation id="4788777615168560705">Chromium-ek ezin ditu egiaztatu pasahitzak. Saiatu berriro 24 ordu barru edo <ph name="BEGIN_LINK" />egiaztatu pasahitzak Google-ko kontuan<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Google Bilaketa zerbitzuan erabiltzen den ortografia-zuzentzaile bera erabiltzen da. Arakatzailean idazten duzun testua Google-ri bidaltzen zaio. Aukera horiek aldatzeko, joan ezarpenetara.</translation> <translation id="4888717733111232871">Chromium-ek mDNS trafikoa baimentzeko sarrerako araua.</translation> <translation id="4943838377383847465">Chromium atzeko planoko moduan dago.</translation> <translation id="4987820182225656817">Gonbidatuek Chromium erabil dezakete aztarnarik utzi gabe.</translation> <translation id="4994636714258228724">Gaitu zure burua Chromium-en</translation> +<translation id="5224391634244552924">Ez dago pasahitzik gordeta. Gordeta dituzun pasahitzak egiaztatu egin ditzake Chromium-ek.</translation> <translation id="5277894862589591112">Aldaketak aplikatzeko, berrabiarazi Chromium</translation> <translation id="5358375970380395591">Kontu kudeatu batekin hasten ari zara saioa eta kontuaren administratzaileari zure Chromium profila kontrolatzeko ahalmena ematera zoaz. Chromium aplikazioan dituzun datuak, esaterako, aplikazioak, laster-markak, historia, pasahitzak eta beste ezarpen batzuk betiko lotuko zaizkio <ph name="USER_NAME" /> erabiltzaileari. Google kontuetako Panelaren bidez ezabatu ahalko dituzu datu horiek, baina ezingo dituzu beste kontu batekin lotu. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium eguneratzen (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS sistema eragileak ezin izan ditu sinkronizatu zure datuak. Eguneratu sinkronizatzeko pasaesaldia.</translation> <translation id="7067091210845072982">Irudiren batek ez badu azalpen lagungarririk, halako bat lortzen ahaleginduko da Chromium. Azalpen horiek sortzeko, irudiak Google-ri bidaltzen zaizkio.</translation> <translation id="7196312274710523067">Ezin izan da abiarazi Chromium. Saiatu berriro.</translation> +<translation id="7197677400338048821">Chromium-ek ezin ditu egiaztatu pasahitzak. Saiatu berriro 24 ordu barru.</translation> <translation id="7205698830395646142">Ezkutatu Chromium menuan</translation> <translation id="7223968959479464213">Ataza-kudeatzailea - Chromium</translation> <translation id="731644333568559921">Eguneratu &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb index ee8a1bb81..48df54e 100644 --- a/chrome/app/resources/chromium_strings_fi.xtb +++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Googlen sovellusliittymän avaimet puuttuvat. Jotkin Chromiumin toiminnoista poistetaan käytöstä.</translation> <translation id="3296368748942286671">Jätä taustasovellukset käyntiin, kun Chromium suljetaan</translation> <translation id="331951419404882060">Chromium-käyttöjärjestelmä ei voi synkronoida tietoja kirjautumisvirheen vuoksi.</translation> +<translation id="347328004046849135">Chromium ilmoittaa, kun kirjaudut sisään vaarantuneella salasanalla</translation> <translation id="3474745554856756813">Tämä poistaa <ph name="ITEMS_COUNT" /> kohdetta pysyvästi laitteelta. Jos haluat palauttaa tiedot myöhemmin, kirjaudu Chromiumiin käyttäjänä <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Sulje kaikki Chromium-ikkunat ja yritä uudelleen.</translation> <translation id="3575459661164320785">Tietokoneellasi on haitallinen ohjelmisto. Chromium voi poistaa sen, palauttaa asetuksesi ja poistaa laajennukset käytöstä, jotta selaimesi toimii taas normaalisti.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Suljetaanko Chromium silti?</translation> <translation id="4748217263233248895">Chromiumin tärkeä tietoturvapäivitys on asennettu. Käynnistä selain uudelleen – palautamme avoimet välilehdet.</translation> <translation id="4750035648288509542">Melkein ajan tasalla. Viimeistele päivitys käynnistämällä Chromium uudelleen. Incognito-ikkunoita ei avata uudelleen.</translation> +<translation id="4788777615168560705">Chromium ei voi tarkistaa salasanojasi. Yritä uudelleen 24 tunnin kuluttua tai <ph name="BEGIN_LINK" />tarkista salasanat Google-tililtä<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Tämä käyttää samaa oikeinkirjoituksen tarkistusta kuin Google Haku. Selaimeen kirjoittamasi teksti lähetetään Googlelle. Voit muuttaa tätä milloin tahansa asetuksista.</translation> <translation id="4888717733111232871">Chromiumin saapuvien yhteyksien sääntö, joka sallii mDNS-liikenteen.</translation> <translation id="4943838377383847465">Chromium on käynnissä taustalla</translation> <translation id="4987820182225656817">Vierailijat voivat käyttää Chromiumia jälkiä jättämättä.</translation> <translation id="4994636714258228724">Lisää itsesi Chromiumiin</translation> +<translation id="5224391634244552924">Ei tallennettuja salasanoja. Chromium voi tarkistaa salasanasi, kun tallennat niitä.</translation> <translation id="5277894862589591112">Ota muutokset käyttöön käynnistämällä Chromium uudelleen</translation> <translation id="5358375970380395591">Olet kirjautumassa sisään hallinnoidulla tilillä ja antamassa tilin järjestelmänvalvojalle oikeuden hallita Chromium-profiiliasi. Chromium-tietosi, kuten sovelluksesi, kirjanmerkkisi, historiasi, salasanasi ja muut asetuksesi, yhdistetään pysyvästi käyttäjätiliin <ph name="USER_NAME" />. Voit poistaa nämä tiedot Google-tilien Hallintapaneelissa, mutta et voi liittää tietoja toiseen tiliin. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Päivitetään Chromiumia (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Chromium-käyttöjärjestelmä ei voi synkronoida tietoja. Päivitä synkronoinnin tunnuslause.</translation> <translation id="7067091210845072982">Jos kuvalla ei ole hyödyllistä kuvausta, Chromium yrittää luoda sellaisen. Kuvat lähetetään Googlelle kuvausten luomista varten.</translation> <translation id="7196312274710523067">Chromiumin käynnistäminen epäonnistui. Yritä uudelleen.</translation> +<translation id="7197677400338048821">Chromium ei voi tarkistaa salasanojasi. Yritä uudelleen 24 tunnin päästä.</translation> <translation id="7205698830395646142">Piilota Chromium-valikossa</translation> <translation id="7223968959479464213">Tehtävänhallinta - Chromium</translation> <translation id="731644333568559921">Päivitä &Chromium-käyttöjärjestelmä</translation>
diff --git a/chrome/app/resources/chromium_strings_fr-CA.xtb b/chrome/app/resources/chromium_strings_fr-CA.xtb index 4f9be87..be4bc3bd 100644 --- a/chrome/app/resources/chromium_strings_fr-CA.xtb +++ b/chrome/app/resources/chromium_strings_fr-CA.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Les clés d'API Google sont manquantes. Certaines fonctionnalités de Chromium seront désactivées</translation> <translation id="3296368748942286671">Continuer l'exécution d'applications en arrière-plan après la fermeture de Chromium</translation> <translation id="331951419404882060">Chromium OS ne peut pas synchroniser vos données, car une erreur s'est produite lors de la connexion.</translation> +<translation id="347328004046849135">Chromium vous avisera lorsque vous utilisez un mot de passe compromis pour vous connecter</translation> <translation id="3474745554856756813">Cette action entraînera la suppression de <ph name="ITEMS_COUNT" /> éléments de cet appareil. Pour récupérer vos données plus tard, connectez-vous à Chromium en tant que <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Veuillez fermer toutes les fenêtres Chromium et essayer de nouveau.</translation> <translation id="3575459661164320785">Nous avons trouvé un logiciel nuisible sur votre ordinateur. Chromium peut le supprimer, restaurer vos paramètres et désactiver les extensions pour que votre navigateur puisse fonctionner normalement de nouveau.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Quitter Chromium quand même?</translation> <translation id="4748217263233248895">Une mise à jour de sécurité spéciale pour Chromium vient d'être effectuée. Redémarrez maintenant, et nous restaurerons vos onglets.</translation> <translation id="4750035648288509542">La mise à jour est presque terminée! Relancez Chromium pour terminer la mise à jour. Vos fenêtres de navigation privée ne seront pas rouvertes.</translation> +<translation id="4788777615168560705">Chromium ne peut pas vérifier vos mots de passe. Réessayez après 24 heures ou <ph name="BEGIN_LINK" />effectuez une vérification des mots de passe dans votre compte Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Cela fait appel au même correcteur orthographique que celui qui est utilisé dans la recherche Google. Le texte que vous tapez dans le navigateur est envoyé à Google. Vous pouvez toujours modifier ce comportement dans les paramètres.</translation> <translation id="4888717733111232871">Règle de trafic entrant pour Chrome afin d'autoriser le trafic mDNS.</translation> <translation id="4943838377383847465">Chromium fonctionne en mode arrière-plan.</translation> <translation id="4987820182225656817">Les invités peuvent utiliser Chromium sans rien laisser derrière eux.</translation> <translation id="4994636714258228724">Ajouter un utilisateur à Chromium</translation> +<translation id="5224391634244552924">Aucun mot de passe enregistré. Chromium ne peut vérifier vos mots de passe que si vous les enregistrez.</translation> <translation id="5277894862589591112">Pour appliquer vos modifications, relancez Chromium</translation> <translation id="5358375970380395591">Vous vous connectez avec un compte géré et rendez son administrateur maître de votre profil Chromium. Vos données de Chromium, comme vos applications, vos favoris, votre historique, vos mots de passe et vos autres paramètres, vont être associées de manière permanente à <ph name="USER_NAME" />. Vous pourrez supprimer ces données à l'aide du tableau de bord des comptes Google, mais vous ne pourrez pas les associer à un autre compte. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Mise à jour de Chromium en cours (<ph name="PROGRESS_PERCENT" />)…</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Échec de synchronisation de vos données dans Chromium OS. Veuillez mettre à jour votre phrase de passe de synchronisation.</translation> <translation id="7067091210845072982">Si une image n'est pas accompagnée d'une description utile, Chromium essaiera de vous en proposer une. Pour créer des descriptions, les images sont envoyées à Google.</translation> <translation id="7196312274710523067">Impossible de lancer Chromium. Réessayez.</translation> +<translation id="7197677400338048821">Chromium ne peut pas vérifier vos mots de passe. Réessayez dans 24 heures.</translation> <translation id="7205698830395646142">Masquer dans le menu Chromium</translation> <translation id="7223968959479464213">Gestionnaire de tâches – Chromium</translation> <translation id="731644333568559921">Mise à jour de &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_gl.xtb b/chrome/app/resources/chromium_strings_gl.xtb index 3e4cb75c..0090e4b1 100644 --- a/chrome/app/resources/chromium_strings_gl.xtb +++ b/chrome/app/resources/chromium_strings_gl.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Non se atopan as claves da API de Google. Desactivaranse algunhas funcións de Chromium.</translation> <translation id="3296368748942286671">Continuar executando aplicacións en segundo plano cando se peche Chromium</translation> <translation id="331951419404882060">Chromium OS non puido sincronizar os teus datos debido a un erro ao iniciar sesión.</translation> +<translation id="347328004046849135">Chromium enviarache unha notificación cando inicies sesión cun contrasinal vulnerado</translation> <translation id="3474745554856756813">Esta acción eliminará <ph name="ITEMS_COUNT" /> elementos deste dispositivo. Para recuperar os teus datos máis tarde, inicia sesión en Chromium como <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Pecha todas as ventás de Chromium e téntao de novo.</translation> <translation id="3575459661164320785">O teu ordenador ten software daniño. Chromium pode quitalo, restaurar a configuración e desactivar as extensións para que o navegador funcione con normalidade de novo.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Queres saír de Chromium de todas formas?</translation> <translation id="4748217263233248895">Acábase de aplicar unha actualización de seguranza especial para Chromium. Reinicia agora e restauraremos as túas pestanas.</translation> <translation id="4750035648288509542">A actualización está a piques de rematar. Reinicia Chromium para completala. As ventás do modo de incógnito non se volverán abrir.</translation> +<translation id="4788777615168560705">Chromium non puido comprobar os teus contrasinais. Téntao de novo dentro de 24 horas ou <ph name="BEGIN_LINK" />comproba os contrasinais na túa Conta de Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Esta función utiliza o mesmo corrector ortográfico que o usado na busca de Google. O texto que escribas no navegador enviarase a Google. Podes cambiar esta opción na configuración cando queiras.</translation> <translation id="4888717733111232871">Norma de entrada para Chromium para permitir tráfico mDNS.</translation> <translation id="4943838377383847465">Chromium está no modo de segundo plano.</translation> <translation id="4987820182225656817">Os invitados poden utilizar Chromium sen perder información.</translation> <translation id="4994636714258228724">Engádete a Chromium</translation> +<translation id="5224391634244552924">Non hai contrasinais gardados. Chromium pode comprobar os teus contrasinais cando os gardes.</translation> <translation id="5277894862589591112">Para aplicar os cambios, reinicia Chromium</translation> <translation id="5358375970380395591">Estás iniciando sesión cunha conta xestionada e concedendo control ao seu administrador sobre o teu perfil de Chromium. Os teus datos de Chromium, como as túas aplicacións, marcadores, historial, contrasinais e outras configuracións ligaranse permanentemente a <ph name="USER_NAME" />. Poderás eliminar estes datos a través do Panel de control das contas de Google, pero non poderás asociar estes datos a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Actualizando Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS non puido sincronizar os teus datos. Actualiza a túa frase de acceso de sincronización.</translation> <translation id="7067091210845072982">Se unha imaxe non ten unha descrición útil, Chromium tentará proporcionarche unha. Para crear descricións, envíanse imaxes a Google.</translation> <translation id="7196312274710523067">Non se puido iniciar Chromium. Téntao de novo.</translation> +<translation id="7197677400338048821">Chromium non puido comprobar os teus contrasinais. Téntao de novo dentro de 24 horas.</translation> <translation id="7205698830395646142">Ocultar no menú de Chromium</translation> <translation id="7223968959479464213">Xestor de tarefas: Chromium</translation> <translation id="731644333568559921">Actualizar &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb index 1b1b0d9..60ec3c6 100644 --- a/chrome/app/resources/chromium_strings_hu.xtb +++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Hiányoznak Google API-kulcsok. A Chromium egyes funkciói kikapcsolnak.</translation> <translation id="3296368748942286671">A háttéralkalmazások továbbfuttatása, ha a Chromiumot bezárják</translation> <translation id="331951419404882060">A Chromium OS egy bejelentkezési hiba miatt nem tudta szinkronizálni az adatokat.</translation> +<translation id="347328004046849135">A Chromium figyelmezteti Önt, amikor olyan jelszóval jelentkezik be, amelyhez illetéktelenül hozzáfértek</translation> <translation id="3474745554856756813">Ezzel <ph name="ITEMS_COUNT" /> elemet töröl erről az eszközről. Az adatok későbbi lekéréséhez jelentkezzen be a Chromiumba a következő e-mail-címmel: <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Zárjon be minden Chromium-ablakot, és próbálkozzon újra.</translation> <translation id="3575459661164320785">A számítógépen kártékony szoftver található. A Chromium képes a kártékony szoftver eltávolítására, a beállítások visszaállítására és a bővítmények letiltására, hogy a böngésző újra a szokásos módon működhessen.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Biztosan kilép a Chromiumból?</translation> <translation id="4748217263233248895">A rendszer egy speciális biztonsági frissítést alkalmazott a Chromiumon. Indítsa újra a számítógépet, a lapokat majd mi visszaállítjuk.</translation> <translation id="4750035648288509542">Már majdnem naprakész! Indítsa újra a Chromiumot a frissítés befejezéséhez. Az inkognitóablakok nem fognak újra megnyílni.</translation> +<translation id="4788777615168560705">A Chromium nem tudja ellenőrizni a jelszavait. Próbálja újra 24 óra múlva, vagy <ph name="BEGIN_LINK" />ellenőrizze jelszavait a Google-fiókjában<ph name="END_LINK" />.</translation> <translation id="479167709087336770">A szolgáltatás ugyanazt a helyesírás-ellenőrzést használja, mint a Google Kereső. A begépelt szöveget a böngésző elküldi a Google-nak. A beállítások között ezt bármikor módosíthatja.</translation> <translation id="4888717733111232871">Bejövő szabály a Chromiumhoz az mDNS forgalom engedélyezése céljából.</translation> <translation id="4943838377383847465">A Chromium háttérmódban van.</translation> <translation id="4987820182225656817">A vendégek úgy használhatják a Chromiumot, hogy nem hagynak hátra semmit.</translation> <translation id="4994636714258228724">Adja hozzá magát a Chromiumban</translation> +<translation id="5224391634244552924">Nincsenek mentett jelszavak. A Chromium képes a jelszavak ellenőrzésére, ha Ön elmenti őket.</translation> <translation id="5277894862589591112">A módosítások alkalmazásához indítsa újra a Chromiumot</translation> <translation id="5358375970380395591">Kezelt fiókkal jelentkezik be, és annak adminisztrátora számára hozzáférést biztosít Chromium-profiljához. Chromium-adatait – például alkalmazásait, könyvjelzőit, előzményeit, jelszavait és más beállításait – a rendszer véglegesen társítja a(z) <ph name="USER_NAME" /> fiókhoz. Ezen adatokat a Google-fiók Irányítópultján törölheti, de más fiókhoz nem társíthatja őket. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">A Chromium frissítése (<ph name="PROGRESS_PERCENT" />)</translation> @@ -162,6 +165,7 @@ <translation id="7066436765290594559">A Chromium OS nem tudta szinkronizálni az adatokat. Kérjük, frissítse a szinkronizálás jelszavát.</translation> <translation id="7067091210845072982">Ha valamelyik kép nem rendelkezik hasznos leírással, akkor a Chromium igyekszik leírást adni róla. A Google automatikusan megkapja a leírások létrehozásához szükséges képeket.</translation> <translation id="7196312274710523067">Nem sikerült a Chromium elindítása. Próbálkozzon újra.</translation> +<translation id="7197677400338048821">A Chromium nem tudja ellenőrizni a jelszavait. Próbálja újra 24 óra múlva.</translation> <translation id="7205698830395646142">Elrejtés a Chromium-menüben</translation> <translation id="7223968959479464213">Feladatkezelő -- Chromium</translation> <translation id="731644333568559921">A &Chromium OS frissítése</translation>
diff --git a/chrome/app/resources/chromium_strings_hy.xtb b/chrome/app/resources/chromium_strings_hy.xtb index 8b0616c..fa4a4fc1 100644 --- a/chrome/app/resources/chromium_strings_hy.xtb +++ b/chrome/app/resources/chromium_strings_hy.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Google API-ի բանալիները չկան: Chromium-ի որոշ գործառույթներ կանջատվեն:</translation> <translation id="3296368748942286671">Շարունակել հետնաշերտի հավելվածների աշխատանքը, երբ Chromium-ը փակված է</translation> <translation id="331951419404882060">Chromium OS-ը չկարողացավ համաժամացնել ձեր տվյալները՝ մուտքի սխալի պատճառով:</translation> +<translation id="347328004046849135">Chromium-ը կտեղեկացնի ձեզ, երբ կոտրված գաղտնաբառ օգտագործեք։</translation> <translation id="3474745554856756813"><ph name="ITEMS_COUNT" /> տարր կջնջվի այս սարքից: Հետագայում ձեր տվյալներն առբերելու համար մուտք գործեք Chromium <ph name="USER_EMAIL" /> հաշվով:</translation> <translation id="3509308970982693815">Փակեք Chromium-ի բոլոր պատուհանները և կրկին փորձեք:</translation> <translation id="3575459661164320785">Ձեր համակարգչում վնասաբեր ծրագիր է հայտնաբերվել։ Ձեր դիտարկիչի կայուն աշխատանքը վերականգնելու համար Chromium-ը կարող է ջնջել ծրագիրը և վերականգնել ձեր կարգավորումները։</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Փակե՞լ Chromium-ը։</translation> <translation id="4748217263233248895">Chromium-ի անվտանգության կարգավորումները հենց նոր թարմացվել են: Վերագործարկեք Chrome-ը, և ձեր ներդիրները կվերականգնվեն:</translation> <translation id="4750035648288509542">Գրեթե պատրաստ է։ Թարմացումն ավարտելու համար վերագործարկեք Chromium-ը։ Ինկոգնիտո պատուհանները նորից չեն բացվի։</translation> +<translation id="4788777615168560705">Chromium-ը չի կարող ստուգել ձեր գաղտնաբառերը։ 24 ժամ հետո նորից փորձեք կամ <ph name="BEGIN_LINK" />ստուգեք ձեր Google հաշվի գաղտնաբառերը<ph name="END_LINK" />։</translation> <translation id="479167709087336770">Օգտագործվում է միևնույն ուղղագրիչը, ինչ Google Որոնման մեջ: Դիտարկիչում մուտքագրված տեքստերն ուղարկվում են Google-ին: Սա կարող եք փոխել կարգավորումներում։</translation> <translation id="4888717733111232871">Թույլատրել Chromium-ում տվյալների մուտքային հոսքի փոխանցումը mDNS հաղորդակարգով:</translation> <translation id="4943838377383847465">Chromium-ն աշխատում է ֆոնային ռեժիմում:</translation> <translation id="4987820182225656817">Օգտագործելով Chromium-ը հյուրի ռեժիմում՝ դուք ոչ մի հետք չեք թողնում:</translation> <translation id="4994636714258228724">Ավելացրեք ձեր հաշիվը Chromium-ին</translation> +<translation id="5224391634244552924">Պահված գաղտնաբառեր չկան։ Chromium-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ պահում եք դրանք։</translation> <translation id="5277894862589591112">Փոփոխությունները կիրառելու համար վերագործարկեք Chromium-ը</translation> <translation id="5358375970380395591">Դուք մուտք եք գործում վերահսկվող հաշիվ՝ թույլ տալով ադմինիստրատորին կառավարել ձեր Chromium պրոֆիլը: Ձեր Chromium-ի տվյալները, ինչպես օրինակ՝ հավելվածները, էջանիշները, պատմությունը, գաղտնաբառերը և այլ կարգավորումները, մշտապես կկապվեն <ph name="USER_NAME" />-ի հետ: Դուք կկարողանաք ջնջել այս տվյալները Google Dashboard-ի միջոցով, սակայն չեք կարողանա համակցել դրանք այլ հաշվի հետ: <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium-ի թարմացում (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS-ը չկարողացավ համաժամացնել ձեր տվյալները: Թարմացրեք Sync-ի անցաբառը:</translation> <translation id="7067091210845072982">Եթե պատկերն օգտակար նկարագրություն չունի, Chromium-ը կփորձի նոր նկարագրություն տրամադրել: Պատկերներն ուղարկվում են Google-ին՝ նկարագրություններ ստեղծելու համար։</translation> <translation id="7196312274710523067">Չհաջողվեց գործարկել Chromium-ը։ Նորից փորձեք։</translation> +<translation id="7197677400338048821">Chromium-ը չի կարող ստուգել ձեր գաղտնաբառերը։ 24 ժամ հետո նորից փորձեք։</translation> <translation id="7205698830395646142">Թաքցնել Chromium-ի ընտրացանկից</translation> <translation id="7223968959479464213">Խնդիրների կառավարիչ - Chromium</translation> <translation id="731644333568559921">Թարմացնել &Chromium OS-ը</translation>
diff --git a/chrome/app/resources/chromium_strings_is.xtb b/chrome/app/resources/chromium_strings_is.xtb index c098ee9a..da3baff6 100644 --- a/chrome/app/resources/chromium_strings_is.xtb +++ b/chrome/app/resources/chromium_strings_is.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Lykla vantar fyrir forritaskil Google. Sumir eiginleikar Chromium verða óvirkir.</translation> <translation id="3296368748942286671">Halda áfram að keyra bakgrunnsforrit þegar Chromium er lokað</translation> <translation id="331951419404882060">Chromium OS gat ekki samstillt gögnin þín vegna innskráningarvillu.</translation> +<translation id="347328004046849135">Chromium lætur þig vita þegar þú skráir þig inn með aðgangsorði sem er í hættu</translation> <translation id="3474745554856756813">Þetta mun eyða <ph name="ITEMS_COUNT" /> atriðum úr þessu tæki. Skráðu þig inn í Chromium sem <ph name="USER_EMAIL" /> til að endurheimta gögnin síðar.</translation> <translation id="3509308970982693815">Lokaðu öllum gluggum Chromium og reyndu aftur.</translation> <translation id="3575459661164320785">Skaðlegur hugbúnaður er á tölvunni þinni. Chromium getur fjarlægt hann, endurheimt stillingar þínar og gert viðbætur óvirkar svo vafrinn þinn virki aftur eins og ætla skyldi.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Viltu samt loka Chromium?</translation> <translation id="4748217263233248895">Sérstök öryggisuppfærsla fyrir Chromium var tekin í notkun. Endurræstu núna og við opnum flipana þína aftur.</translation> <translation id="4750035648288509542">Næstum því uppfært! Endurræstu Chromium til að ljúka við uppfærslu. Huliðsgluggar enduropnast ekki.</translation> +<translation id="4788777615168560705">Chromium getur ekki athugað aðgangsorðin þín. Reyndu aftur eftir sólarhring eða <ph name="BEGIN_LINK" />athugaðu aðgangsorðin á Google reikningnum þínum<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Þetta notar sömu ritvilluleit og er notuð í Google leit. Textinn sem þú skrifar í vafranum er sendur til Google. Þú getur alltaf breytt þessu í stillingunum.</translation> <translation id="4888717733111232871">Regla á innleið til að láta Chromium leyfa mDNS-umferð.</translation> <translation id="4943838377383847465">Chromium er í bakgrunnsstillingu.</translation> <translation id="4987820182225656817">Gestir geta notað Chromium án þess að skilja eftir sig nokkur spor.</translation> <translation id="4994636714258228724">Bættu þér við Chromium</translation> +<translation id="5224391634244552924">Engin vistuð aðgangsorð. Chromium getur athugað aðgangsorðin þín þegar þú vistar þau.</translation> <translation id="5277894862589591112">Endurræstu Chromium til að breytingarnar taki gildi</translation> <translation id="5358375970380395591">Þú ert að skrá þig inn með stýrðum reikningi og veitir stjórnanda hans vald yfir Chromium prófílnum þínum. Chromium gögnin þín, s.s. forrit, bókamerki, ferill, aðgangsorð og aðrar stillingar, verða tengd varanlega við <ph name="USER_NAME" />. Þú getur eytt þessum gögnum á stjórnborði Google reikninga en getur ekki tengt þau öðrum reikningi. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Uppfærir Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS gat ekki samstillt gögnin þín. Uppfærðu aðgangsorð samstillingar.</translation> <translation id="7067091210845072982">Ef gagnlega lýsingu vantar við mynd reynir Chromium að útvega þér lýsingu. Til að búa til lýsingar eru myndir sendar til Google.</translation> <translation id="7196312274710523067">Ekki var hægt að ræsa Chromium. Reyndu aftur.</translation> +<translation id="7197677400338048821">Chromium getur ekki athugað aðgangsorðin þín. Reyndu aftur eftir sólarhring.</translation> <translation id="7205698830395646142">Fela í valmynd Chromium</translation> <translation id="7223968959479464213">Verkstjórn – Chromium</translation> <translation id="731644333568559921">Uppfæra &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb index cc4142f..1275687 100644 --- a/chrome/app/resources/chromium_strings_iw.xtb +++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -56,6 +56,7 @@ <translation id="328888136576916638">המפתחות של Google API חסרים. פונקציונליות מסוימת של Chromium תהיה מושבתת.</translation> <translation id="3296368748942286671">המשך הפעלת יישומים ברקע כאשר Chromium סגור</translation> <translation id="331951419404882060">מערכת ההפעלה של Chromium לא הצליחה לסנכרן את הנתונים שלך עקב שגיאה בתהליך הכניסה.</translation> +<translation id="347328004046849135">אם מערכת Chromium תזהה שנכנסת עם סיסמה שנחשפה, היא תתריע לך על כך</translation> <translation id="3474745554856756813">פעולה זו תמחק <ph name="ITEMS_COUNT" /> פריטים מהמכשיר. כדי לשחזר את הנתונים מאוחר יותר, היכנס אל Chromium עם <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">סגור את כל חלונות Chromium ונסה שוב.</translation> <translation id="3575459661164320785">יש במחשב שלך תוכנה מזיקה. Chromium יכול להסיר אותה, לשחזר את ההגדרות שלך ולהשבית תוספים כדי שהדפדפן יחזור שוב לפעולה רגילה.</translation> @@ -91,11 +92,13 @@ <translation id="4746050847053251315">לסגור את Chromium בכל זאת?</translation> <translation id="4748217263233248895">בוצע עדכון אבטחה מיוחד של Chromium. עכשיו עליך להפעיל מחדש ואנחנו נשחזר את הכרטיסיות.</translation> <translation id="4750035648288509542">העדכון כמעט הושלם. כדי להשלים את העדכון, יש להפעיל מחדש את Chromium. החלונות האנונימיים לא ייפתחו מחדש.</translation> +<translation id="4788777615168560705">Chromium לא יכול לבדוק את הסיסמאות שלך. יש לנסות שוב בעוד 24 שעות או <ph name="BEGIN_LINK" />לבדוק את הסיסמאות בחשבון Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">נעשה כאן שימוש בבדיקת האיות של חיפוש Google. הטקסט המוקלד בדפדפן נשלח אל Google. אפשר לשנות את ההתנהגות הזו בכל שלב דרך ההגדרות.</translation> <translation id="4888717733111232871">כלל נכנס עבור Chromium על מנת לאפשר תנועת mDNS.</translation> <translation id="4943838377383847465">Chromium נמצא במצב רקע.</translation> <translation id="4987820182225656817">אורחים יכולים להשתמש ב-Chromium בלי להשאיר דבר מאחור.</translation> <translation id="4994636714258228724">הוסף את עצמך ל-Chromium</translation> +<translation id="5224391634244552924">אין סיסמאות שמורות. Chromium יכול לבדוק את הסיסמאות שלך רק אם שמרת אותן.</translation> <translation id="5277894862589591112">כדי להחיל את השינויים שביצעת, יש להפעיל מחדש את Chromium</translation> <translation id="5358375970380395591">אתה נכנס עם חשבון מנוהל ונותן למנהל המערכת שלו שליטה על הפרופיל שלך ב-Chromium. הנתונים שלך ב-Chromium, כגון יישומים, סימניות, היסטוריה, סיסמאות והגדרות אחרות ייקשרו באופן קבוע ל-<ph name="USER_NAME" />. תוכל למחוק את הנתונים האלה באמצעות לוח הבקרה של חשבונות Google, אבל לא תוכל לשייך את הנתונים האלה לחשבון אחר. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">מעדכן את Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -162,6 +165,7 @@ <translation id="7066436765290594559">מערכת ההפעלה של Chromium לא הצליחה לסנכרן את הנתונים שלך. עדכן את משפט הסיסמה לסנכרון.</translation> <translation id="7067091210845072982">אם אין לתמונה תיאור מועיל, Chromium ינסה לספק לך תיאור. כדי ליצור תיאורים, התמונות נשלחות אל Google.</translation> <translation id="7196312274710523067">לא ניתן היה להפעיל את Chromium. יש לנסות שוב.</translation> +<translation id="7197677400338048821">Chromium לא יכול לבדוק את הסיסמאות שלך. יש לנסות שוב בעוד 24 שעות.</translation> <translation id="7205698830395646142">הסתרה בתפריט Chromium</translation> <translation id="7223968959479464213">מנהל המשימות - Chromium</translation> <translation id="731644333568559921">עדכן את &מערכת ההפעלה של Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_lo.xtb b/chrome/app/resources/chromium_strings_lo.xtb index 3171f59..35837cf 100644 --- a/chrome/app/resources/chromium_strings_lo.xtb +++ b/chrome/app/resources/chromium_strings_lo.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">ລະຫັດ Google API ຫາຍໄປ. ການເຮັດໜ້າທີ່ບາງອັນຂອງ Chromium ຈະປິດໃຊ້ງານ.</translation> <translation id="3296368748942286671">ສືບຕໍ່ແລ່ນແອັບພື້ນຫຼັງ ເມື່ອ Chromium ປິດ</translation> <translation id="331951419404882060">Chromium OS ບໍ່ສາມາດຊິງຄ໌ຂໍ້ມູນຂອງທ່ານໄດ້ ເນື່ອງຈາກການລົງຊື່ເຂົ້າໃຊ້ຜິດພາດ.</translation> +<translation id="347328004046849135">Chromium ຈະແຈ້ງບອກທ່ານເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍລະຫັດຜ່ານທີ່ຖືກລະເມີດ</translation> <translation id="3474745554856756813">ນີ້ຈະລຶບ <ph name="ITEMS_COUNT" /> ລາຍການອອກຈາກອຸປະກອນນີ້. ເພື່ອກູ້ຂໍ້ມູນຂອງທ່ານຄືນໃນພາຍຫຼັງ, ກະລຸນາເຂົ້າສູ່ລະບົບ Chromium ເປັນ <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">ກະລຸນາປິດທຸກໜ້າຕ່າງ Chromium ແລະລອງໃໝ່ອີກ.</translation> <translation id="3575459661164320785">ມີຊອບແວອັນຕະລາຍໃນຄອມພິວເຕີຂອງທ່ານ. Chromium ສາມາດລຶບມັນອອກ, ກູ້ຄືນການຕັ້ງຄ່າຂອງທ່ານ ແລະ ປິດນໍາໃຊ້ສ່ວນຂະຫຍາຍເພື່ອເຮັດໃຫ້ໂປຣແກຣມທ່ອງເວັບຂອງທ່ານໃຊ້ໄດ້ເປັນປົກກະຕິອີກຄັ້ງ.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">ຢືນຢັນການອອກຈາກ Chromium ບໍ?</translation> <translation id="4748217263233248895">ຫາກໍນຳໃຊ້ການອັບເດດຄວາມປອດໄພພິເສດສຳລັບ Chromium ແລ້ວ. ກະລຸນາປິດເປີດໃໝ່ຕອນນີ້ເລີຍ ແລ້ວພວກເຮົາຈະກູ້ຄືນແຖບຂອງທ່ານ.</translation> <translation id="4750035648288509542">ເກືອບໃໝ່ຫຼ້າສຸດແລ້ວ! ເປີດໃຊ້ Chromium ຄືນໃໝ່ເພື່ອສຳເລັດການອັບເດດ. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຈະບໍ່ເປີດຄືນໃໝ່.</translation> +<translation id="4788777615168560705">Chromium ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງໃໝ່ຫຼັງຈາກ 24 ຊົ່ວໂມງ ຫຼື <ph name="BEGIN_LINK" />ກວດລະຫັດຜ່ານໃນບັນຊີ Google ຂອງທ່ານ<ph name="END_LINK" />.</translation> <translation id="479167709087336770">ນີ້ໃຊ້ຕົວກວດການສະກົດຄໍາດຽວກັນກັບທີ່ໃຊ້ໃນ Google ຊອກຫາ. ຂໍ້ຄວາມທີ່ທ່ານພິມໃນໂປຣແກຣມທ່ອງເວັບຖືກສົ່ງໃຫ້ Google. ທ່ານສາມາດປ່ຽນລັກສະນະການນໍາໃຊ້ນີ້ໄດ້ສະເໝີໃນການຕັ້ງຄ່າ.</translation> <translation id="4888717733111232871">ກົດລະບຽບຂາເຂົ້າສໍາລັບ Chromium ເພື່ອອະນຸຍາດການຈາລະຈອນ mDNS.</translation> <translation id="4943838377383847465">Chromium ຢູ່ໃນໂໝດພື້ນຫຼັງ.</translation> <translation id="4987820182225656817">ແຂກສາມາດໃຊ້ Chromium ໂດຍບໍ່ມີການປະອັນໃດໄວ້ເບື້ອງຫຼັງ.</translation> <translation id="4994636714258228724">ເພີ່ມທ່ານເອງໃສ່ Chromium</translation> +<translation id="5224391634244552924">ບໍ່ມີລະຫັດຜ່ານທີ່ບັນທຶກໄວ້. Chromium ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານເມື່ອທ່ານບັນທຶກພວກມັນໄວ້.</translation> <translation id="5277894862589591112">ເພື່ອນຳໃຊ້ການປ່ຽນແປງຂອງທ່ານ, ກະລຸນາເປີດ Chromium ຄືນໃໝ່</translation> <translation id="5358375970380395591">ທ່ານກໍາລັງລົງຊື່ເຂົ້າໃຊ້ດ້ວຍບັນຊີຄຸ້ມຄອງ ແລະໃຫ້ຜູ້ຄວບຄຸມຂອງມັນຄວບຄຸມໂປຣໄຟລ໌ Chromium ຂອງທ່ານ. ຂໍ້ມູນ Chromium ຂອງທ່ານ, ເຊັ່ນ: ແອັບ, ບຸກມາກສ໌, ປະຫວັດ, ລະຫັດຜ່ານ, ແລະການຕັ້ງຄ່າອື່ນໆຂອງທ່ານຈະຖືກຜູກມັດກັບ <ph name="USER_NAME" /> ຢ່າງຖາວອນ. ທ່ານຈະສາມາດລຶບຂໍ້ມູນນີ້ໄດ້ຜ່ານ Google Accounts Dashboard, ແຕ່ທ່ານຈະບໍ່ສາມາດເອົາຂໍ້ມູນນີ້ເຂົ້າຮ່ວມກັບບັນຊີອື່ນໄດ້. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">ກຳລັງອັບເດດ Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium ບໍ່ສາມາດຊິງຄ໌ຂໍ້ມູນຂອງທ່ານໄດ້. ກະລຸນາອັບເດດຊິງຄ໌ວະລີຂອງທ່ານ.</translation> <translation id="7067091210845072982">ຖ້າຮູບບໍ່ມີລາຍລະອຽດທີ່ເປັນປະໂຫຍດ, Chromium ຈະພະຍາຍາມໃຫ້ລາຍລະອຽດແກ່ທ່ານ. ເພື່ອສ້າງລາຍລະອຽດ, ລະບົບຈະສົ່ງຮູບພາບໃຫ້ Google.</translation> <translation id="7196312274710523067">ບໍ່ສາມາດເປີດໃຊ້ Chromium ໄດ້. ກະລຸນາລອງອີກຄັ້ງ.</translation> +<translation id="7197677400338048821">Chromium ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່ຫຼັງຈາກ 24 ຊົ່ວໂມງ.</translation> <translation id="7205698830395646142">ເຊື່ອງຢູ່ໃນເມນູ Chromium</translation> <translation id="7223968959479464213">ຕົວຈັດການໜ້າວຽກ - Chromium</translation> <translation id="731644333568559921">ອັບເດດ Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb index fe0f8e49..da9db67 100644 --- a/chrome/app/resources/chromium_strings_lv.xtb +++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Trūkst Google API atslēgu. Tiks atspējotas dažas Chromium funkcijas.</translation> <translation id="3296368748942286671">Turpināt lietotņu izpildi fonā, kad Chromium ir aizvērts</translation> <translation id="331951419404882060">Chromium OS nevarēja sinhronizēt jūsu datus pierakstīšanās kļūdas dēļ.</translation> +<translation id="347328004046849135">Ja pierakstīsieties ar uzlauztu paroli, pārlūkprogrammā Chromium tiks parādīts paziņojums</translation> <translation id="3474745554856756813">Veicot šo darbību, no šīs ierīces tiks dzēsts(-i) <ph name="ITEMS_COUNT" /> vienums(-i). Lai vēlāk izgūtu datus, pierakstieties pārlūkā Chromium kā <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Aizveriet visus Chromium logus un mēģiniet vēlreiz.</translation> <translation id="3575459661164320785">Jūsu datorā ir kaitīga programmatūra. Pārlūkprogramma Chromium var to noņemt, atjaunot jūsu iestatījumus un atspējot paplašinājumus, lai atkal pareizi darbotos.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Vai tik un tā aizvērt pārlūku Chromium?</translation> <translation id="4748217263233248895">Tikko tika piemērots īpašs Chromium drošības atjauninājums. Restartējiet tūlīt, un mēs atjaunosim jūsu cilnes.</translation> <translation id="4750035648288509542">Gandrīz atjaunināts! Lai pabeigtu atjaunināšanu, atkārtoti palaidiet pārlūkprogrammu Chromium. Inkognito režīma logi netiks atkārtoti atvērti.</translation> +<translation id="4788777615168560705">Pārlūkprogrammā Chromium nevar pārbaudīt jūsu paroles. Mēģiniet vēlreiz pēc 24 stundām vai <ph name="BEGIN_LINK" />pārbaudiet paroles savā Google kontā<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Šeit tiek izmantota tāds pats pareizrakstības pārbaudītājs, kāds tiek izmantots Google meklēšanā. Pārlūkprogrammā ievadītais teksts tiek nosūtīts Google serveriem. Jebkurā brīdī varat mainīt šo darbību iestatījumos.</translation> <translation id="4888717733111232871">Ienākošo savienojumu kārtula pārlūkam Chromium, lai atļautu mDNS datplūsmu.</translation> <translation id="4943838377383847465">Chromium darbojas fona režīmā.</translation> <translation id="4987820182225656817">Viesi var izmantot Chromium, neatstājot nekādas pēdas.</translation> <translation id="4994636714258228724">Pievienot savu kontu pārlūkā Chromium</translation> +<translation id="5224391634244552924">Nav saglabātu paroļu. Pārlūkprogrammā Chromium var pārbaudīt jūsu paroles, ja jūs tās saglabājat.</translation> <translation id="5277894862589591112">Lai ieviestu veiktās izmaiņas, atkārtoti palaidiet pārlūku Chromium.</translation> <translation id="5358375970380395591">Jūs pierakstāties ar pārvaldītu kontu, kura administrators var kontrolēt jūsu profilu. Jūsu Chromium dati, piemēram, lietotnes, grāmatzīmes, vēsture, paroles un citi iestatījumi, tiks neatgriezeniski saistīti ar lietotāju <ph name="USER_NAME" />. Varēsiet dzēst šos datus, izmantojot Google kontu informācijas paneli, taču nevarēsiet šos datus saistīt ar citu kontu. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Notiek Chromium atjaunināšana (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Chromium OS nevarēja sinhronizēt jūsu datus. Lūdzu, atjauniniet savu sinhronizācijas ieejas frāzi.</translation> <translation id="7067091210845072982">Ja attēlam nav vērtīga apraksta, pārlūks Chromium mēģinās jums tādu nodrošināt. Lai izveidotu aprakstus, attēli tiek nosūtīti uzņēmumam Google.</translation> <translation id="7196312274710523067">Neizdevās palaist Chromium. Mēģiniet vēlreiz.</translation> +<translation id="7197677400338048821">Pārlūkprogrammā Chromium nevar pārbaudīt jūsu paroles. Mēģiniet vēlreiz pēc 24 stundām.</translation> <translation id="7205698830395646142">Paslēpšana Chromium izvēlnē</translation> <translation id="7223968959479464213">Uzdevumu pārvaldnieks — Chromium</translation> <translation id="731644333568559921">Atjaunināt &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb index 6ca5e4d..ac7d16f 100644 --- a/chrome/app/resources/chromium_strings_mr.xtb +++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -59,6 +59,7 @@ <translation id="328888136576916638">Google API की गहाळ आहेत. Chromium ची काही कार्यक्षमता अक्षम केली जाईल.</translation> <translation id="3296368748942286671">Chromium बंद असताना पार्श्वभूमी ॲप्लिकेशन चालवणे सुरू ठेवा</translation> <translation id="331951419404882060">साइन इन करण्यात एररमुळे Chromium OS तुमचा डेटा संकालित करू शकले नाही.</translation> +<translation id="347328004046849135">तुम्ही धोक्यात असलेल्या पासवर्डने साइन इन केल्यावर Chromium तुम्हाला सूचित करेल</translation> <translation id="3474745554856756813">हे या डिव्हाइस मधून <ph name="ITEMS_COUNT" /> आयटम हटवेल. नंतर तुमचा डेटा पुनर्प्राप्त करण्यासाठी, Chromium मध्ये <ph name="USER_EMAIL" /> म्हणून साइन इन करा.</translation> <translation id="3509308970982693815">कृपया सर्व Chromium विंडो बंद करा आणि पुन्हा प्रयत्न करा.</translation> <translation id="3575459661164320785">तुमच्या काँप्युटरवर हानिकारक सॉफ्टवेअर आहे. Chromium ते काढून टाकून तुमचा ब्राउझर पुन्हा नीट चालावा यासाठी तुमच्या सेटिंग्ज रिस्टोअर आणि एक्स्टेंशन बंद करू शकते.</translation> @@ -94,11 +95,13 @@ <translation id="4746050847053251315">तरीही Chromium बंद करायचे?</translation> <translation id="4748217263233248895">Chromium साठी एक विशिष्ट सुरक्षितता अपडेट आत्ताच लागू केले. आता रीस्टार्ट करा आणि मग आम्ही तुमचे टॅब रिस्टोअर करू.</translation> <translation id="4750035648288509542">जवळजवळ अप टू डेट! अपडेट करणे पूर्ण करण्यासाठी Chromium पुन्हा लाँच करा. गुप्त विंडो पुन्हा उघडणार नाहीत.</translation> +<translation id="4788777615168560705">Chromium तुमचे पासवर्ड तपासू शकत नाही. २४ तासांनंतर पुन्हा प्रयत्न करा किंवा <ph name="BEGIN_LINK" />तुमच्या Google खाते मध्ये पासवर्ड तपासा<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Google शोध मध्ये वापरत असेलेले समान स्पेल चेकर हे वापरते. तुम्ही ब्राउझरमध्ये टाइप करत असलेला मजकूर Google कडे पाठवला जातो. तुम्ही हे वर्तन कधीही सेटिंग्ज मध्ये बदलू शकता.</translation> <translation id="4888717733111232871">mDNS रहदारीस अनुमती देण्यासाठी Chromium साठी अंतर्गामी नियम.</translation> <translation id="4943838377383847465">Chromium पार्श्वभूमी मोड मध्ये आहे.</translation> <translation id="4987820182225656817">अतिथी कोणतीही गोष्ट मागे न सोडता Chromium वापरू शकतात.</translation> <translation id="4994636714258228724">आपल्या स्वतःस Chromium वर जोडा</translation> +<translation id="5224391634244552924">सेव्ह केलेले पासवर्ड नाहीत. तुम्ही तुमचे पासवर्ड सेव्ह केल्यावर Chromium ते तपासू शकते.</translation> <translation id="5277894862589591112">तुम्ही केलेले बदल लागू करण्यासाठी, Chromium रीलाँच करा</translation> <translation id="5358375970380395591">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Chromium प्रोफाइलवर त्याच्या ॲडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chromium डेटा, जसे की तुमचे अॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्डद्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium अपडेट करीत आहे (<ph name="PROGRESS_PERCENT" />)</translation> @@ -165,6 +168,7 @@ <translation id="7066436765290594559">Chromium OS तुमचा डेटा सिंक करू शकले नाही. कृपया तुमची सिंक सांकेतिक पासफ्रेज अपडेट करा.</translation> <translation id="7067091210845072982">इमेजचे उपयोगी वर्णन नसल्यास, Chromium तुमच्यासाठी ते देण्याचा प्रयत्न करेल. वर्णने तयार करण्यासाठी, इमेज Google ला पाठवल्या जातात.</translation> <translation id="7196312274710523067">Chromium लाँच करता आले नाही. पुन्हा प्रयत्न करा.</translation> +<translation id="7197677400338048821">Chromium तुमचे पासवर्ड तपासू शकत नाही. २४ तासांनंतर पुन्हा प्रयत्न करा.</translation> <translation id="7205698830395646142">Chromium मेनूमध्ये लपवा</translation> <translation id="7223968959479464213">टास्क मॅनेजर- Chromium</translation> <translation id="731644333568559921">&Chromium OS अपडेट करा</translation>
diff --git a/chrome/app/resources/chromium_strings_ms.xtb b/chrome/app/resources/chromium_strings_ms.xtb index 5ec4e3e4..aad4f3c 100644 --- a/chrome/app/resources/chromium_strings_ms.xtb +++ b/chrome/app/resources/chromium_strings_ms.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Kunci API Google tiada. Sesetengah fungsi Chromium akan dilumpuhkan.</translation> <translation id="3296368748942286671">Terus menjalankan apl latar belakang apabila Chromium ditutup</translation> <translation id="331951419404882060">OS Chromium tidak dapat menyegerakkan data anda disebabkan oleh ralat melog masuk.</translation> +<translation id="347328004046849135">Chromium akan memberitahu anda apabila anda log masuk menggunakan kata laluan yang terjejas</translation> <translation id="3474745554856756813">Tindakan ini akan memadamkan <ph name="ITEMS_COUNT" /> item daripada peranti ini. Untuk mendapatkan kembali data anda kemudian, log masuk ke Chromium sebagai <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Sila tutup semua tetingkap Chromium dan cuba lagi.</translation> <translation id="3575459661164320785">Terdapat perisian yang berbahaya pada komputer anda. Chromium boleh mengalih keluar perisian tersebut, memulihkan tetapan anda dan melumpuhkan sambungan supaya penyemak imbas anda dapat berfungsi seperti biasa semula.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Keluar daripada Chromium juga?</translation> <translation id="4748217263233248895">Kemas kini keselamatan khas untuk Chromium baru sahaja dilakukan. Mulakan semula sekarang dan kami akan memulihkan tab anda.</translation> <translation id="4750035648288509542">Kemas kini hampir selesai! Lancarkan semula Chromium untuk menyelesaikan kemas kini. Tetingkap inkognito tidak dapat dibuka semula.</translation> +<translation id="4788777615168560705">Chromium tidak dapat menyemak kata laluan anda. Cuba lagi selepas 24 jam atau <ph name="BEGIN_LINK" />semak kata laluan dalam Akaun Google anda<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Ini menggunakan penyemak ejaan yang sama seperti yang digunakan dalam carian Google. Teks yang anda taip dalam penyemak imbas akan dihantar kepada Google. Anda boleh menukar gelagat ini dalam tetapan pada bila-bila masa.</translation> <translation id="4888717733111232871">Peraturan masuk bagi Chromium untuk membolehkan trafik mDNS.</translation> <translation id="4943838377383847465">Chromium dalam mod latar belakang.</translation> <translation id="4987820182225656817">Tetamu boleh menggunakan Chromium tanpa meninggalkan apa-apa.</translation> <translation id="4994636714258228724">Tambahkan diri anda kepada Chromium</translation> +<translation id="5224391634244552924">Tiada kata laluan yang disimpan. Chromium boleh menyemak kata laluan anda yang disimpan.</translation> <translation id="5277894862589591112">Untuk menggunakan perubahan anda, mulakan semula Chromium</translation> <translation id="5358375970380395591">Anda log masuk menggunakan akaun yang terurus dan memberikan pentadbirnya kawalan ke atas profil Chromium anda. Data Chromium anda, seperti apl, penanda halaman, sejarah, kata laluan dan tetapan anda yang lain akan terikat kepada <ph name="USER_NAME" /> secara kekal. Anda akan dapat memadamkan data ini melalui Papan Pemuka Akaun Google, tetapi anda tidak akan dapat mengaitkan data ini dengan akaun lain. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Mengemas kini Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">OS Chromium tidak dapat menyegerakkan data anda. Sila kemas kini frasa laluan Segerak anda.</translation> <translation id="7067091210845072982">Jika imej tiada perihalan yang berguna, Chromium akan cuba memberikan perihalan untuk anda. Untuk membuat perihalan, imej dihantar kepada Google.</translation> <translation id="7196312274710523067">Tidak dapat melancarkan Chromium. Cuba lagi.</translation> +<translation id="7197677400338048821">Chromium tidak dapat menyemak kata laluan anda. Cuba lagi selepas 24 jam.</translation> <translation id="7205698830395646142">Sembunyikan dalam Menu Chromium</translation> <translation id="7223968959479464213">Pengurus Tugas - Chromium</translation> <translation id="731644333568559921">Kemas kini &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_my.xtb b/chrome/app/resources/chromium_strings_my.xtb index e9293c2..4c49d89 100644 --- a/chrome/app/resources/chromium_strings_my.xtb +++ b/chrome/app/resources/chromium_strings_my.xtb
@@ -61,6 +61,7 @@ <translation id="328888136576916638">Google API သော့များ ရှာမရပါ။ Chromium ၏ အချို့ လုပ်ကိုင်နိုင်စွမ်းများ ပိတ်ခံကြရမည်။</translation> <translation id="3296368748942286671">Chromium ကို ပိတ်လိုက်သည့်အခါ နောက်ခံအက်ပ်များကို ဆက်လက် ဖွင့်ထားပါ။</translation> <translation id="331951419404882060">လက်မှတ်ထိုး ဝင်စဉ် အမှား တစ်ခုကြောင့် Chromium OS သည် သင်၏ ဒေတာကို စင့်က် လုပ်မပေးနိုင်ပါ။</translation> +<translation id="347328004046849135">ကျိုးပေါက်ထားသည့် စကားဝှက်ဖြင့် လက်မှတ်ထိုးဝင်သည့်အခါ Chromium က သင့်ကို ကြောင်းကြားပါမည်</translation> <translation id="3474745554856756813">၎င်းသည် ဤစက်ပစ္စည်းမှ အကြောင်းအရာ <ph name="ITEMS_COUNT" /> ခုကို ဖျက်လိုက်ပါမည်။ သင့်ဒေတာကို နောက်မှ ပြန်ယူရန် Chromium သို့ <ph name="USER_EMAIL" /> အဖြစ် လက်မှတ်ထိုးဝင်ပါ။</translation> <translation id="3509308970982693815">ကျေးဇူးပြု၍ Chromium ၐင်းဒိုးများကို ပိတ်ပြီး ထပ်စမ်းပါ။</translation> <translation id="3575459661164320785">သင့်ကွန်ပျူတာတွင် အန္တရာယ်ရှိသောဆော့ဖ်ဝဲ ရှိနေသည်။ Chromium သည် ၎င်းကို ဖယ်ရှားခြင်း၊ သင်၏ ဆက်တင်များ ပြန်ယူခြင်းနှင့် ဘရောင်ဇာ ပုံမှန်အတိုင်း ပြန်လည်အသုံးပြုနိုင်ရန် နောက်ဆက်တွဲများ ပိတ်ခြင်းတို့ကို ပြုလုပ်နိုင်ပါသည်။</translation> @@ -96,11 +97,13 @@ <translation id="4746050847053251315">မည်သို့ပင်ဖြစ်စေ Chromium ကို ပိတ်လိုပါသလား။</translation> <translation id="4748217263233248895">Chromium အတွက် အထူးလုံခြုံရေးအပ်ဒိတ်ကို ယခုလေးတင် ထည့်သွင်းထားသည်။ ယခုပြန်လည်စတင်လိုက်ပါက သင်၏ တဘ်များကို ပြန်ဖွင့်ပေးပါမည်။</translation> <translation id="4750035648288509542">အပ်ဒိတ်လုပ်ပြီးပါတော့မည်။ အပ်ဒိတ်လုပ်ခြင်း အပြီးသတ်ရန် Chromium ကို ပြန်ဖွင့်ပါ။ ရုပ်ဖျက် ဝင်ဒိုးများကို ပြန်ဖွင့်မည် မဟုတ်ပါ။</translation> +<translation id="4788777615168560705">Chromium က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ ၂၄ နာရီအကြာတွင် ထပ်စမ်းကြည့်ပါ သို့မဟုတ် <ph name="BEGIN_LINK" />သင်၏ Google Account ရှိ စကားဝှက်များကို စစ်ဆေးပါ<ph name="END_LINK" />။</translation> <translation id="479167709087336770">၎င်းက Google ရှာဖွေမှုတွင် အသုံးပြုထားသော စာလုံးပေါင်း စစ်စနစ် တစ်ခုတည်းကို အသုံးပြုသည်။ ဘရောင်ဇာတွင် သင်ရိုက်သည့် စာသားကို Google သို့ပို့ပါသည်။ ဤလုပ်ဆောင်ပုံကို ဆက်တင်များတွင် အချိန်မရွေး ပြောင်းနိုင်သည်။</translation> <translation id="4888717733111232871">Chromium အတွက် mDNS သွားလာမှု ခွင့်ပြုရေး အဝင် စည်းကမ်းချက်</translation> <translation id="4943838377383847465">Chromium သည် နောက်ခံ မုဒ်ထဲမှာ ရှိနေသည်။</translation> <translation id="4987820182225656817">ဧည့်သည်များသည် Chromium ကို သုံးနိုင်ကြကာ နောက်မှာ ဘာမှ ကျန်ရစ်မည် မဟုတ်ပါ။</translation> <translation id="4994636714258228724">Chromium သို့သင့်ကိုယ်သင် ပေါင်းထည့်ရန်</translation> +<translation id="5224391634244552924">သိမ်းထားသော စကားဝှက် မရှိပါ။ သင်စကားဝှက်များကို သိမ်းသည့်အခါ Chromium က ၎င်းတို့ကို စစ်ဆေးနိုင်သည်။</translation> <translation id="5277894862589591112">သင့်အပြောင်းအလဲများ ထည့်သွင်းရန် Chromium ကို ပြန်စတင်ပါ</translation> <translation id="5358375970380395591">သင်သည် စီမံကွပ်ကဲထားသည့် အကောင့် ထဲသို့ လက်မှတ် ထိုးဝင်နေကာ စီမံအုပ်ချုပ်သူအား သင့် Chromium ပရိုဖိုင်ကို ထိန်းချုပ်ခွင့်ကို လွှဲပေးနေသည်။ သင်၏ အက်ပ်များ၊စာညှပ်များ၊ မှတ်တမ်း၊ စကားဝှက်များ၊ နှင့် အခြား ဆက်တင်များလို သင်၏ Chromium ဒေတာများမှာ <ph name="USER_NAME" /> သို့ ထာဝရ ချိတ်တွဲလျက် ရှိလာကြမည်။ သင်သည် ဒီဒေတာကို Google အကောင့်များ ဒိုင်ခွက်မှ တစ်ဆင့် ဖျက်လို့ ရနိုင်သော်လည်း၊ သင်သည် ၎င်းဒေတာကို အခြား အကောင့်နှင့် ဆက်စပ်၍ မရနိုင်ပါ။ <ph name="LEARN_MORE" /></translation> @@ -168,6 +171,7 @@ <translation id="7066436765290594559">Chromium OS သင်၏ဒေတာကို စင့်ခ်လုပ်၍ မရပါ။ သင့်စင့်ခ်လျှို့ဝှက်စကားစုကို ကျေးဇူးပြု၍ အဆင့်မြှင့်ပါ။</translation> <translation id="7067091210845072982">ပုံတွင် အသုံးဝင်သော အကြောင်းအရာ မပါလျှင် Chromium က သင့်အတွက် ဖော်ပြပေးပါမည်။ အကြောင်းအရာများ ဖော်ပြပေးရန် ပုံများကို Google သို့ပို့လိုက်ပါသည်။</translation> <translation id="7196312274710523067">Chromium ကို ဖွင့်၍မရပါ။ ထပ်စမ်းကြည့်ပါ။</translation> +<translation id="7197677400338048821">Chromium က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ ၂၄ နာရီအကြာတွင် ထပ်စမ်းကြည့်ပါ။</translation> <translation id="7205698830395646142">Chromium မီနူးတွင် သိမ်းထားရန်</translation> <translation id="7223968959479464213">လုပ်ငန်းမန်နေဂျာ - Chromium</translation> <translation id="731644333568559921">မွမ်းမံမှု &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_nl.xtb b/chrome/app/resources/chromium_strings_nl.xtb index 63a1b0f..6ece146 100644 --- a/chrome/app/resources/chromium_strings_nl.xtb +++ b/chrome/app/resources/chromium_strings_nl.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Google API-sleutels ontbreken. Sommige functies van Chromium worden uitgeschakeld.</translation> <translation id="3296368748942286671">Achtergrondapps ingeschakeld houden als Chromium is gesloten</translation> <translation id="331951419404882060">Chromium OS kan je gegevens niet synchroniseren door een fout tijdens het inloggen.</translation> +<translation id="347328004046849135">Chromium laat het je weten als je inlogt met een gehackt wachtwoord</translation> <translation id="3474745554856756813">Hiermee worden <ph name="ITEMS_COUNT" /> items verwijderd van dit apparaat. Als je je gegevens later wilt terughalen, log je in bij Chromium als <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Sluit alle Chromium-vensters en probeer het opnieuw.</translation> <translation id="3575459661164320785">Er staat schadelijke software op je computer. Chromium kan deze verwijderen, je instellingen herstellen en extensies uitschakelen, zodat je browser weer normaal werkt.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Chromium toch sluiten?</translation> <translation id="4748217263233248895">Er is zojuist een speciale beveiligingsupdate voor Chromium toegepast. Start nu opnieuw op. Je tabbladen worden hersteld.</translation> <translation id="4750035648288509542">Bijna klaar met updaten. Start Chromium opnieuw om de update te voltooien. Incognitovensters worden niet opnieuw geopend.</translation> +<translation id="4788777615168560705">Chromium kan je wachtwoorden niet checken. Probeer het over 24 uur opnieuw of <ph name="BEGIN_LINK" />check de wachtwoorden in je Google-account<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Hiervoor wordt dezelfde spellingcontrole gebruikt als voor Google Zoeken. Tekst die je in de browser typt, wordt naar Google gestuurd. Je kunt dit altijd wijzigen in de instellingen.</translation> <translation id="4888717733111232871">Inkomende regel zodat Chromium mDNS-verkeer toestaat.</translation> <translation id="4943838377383847465">Chromium bevindt zich in de achtergrondmodus.</translation> <translation id="4987820182225656817">Gasten kunnen Chromium gebruiken zonder iets achter te laten.</translation> <translation id="4994636714258228724">Jezelf toevoegen aan Chromium</translation> +<translation id="5224391634244552924">Geen opgeslagen wachtwoorden. Chromium kan je wachtwoorden checken als je deze hebt opgeslagen.</translation> <translation id="5277894862589591112">Als je de wijzigingen wilt toepassen, start je Chromium opnieuw</translation> <translation id="5358375970380395591">Je logt in op een beheerd account waarmee de eigenaar van dat account beheer krijgt over je Chromium-profiel. Je Chromium-gegevens zoals je apps, bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden permanent gekoppeld aan <ph name="USER_NAME" />. Je kunt deze gegevens verwijderen via het Google Accounts Dashboard, maar je kunt deze gegevens niet koppelen aan een ander account.<ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium updaten (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS kan je gegevens niet synchroniseren. Update je wachtwoordzin voor synchronisatie.</translation> <translation id="7067091210845072982">Als een afbeelding geen nuttige beschrijving bevat, probeert Chromium je er een te geven. Afbeeldingen worden naar Google verzonden om beschrijvingen te maken.</translation> <translation id="7196312274710523067">Kan Chromium niet starten. Probeer het opnieuw.</translation> +<translation id="7197677400338048821">Chromium kan je wachtwoorden niet checken. Probeer het over 24 uur opnieuw.</translation> <translation id="7205698830395646142">Verbergen in Chromium-menu</translation> <translation id="7223968959479464213">Taakbeheer - Chromium</translation> <translation id="731644333568559921">&Chromium OS updaten</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb index 1c50702..1ce6672 100644 --- a/chrome/app/resources/chromium_strings_no.xtb +++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">API-nøkler for Google mangler. Noe funksjonalitet i Chromium blir deaktivert.</translation> <translation id="3296368748942286671">Fortsett å kjøre bakgrunnsprogrammer når Chromium er lukket</translation> <translation id="331951419404882060">Chromium OS kunne ikke synkronisere dataene dine på grunn av en feil under pålogging.</translation> +<translation id="347328004046849135">Chromium varsler deg når du logger på med passord som er utsatt for sikkerhetsbrudd</translation> <translation id="3474745554856756813">Dette sletter <ph name="ITEMS_COUNT" /> elementer fra denne enheten. For å hente dataene dine igjen senere må du logge på Chromium som <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Lukk alle Chromium-vinduer og prøv på nytt.</translation> <translation id="3575459661164320785">Det finnes skadelig programvare på datamaskinen din. Chromium kan fjerne den, gjenopprette innstillingene dine og deaktivere utvidelser for å få nettleseren til å fungere som normalt igjen.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Vil du avslutte Chromium likevel?</translation> <translation id="4748217263233248895">En spesiell sikkerhetsoppdatering for Chromium ble nettopp installert. Start på nytt nå, så gjenoppretter vi fanene dine.</translation> <translation id="4750035648288509542">Nesten ferdig oppdatert! Start Chromium på nytt for å fullføre oppdateringen. Inkognitovinduer blir ikke gjenåpnet.</translation> +<translation id="4788777615168560705">Chromium kan ikke sjekke passordene dine. Prøv på nytt om 24 timer, eller <ph name="BEGIN_LINK" />sjekk passordene i Google-kontoen din<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Denne funksjonen bruker den samme stavekontrollen som Google Søk. Tekst du skriver inn i nettleseren, sendes til Google. Du kan når som helst endre dette i innstillingene.</translation> <translation id="4888717733111232871">Regel om innkommende trafikk for Chromium for å tillate mDNS-trafikk.</translation> <translation id="4943838377383847465">Chromium er i bakgrunnsmodus.</translation> <translation id="4987820182225656817">Gjester kan bruke Chromium uten å etterlate seg spor.</translation> <translation id="4994636714258228724">Legg til deg selv i Chromium</translation> +<translation id="5224391634244552924">Ingen lagrede passord. Chromium kan sjekke passordene dine når du lagrer dem.</translation> <translation id="5277894862589591112">For å bruke endringene dine må du starte Chromium på nytt</translation> <translation id="5358375970380395591">Du logger deg på med en administrert konto og gir tilhørende administratorer kontroll over Chromium-profilen din. Chromium-dataene dine, slik som apper, bokmerker, loggen, passord og andre innstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse dataene via oversikten for Google-kontoer, men du kan ikke knytte disse dataene til en annen konto. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Oppdaterer Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Chromium kunne ikke synkronisere dataene dine. Oppdater passordfrasen for synkronisering.</translation> <translation id="7067091210845072982">Hvis et bilde ikke har noen nyttig beskrivelse, prøver Chromium å finne en til deg. For å opprette beskrivelser blir bilder sendt til Google.</translation> <translation id="7196312274710523067">Kunne ikke starte Chromium. Prøv på nytt.</translation> +<translation id="7197677400338048821">Chromium kan ikke sjekke passordene dine. Prøv igjen når det har gått 24 timer.</translation> <translation id="7205698830395646142">Skjul i Chromium-menyen</translation> <translation id="7223968959479464213">Oppgavebehandling – Chromium</translation> <translation id="731644333568559921">Oppdater &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_pl.xtb b/chrome/app/resources/chromium_strings_pl.xtb index 5f0c5b0..48631aa 100644 --- a/chrome/app/resources/chromium_strings_pl.xtb +++ b/chrome/app/resources/chromium_strings_pl.xtb
@@ -56,6 +56,7 @@ <translation id="328888136576916638">Brakuje kluczy interfejsu Google API. Niektóre funkcje Chromium będą wyłączone.</translation> <translation id="3296368748942286671">Kontynuuj działanie aplikacji w tle po zamknięciu Chromium</translation> <translation id="331951419404882060">System operacyjny Chromium nie może zsynchronizować danych z powodu błędu logowania.</translation> +<translation id="347328004046849135">Chromium powiadomi Cię w razie logowania za pomocą przejętego hasła</translation> <translation id="3474745554856756813">Spowoduje to usunięcie <ph name="ITEMS_COUNT" /> elementów z tego urządzenia. Aby później odzyskać dane, zaloguj się w Chromium jako <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Zamknij wszystkie okna Chromium i spróbuj ponownie.</translation> <translation id="3575459661164320785">Masz na komputerze szkodliwe oprogramowanie. Chromium może je usunąć, przywrócić Twoje ustawienia i wyłączyć rozszerzenia, by przeglądarka znów działała normalnie.</translation> @@ -91,11 +92,13 @@ <translation id="4746050847053251315">Zamknąć Chromium mimo to?</translation> <translation id="4748217263233248895">Właśnie została zastosowana specjalna aktualizacja zabezpieczeń Chromium. Uruchom ponownie Chromium teraz. Karty zostaną przywrócone.</translation> <translation id="4750035648288509542">Prawie gotowe! Uruchom Chromium ponownie, by ukończyć aktualizację. Okna incognito nie otworzą się ponownie.</translation> +<translation id="4788777615168560705">Chromium nie może sprawdzić Twoich haseł. Spróbuj ponownie za 24 godziny lub <ph name="BEGIN_LINK" />sprawdź hasła na koncie Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Będzie stosowany ten sam mechanizm sprawdzania pisowni, który jest używany w wyszukiwarce Google. Tekst wpisywany w przeglądarce jest wysyłany do Google. Zawsze możesz to zmienić w ustawieniach.</translation> <translation id="4888717733111232871">Reguła dla ruchu przychodzącego w Chromium zezwalająca na ruch mDNS.</translation> <translation id="4943838377383847465">Chromium jest w trybie działania w tle</translation> <translation id="4987820182225656817">Goście mogą korzystać z Chromium, nie pozostawiając żadnych danych.</translation> <translation id="4994636714258228724">Dodaj siebie do Chromium</translation> +<translation id="5224391634244552924">Brak zapisanych haseł. Chromium może sprawdzać Twoje hasła, gdy je zapiszesz.</translation> <translation id="5277894862589591112">Aby zastosować zmiany, uruchom ponownie Chromium</translation> <translation id="5358375970380395591">Logujesz się na zarządzane konto i przekazujesz jego administratorowi kontrolę nad swoim profilem Chromium. Twoje dane Chromium, takie jak aplikacje, zakładki, historia, hasła i inne ustawienia, zostaną trwale powiązane z użytkownikiem <ph name="USER_NAME" />. Będzie można je usunąć w Panelu kont Google, ale nie będzie można ich powiązać z innym kontem. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Aktualizuję Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -162,6 +165,7 @@ <translation id="7066436765290594559">System operacyjny Chromium nie może zsynchronizować danych. Zaktualizuj hasło synchronizacji.</translation> <translation id="7067091210845072982">Jeśli obraz nie ma przydatnego opisu, Chromium spróbuje go dla Ciebie stworzyć. W tym celu obrazy zostaną wysłane do Google.</translation> <translation id="7196312274710523067">Nie udało się uruchomić Chromium. Spróbuj ponownie.</translation> +<translation id="7197677400338048821">Chromium nie może sprawdzić Twoich haseł. Spróbuj ponownie za 24 godziny.</translation> <translation id="7205698830395646142">Ukryj w menu Chromium</translation> <translation id="7223968959479464213">Menedżer zadań – Chromium</translation> <translation id="731644333568559921">Aktualizuj system operacyjny &Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb index 47d7eafe..28c9290 100644 --- a/chrome/app/resources/chromium_strings_pt-BR.xtb +++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -56,6 +56,7 @@ <translation id="328888136576916638">As chaves da API do Google não foram encontradas. Algumas funcionalidades do Chromium serão desativadas.</translation> <translation id="3296368748942286671">Continuar executando os aplicativos em segundo plano quando o Chromium for fechado</translation> <translation id="331951419404882060">O Chromium OS não pôde sincronizar seus dados devido a um erro durante o login.</translation> +<translation id="347328004046849135">O Chromium enviará uma notificação quando você fizer login com uma senha comprometida</translation> <translation id="3474745554856756813">Essa ação excluirá <ph name="ITEMS_COUNT" /> itens deste dispositivo. Para recuperar seus dados mais tarde, faça login no Chromium como <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Feche todas as janelas do Chromium e tente novamente.</translation> <translation id="3575459661164320785">Há um software nocivo no seu computador. O Chromium pode removê-lo, restaurar as configurações e desativar as extensões para que o navegador volte a funcionar normalmente.</translation> @@ -91,11 +92,13 @@ <translation id="4746050847053251315">Sair do Chromium mesmo assim?</translation> <translation id="4748217263233248895">Uma atualização de segurança especial para o Chromium acabou de ser aplicada. Reinicie agora, e suas guias serão restauradas.</translation> <translation id="4750035648288509542">Falta pouco para a atualização terminar. Reinicie o Chromium para concluí-la. As janelas anônimas não serão abertas novamente.</translation> +<translation id="4788777615168560705">Não foi possível verificar suas senhas. Tente novamente em 24 horas ou <ph name="BEGIN_LINK" />verifique-as na sua Conta do Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Esta opção usa o mesmo corretor ortográfico usado na Pesquisa Google. O texto digitado no navegador é enviado para o Google. É possível alterar esse comportamento nas configurações a qualquer momento.</translation> <translation id="4888717733111232871">Regra interna para que o Chromium permita tráfego mDNS.</translation> <translation id="4943838377383847465">O Chromium está em modo de segundo plano.</translation> <translation id="4987820182225656817">Convidados podem usar o Chromium sem deixar nada para trás.</translation> <translation id="4994636714258228724">Cadastrar-se no Chromium</translation> +<translation id="5224391634244552924">Nenhuma senha salva. O Chromium poderá verificar suas senhas quando elas forem salvas.</translation> <translation id="5277894862589591112">Para que as alterações sejam aplicadas, reinicie o Chromium</translation> <translation id="5358375970380395591">Você está fazendo login com uma conta gerenciada e concedendo ao administrador da conta o controle sobre seu perfil do Chromium. Seus dados do Chromium, como aplicativos, favoritos, histórico, senhas e outras configurações serão permanentemente vinculados a <ph name="USER_NAME" />. Você pode excluir esses dados pelo painel das Contas do Google, mas não pode associá-los a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Atualizando o Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -160,6 +163,7 @@ <translation id="7066436765290594559">O Chromium OS não pôde sincronizar seus dados. Atualize sua senha de sincronização.</translation> <translation id="7067091210845072982">Se uma imagem não tiver uma descrição útil, o Chromium tentará fornecer uma para você. As imagens serão enviadas ao Google para a criação de descrições.</translation> <translation id="7196312274710523067">Não foi possível iniciar o Chromium. Tente novamente.</translation> +<translation id="7197677400338048821">Não foi possível verificar suas senhas. Tente novamente em 24 horas.</translation> <translation id="7205698830395646142">Esconder no menu do Chromium</translation> <translation id="7223968959479464213">Gerenciador de tarefas - Chromium</translation> <translation id="731644333568559921">Atualizar o &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-PT.xtb b/chrome/app/resources/chromium_strings_pt-PT.xtb index c065106..d3ac2f0 100644 --- a/chrome/app/resources/chromium_strings_pt-PT.xtb +++ b/chrome/app/resources/chromium_strings_pt-PT.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">As chaves da API do Google estão em falta. Algumas funcionalidades do Chromium serão desativadas.</translation> <translation id="3296368748942286671">Continuar a executar aplicações em segundo plano quando o Chromium está fechado</translation> <translation id="331951419404882060">O Chromium não conseguiu sincronizar os dados devido a um erro no início de sessão.</translation> +<translation id="347328004046849135">O Chromium envia-lhe uma notificação quando iniciar sessão com uma palavra-passe comprometida.</translation> <translation id="3474745554856756813">Esta ação elimina <ph name="ITEMS_COUNT" /> itens deste dispositivo. Para recuperar os dados mais tarde, inicie sessão no Chromium como <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Feche todas as janelas do Chromium e tente novamente.</translation> <translation id="3575459661164320785">Existe software prejudicial no seu computador. O Chromium pode removê-lo, restaurar as suas definições e desativar as extensões para que o navegador volte a funcionar normalmente.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Pretende fechar o Chromium mesmo assim?</translation> <translation id="4748217263233248895">Acabou de ser instalada uma atualização de segurança especial para o Chromium. Reinicie agora e iremos restaurar os seus separadores.</translation> <translation id="4750035648288509542">Quase atualizado! Reinicie o Chromium para concluir a atualização. Não é possível reabrir as suas janelas de navegação anónima.</translation> +<translation id="4788777615168560705">O Chromium não consegue verificar as suas palavras-passe. Tente novamente após 24 horas ou <ph name="BEGIN_LINK" />verifique as palavras-passe na sua Conta Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Utiliza o mesmo corretor ortográfico utilizado na Pesquisa Google. O texto que introduzir no navegador é enviado à Google. Pode alterar este comportamento nas definições.</translation> <translation id="4888717733111232871">Regra de importação para o Chromium permitir o tráfego mDNS.</translation> <translation id="4943838377383847465">O Chromium está no modo em segundo plano.</translation> <translation id="4987820182225656817">Os convidados podem utilizar o Chromium sem perder qualquer funcionalidade.</translation> <translation id="4994636714258228724">Adicionar-se ao Chromium</translation> +<translation id="5224391634244552924">Não existem palavras-passe guardadas. O Chromium consegue verificar as suas palavras-passe quando as guarda.</translation> <translation id="5277894862589591112">Para aplicar as alterações, reinicie o Chromium.</translation> <translation id="5358375970380395591">Está a iniciar sessão com uma conta gerida e a permitir que o gestor controle o seu perfil do Chromium. Os seus dados do Chromium, como aplicações, marcadores, histórico, palavras-passe e outras definições, ficarão associados definitivamente a <ph name="USER_NAME" />. Poderá eliminar estes dados através do Painel de Controlo das Contas Google, mas não poderá associá-los a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">A atualizar o Chromium (<ph name="PROGRESS_PERCENT" />)…</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">O SO Chromium não conseguiu sincronizar os dados. Atualize a frase de acesso de sincronização.</translation> <translation id="7067091210845072982">Se uma imagem não tiver uma descrição útil, o Chromium tenta fornecer uma. Para criar as descrições, são enviadas imagens para a Google.</translation> <translation id="7196312274710523067">Não foi possível iniciar o Chromium. Tente novamente.</translation> +<translation id="7197677400338048821">O Chromium não consegue verificar as suas palavras-passe. Tente novamente após 24 horas.</translation> <translation id="7205698830395646142">Ocultar no menu do Chromium</translation> <translation id="7223968959479464213">Gestor de Tarefas - Chromium</translation> <translation id="731644333568559921">Atualizar o SO &Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb index d9b03ee..ef1466fa 100644 --- a/chrome/app/resources/chromium_strings_ro.xtb +++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Lipsesc chei pentru API-ul Google. Unele funcționalități Chromium vor fi dezactivate.</translation> <translation id="3296368748942286671">Rulați în continuare aplicații de fundal când Chromium este închis</translation> <translation id="331951419404882060">Sistemul de operare Chromium nu a putut sincroniza datele din cauza unei erori la conectare.</translation> +<translation id="347328004046849135">Chromium te va anunța dacă te conectezi folosind o parolă compromisă</translation> <translation id="3474745554856756813">Astfel, se vor șterge <ph name="ITEMS_COUNT" /> elemente de pe acest dispozitiv. Pentru a recupera datele mai târziu, conectează-te la Chromium ca <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Închideți toate ferestrele Chromium și încercați din nou.</translation> <translation id="3575459661164320785">Ai software dăunător pe computer. Chromium poate să îl elimine, să restabilească setările și să dezactiveze extensiile pentru ca browserul să funcționeze normal din nou.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Ieși din Chromium oricum?</translation> <translation id="4748217263233248895">Tocmai a fost aplicată o actualizare de securitate specială pentru Chromium. Repornește acum, iar filele vor fi restabilite.</translation> <translation id="4750035648288509542">Actualizarea este aproape gata! Relansează Chromium pentru a finaliza actualizarea. Ferestrele incognito nu se vor redeschide.</translation> +<translation id="4788777615168560705">Chromium nu îți poate verifica parolele. Încearcă din nou după 24 de ore sau <ph name="BEGIN_LINK" />verifică parolele din Contul Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Folosește același verificator ortografic folosit în Căutarea Google. Textul pe care îl introduci în browser este trimis la Google. Poți schimba acest comportament în setări.</translation> <translation id="4888717733111232871">Regula de intrare pentru Chromium pentru a permite traficul mDNS.</translation> <translation id="4943838377383847465">Chromium este în modul fundal.</translation> <translation id="4987820182225656817">Invitații pot folosi Chromium fără a lăsa nicio urmă.</translation> <translation id="4994636714258228724">Adăugați-vă la Chromium</translation> +<translation id="5224391634244552924">Nu există parole salvate. Chromium îți poate verifica parolele dacă le salvezi.</translation> <translation id="5277894862589591112">Pentru a aplica modificările, relansează Chromium</translation> <translation id="5358375970380395591">Vă conectați cu un cont gestionat și îi permiteți administratorului acestuia controlul asupra profilului dvs. Chromium. Datele Chromium, cum ar fi aplicațiile, marcajele, istoricul, parolele și alte setări vor fi asociate definitiv cu <ph name="USER_NAME" />. Veți putea să ștergeți aceste date prin intermediul Tabloului de bord pentru Conturi Google, însă nu veți putea să asociați aceste date cu alt cont. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium se actualizează (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Sistemul de operare Chromium nu a putut sincroniza datele. Actualizați parola de acces pentru sincronizare.</translation> <translation id="7067091210845072982">Dacă o imagine nu are o descriere utilă, Chromium va încerca să o completeze. Pentru a crea descrieri, imaginile sunt trimise la Google.</translation> <translation id="7196312274710523067">Chromium nu a putut fi lansat. Încearcă din nou.</translation> +<translation id="7197677400338048821">Chromium nu îți poate verifica parolele. Încearcă din nou după 24 de ore.</translation> <translation id="7205698830395646142">Ascunde în meniul Chromium</translation> <translation id="7223968959479464213">Manager de activități - Chromium</translation> <translation id="731644333568559921">Actualizați sistemul de operare &Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb index 007fa5e0..8c481bae 100644 --- a/chrome/app/resources/chromium_strings_ru.xtb +++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -56,6 +56,7 @@ <translation id="328888136576916638">Отсутствуют ключи API Google. Некоторые функции Chromium могут не работать.</translation> <translation id="3296368748942286671">Продолжить выполнение фоновых приложений после закрытия Chromium</translation> <translation id="331951419404882060">Не удалось синхронизировать данные из-за ошибки входа в аккаунт.</translation> +<translation id="347328004046849135">Вы получите уведомление от Chromium, если войдете в аккаунт с паролем, который был раскрыт.</translation> <translation id="3474745554856756813">С устройства будут удалены объекты (<ph name="ITEMS_COUNT" />). Чтобы восстановить данные позже, войдите в Chromium как <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Закройте все окна Chromium и повторите попытку снова.</translation> <translation id="3575459661164320785">На компьютере обнаружено вредоносное ПО. Chromium может удалить его, восстановить настройки и отключить расширения. Это вернет браузер в обычное состояние.</translation> @@ -91,11 +92,13 @@ <translation id="4746050847053251315">Завершить работу Chromium?</translation> <translation id="4748217263233248895">Установлено специальное обновление системы безопасности. Перезапустите Chromium (все вкладки будут восстановлены).</translation> <translation id="4750035648288509542">Почти готово! Чтобы завершить обновление, перезапустите Chromium. Окна в режиме инкогнито не будут открыты повторно.</translation> +<translation id="4788777615168560705">Не удается проверить пароли в Chromium. Повторите попытку через 24 часа или <ph name="BEGIN_LINK" />проверьте пароли в аккаунте Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Используется та же технология проверки правописания, что и в Google Поиске. Текст, который вы введете в браузере, будет отправлен в Google. Этот параметр можно изменить в настройках.</translation> <translation id="4888717733111232871">Разрешить в Chromium передачу входящего трафика по протоколу mDNS</translation> <translation id="4943838377383847465">Chromium работает в фоновом режиме</translation> <translation id="4987820182225656817">Используйте Chromium в гостевом режиме, если не хотите сохранять данные о посещенных сайтах.</translation> <translation id="4994636714258228724">Добавить пользователя Chromium</translation> +<translation id="5224391634244552924">Сохраненных паролей нет. Чтобы браузер Chromium мог проверять пароли, сохраните их.</translation> <translation id="5277894862589591112">Чтобы изменения вступили в силу, перезапустите Chromium.</translation> <translation id="5358375970380395591">Выполнив вход в управляемый аккаунт, вы предоставляете администратору право контролировать настройки вашего профиля Chromium. Ваши данные Chromium (приложения, закладки, история, пароли и другие настройки) будут временно связаны с аккаунтом <ph name="USER_NAME" />. Эти данные можно удалить в Личном кабинете Google, но их нельзя связать с другим аккаунтом. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Обновление Chromium (<ph name="PROGRESS_PERCENT" />)…</translation> @@ -162,6 +165,7 @@ <translation id="7066436765290594559">Не удалось синхронизировать данные. Обновите кодовую фразу в Sync.</translation> <translation id="7067091210845072982">Если у изображения нет понятного описания, Chromium попытается его найти. Для создания описаний изображения отправляются в Google.</translation> <translation id="7196312274710523067">Не удалось запустить Chromium. Повторите попытку.</translation> +<translation id="7197677400338048821">Не удается проверить пароли в Chromium. Повторите попытку через 24 часа.</translation> <translation id="7205698830395646142">Спрятать в меню Chromium</translation> <translation id="7223968959479464213">Диспетчер задач – Chromium</translation> <translation id="731644333568559921">Обновить &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_si.xtb b/chrome/app/resources/chromium_strings_si.xtb index daa122e0..bb05c2d 100644 --- a/chrome/app/resources/chromium_strings_si.xtb +++ b/chrome/app/resources/chromium_strings_si.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Google API යතුරු අහිමිව ඇත. Chromium හි ඇතැම් ක්රියාකාරීත්ව අක්රීය වනු ඇත.</translation> <translation id="3296368748942286671">Chromium වසා ඇති විට පසුබිම් යෙදුම් ධාවනය අඛණ්ඩව කරන්න</translation> <translation id="331951419404882060">Chromium OSට සයින් ඉන් වීම නිසා ඔබේ දත්ත සමමු කළ නොහැකි විය.</translation> +<translation id="347328004046849135">ඔබ සමථයට පත් වූ මුරපදයක් සමඟ පුරන විට Chromium ඔබට දැනුම් දෙයි</translation> <translation id="3474745554856756813">මෙය මෙම උපාංගයෙන් අයිතම <ph name="ITEMS_COUNT" />ක් මකනු ඇත. ඔබගේ දත්ත පසුව ලබා ගැනීමට, <ph name="USER_EMAIL" /> ලෙස Chromium වෙත පුරන්න.</translation> <translation id="3509308970982693815">කරුණාකර සියලු Chromium කවුළු වසා නැවත උත්සාහ කරන්න.</translation> <translation id="3575459661164320785">ඔබගේ පරිගණකයෙහි හානිකර මෘදුකාංග ඇත. ඔබේ බ්රවුසරය නැවතත් සාමාන්ය පරිදි ක්රියා කරවීමට, Chromium හට එය ඉවත් කිරීම, ඔබේ සැකසීම් ප්රතිසාධන කිරීම, සහ දිගු අබල කිරීම කළ හැක.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">කෙසේ වුවත් Chromium වෙතින් ඉවත් වන්න ද?</translation> <translation id="4748217263233248895">Chromium සඳහා විශේෂ ආරක්ෂක යාවත්කාලීනයක් දැන් යොදා ගත්තා. දැන් යළි අරඹන්න, අපි ඔබේ පටිති ප්රතිසාධන කරන්නම්.</translation> <translation id="4750035648288509542">බොහෝ දුරට යාවත්කාලීනයි! යාවත්කාලීනය අවසන් කිරීමට Chromium යළි දියත් කරන්න. අප්රසිද්ධ කවුළු යළි විවෘත නොවෙයි.</translation> +<translation id="4788777615168560705">Chromium හට ඔබේ මුරපද පරීක්ෂා කළ නොහැක. පැය 24-කට පසු නැවත උත්සාහ කරන්න, නැති නම් <ph name="BEGIN_LINK" />ඔබේ Google ගිණුම තුළ මුරපද පරීක්ෂා කරන්න<ph name="END_LINK" />.</translation> <translation id="479167709087336770">මෙය Google සෙවීම තුළ භාවිත කෙරෙන අක්ෂර පරීක්ෂකයම භාවිත කරයි. ඔබ බ්රවුසරය තුළ ටයිප් කරන පාඨය Google වෙත යවනු ලැබේ. ඔබට සැම විටම මෙම හැසිරීම සැකසීම් තුළ වෙනස් කළ හැක.</translation> <translation id="4888717733111232871">Chromium සඳහා අභ්යන්තර නියෝගය mDNS තදබදය ඉඩ දීමයි.</translation> <translation id="4943838377383847465">Chromium පසුබිම් ප්රකාරය තුළ ඇත.</translation> <translation id="4987820182225656817">අමුත්තන්ට කිසිවක් තබා යෑමෙන් තොරව Chromium භාවිත කළ හැක.</translation> <translation id="4994636714258228724">ඔබව Chromium වෙත එක් කරන්න</translation> +<translation id="5224391634244552924">සුරැකි මුරපද නැත. ඔබ ඔබේ මුරපද පරීක්ෂා කරන විට Chromium හට ඒවා පරීක්ෂා කළ හැක.</translation> <translation id="5277894862589591112">ඔබේ වෙනස්කම් යෙදීමට, Chromium නැවත දියත් කරන්න</translation> <translation id="5358375970380395591">ඔබ කළමනාකරණය කළ ගිණුමක් සමගින් පුරමින් සිටින අතර ඔබේ Chromium පැතිකඩට වැඩියෙන් එහි පරිපාලක පාලනය ලබා දෙමින් සිටී. යෙදුම්, පිටු සලකුණු, ඉතිහාසය, රහස්වචන, සහ අනෙකුත් සැකසුම් වැනි ඔබේ Chromium දත්ත ස්ථිරවම <ph name="USER_NAME" /> වෙත බැඳෙනු ඇත. Google ගිණුම් පසුරු පුවරුව හරහා මෙම දත්ත මැකීමට ඔබට හැකි වනු ඇත, නමුත් ඔබට මෙම දත්ත වෙනත් ගිණුමක් සමඟ සම්බන්ධ කළ නොහැකි වනු ඇත. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium යාවත්කාලීන කරමින් (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS හට ඔබේ දත්ත සම්මුහුර්ත කළ නොහැක. ඔබේ සමමුහුර්ත කිරීමේ මුරපදය යාවත්කාලීන කරන්න.</translation> <translation id="7067091210845072982">රූපයකට ප්රයෝජනවත් විස්තරයක් නොමැති නම්, Chromium ඔබට විස්තරයක් ලබා දීමට උත්සාහ කරයි. විස්තර නිර්මාණ කිරීමට, රූප Google වෙත යවනු ලැබේ.</translation> <translation id="7196312274710523067">Chromium දියත් කළ නොහැකි විය. නැවත උත්සාහ කරන්න.</translation> +<translation id="7197677400338048821">Chromium හට ඔබේ මුරපද පරීක්ෂා කළ නොහැක. පැය 24-කට පසුව නැවත උත්සාහ කරන්න.</translation> <translation id="7205698830395646142">Chromium මෙනුව තුළ සඟවන්න</translation> <translation id="7223968959479464213">කාර්ය කළමනාකරු - Chromium</translation> <translation id="731644333568559921">Chromium OS යාවත් කරන්න</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb index b01cd497..84c20cec3 100644 --- a/chrome/app/resources/chromium_strings_sl.xtb +++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Manjkajo ključi za Google API. Nekatere funkcije Chromiuma bodo onemogočene.</translation> <translation id="3296368748942286671">Nadaljuj izvajanje aplikacij v ozadju, ko je Chromium zaprt</translation> <translation id="331951419404882060">Chromium OS ni mogel sinhronizirati podatkov zaradi napake pri prijavi.</translation> +<translation id="347328004046849135">Chromium vas bo obvestil, če se prijavite z ogroženim geslom</translation> <translation id="3474745554856756813">S tem bo iz te naprave izbrisanih več elementov (<ph name="ITEMS_COUNT" />). Če želite pozneje prenesti podatke, se v Chromium prijavite kot <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Zaprite vsa okna Chromiuma in poskusite znova.</translation> <translation id="3575459661164320785">V računalniku je nameščena škodljiva programska oprema. Chromium jo lahko odstrani, obnovi vaše nastavitve in onemogoči razširitve, da bo brskalnik spet normalno deloval.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Želite vseeno zapreti Chromium?</translation> <translation id="4748217263233248895">Pravkar je bila nameščena posebna varnostna posodobitev za Chromium. Znova ga zaženite (vaše zavihke bomo obnovili).</translation> <translation id="4750035648288509542">Skoraj je posodobljen. Znova zaženite Chromium, da dokončate posodobitev. Okna brez beleženja dejavnosti se ne bodo znova odprla.</translation> +<translation id="4788777615168560705">Chromium ne more preveriti gesel. Poskusite znova čez 24 ur ali <ph name="BEGIN_LINK" />preverite gesla v računu Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Uporabljeno je isto preverjanje črkovanja kot v Iskanju Google. Besedilo, ki ga vnesete v brskalniku, je poslano Googlu. To lahko kadar koli spremenite v nastavitvah.</translation> <translation id="4888717733111232871">Pravilo za dohodni promet za Chromium, ki omogoča promet mDNS.</translation> <translation id="4943838377383847465">Chromium se izvaja v ozadju.</translation> <translation id="4987820182225656817">Gostje lahko uporabljajo Chromium, ne da bi za seboj pustili kar koli.</translation> <translation id="4994636714258228724">Dodajte se v Chromium</translation> +<translation id="5224391634244552924">Ni shranjenih gesel. Chromium lahko preveri gesla, če jih shranite.</translation> <translation id="5277894862589591112">Če želite uporabiti spremembe, znova zaženite Chromium</translation> <translation id="5358375970380395591">Prijavljate se z upravljanim računom in s tem njegovemu skrbniku omogočate nadzor vašega profila v Chromiumu. Vaši podatki v Chromiumu, kot so aplikacije, zaznamki, zgodovina, gesla in druge nastavitve, bodo postali trajno povezani z uporabnikom <ph name="USER_NAME" />. Te podatke boste lahko izbrisali na nadzorni plošči za Google Račune, vendar jih ne boste mogli povezati z drugim računom. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Posodabljanje Chromiuma (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium OS ni mogel sinhronizirati podatkov. Posodobite sinhronizacijsko geslo.</translation> <translation id="7067091210845072982">Če slika nima koristnega opisa, ga bo Chromium poskušal zagotoviti. Opisi se ustvarijo tako, da se slike pošljejo Googlu.</translation> <translation id="7196312274710523067">Chromiuma ni bilo mogoče zagnati. Poskusite znova.</translation> +<translation id="7197677400338048821">Chromium ne more preveriti gesel. Poskusite znova čez 24 ur.</translation> <translation id="7205698830395646142">Skrij v meniju Chromiuma</translation> <translation id="7223968959479464213">Upravitelj opravil – Chromium</translation> <translation id="731644333568559921">Posodobi sistem &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb index ce6b2a9..c010276 100644 --- a/chrome/app/resources/chromium_strings_sv.xtb +++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Googles API-nycklar saknas. Vissa funktioner i Google Chromium kommer att vara inaktiverade.</translation> <translation id="3296368748942286671">Fortsätt köra bakgrundsappar när Chromium avslutas</translation> <translation id="331951419404882060">Det gick inte att synkronisera data med Chromium OS på grund av ett inloggningsfel.</translation> +<translation id="347328004046849135">Chromium aviserar dig om du loggar in med ett utsatt lösenord</translation> <translation id="3474745554856756813"><ph name="ITEMS_COUNT" /> objekt tas bort från enheten. Logga in i Chromium som <ph name="USER_EMAIL" /> om du vill kunna återställa datan senare.</translation> <translation id="3509308970982693815">Stäng alla Chromium-fönster och försök igen.</translation> <translation id="3575459661164320785">Det finns skadlig programvara på datorn. Den skadliga programvaran kan tas bort, inställningarna återställas och tillägg inaktiveras så att webbläsaren fungerar som den ska igen.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Vill du avsluta Chromium ändå?</translation> <translation id="4748217263233248895">En särskild säkerhetsuppdatering för Chromium installerades precis. Starta om webbläsaren nu. Flikarna återställs efteråt.</translation> <translation id="4750035648288509542">Uppdateringen är snart klar! Starta Chromium igen för att avsluta uppdateringen. Inkognitofönster öppnas inte igen.</translation> +<translation id="4788777615168560705">Chromium kan inte kontrollera dina lösenord. Försök igen om 24 timmar eller <ph name="BEGIN_LINK" />kontrollera lösenorden i ditt Google-konto<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Detta använder samma stavningskontroll som Google Sök. Text som du skriver i webbläsaren skickas till Google. Du kan när som helst ändra detta i inställningarna.</translation> <translation id="4888717733111232871">Regel som tillåter inkommande mDNS-trafik för Chromium.</translation> <translation id="4943838377383847465">Chromium körs i bakgrundsläge.</translation> <translation id="4987820182225656817">Gäster kan använda Chromium utan att lämna spår efter sig.</translation> <translation id="4994636714258228724">Lägg till dig själv i Chromium</translation> +<translation id="5224391634244552924">Inga sparade lösenord. Chromium kan bara kontrollera dina lösenord om du sparar dem.</translation> <translation id="5277894862589591112">Ändringarna tillämpas när du startar om Chromium</translation> <translation id="5358375970380395591">Du loggar in med ett hanterat konto och ger dess administratör kontroll över din Chromium-profil. Dina uppgifter i Chromium, t.ex. dina appar, bokmärken, din historik, ditt lösenord och andra inställningar, kopplas då permanent till <ph name="USER_NAME" />. Du kommer att kunna ta bort dessa uppgifter via instrumentpanelen i Google Konton, men du kommer inte att kunna koppla dem till något annat konto. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium uppdateras (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Det gick inte att synkronisera data med Chromium. Uppdatera lösenfrasen för synkronisering.</translation> <translation id="7067091210845072982">Om en bild inte har någon användbar beskrivning görs ett försök att beskriva den åt dig i Chromium. Bilderna skickas till Google så att beskrivningen kan genereras.</translation> <translation id="7196312274710523067">Det gick inte att starta Chromium. Försök igen.</translation> +<translation id="7197677400338048821">Chromium kan inte kontrollera dina lösenord. Försök igen om ett dygn.</translation> <translation id="7205698830395646142">Dölj i Chromium-menyn</translation> <translation id="7223968959479464213">Aktivitetshanteraren – Chromium</translation> <translation id="731644333568559921">Uppdatera &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb index fe505d43..219af7a 100644 --- a/chrome/app/resources/chromium_strings_sw.xtb +++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">Funguo za Google API zinakosekana. Utendaji fulani wa Chromium utazimwa.</translation> <translation id="3296368748942286671">Endelea kuendesha programu za mandharinyuma wakati Chromium imefungwa</translation> <translation id="331951419404882060">Mfumo wa Uendeshaji wa Chromium haukuweza kusawazisha data yako kutokana na hitilafu wakati wa kuingia katika akaunti.</translation> +<translation id="347328004046849135">Chromium itakuarifu ukiingia katika akaunti ukitumia nenosiri lililoathiriwa</translation> <translation id="3474745554856756813">Hatua hii itafuta vipengee <ph name="ITEMS_COUNT" /> kwenye kifaa hiki. Ili urejeshe data yako baadaye, ingia katika Chromium ukitumia <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Tafadhali funga madirisha yote ya Chromium na ujaribu tena.</translation> <translation id="3575459661164320785">Kuna programu hatari kwenye kompyuta yako. Chromium inaweza kuiondoa, kurejesha mipangilio yako na kuzima viendelezi ili kufanya kivinjari chako kifanye kazi tena kama kawaida.</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">Ungependa kufunga Chromium?</translation> <translation id="4748217263233248895">Sasisho maalum la usalama wa Chromium limewekwa sasa hivi. Ifunge kisha uifungue na tutarejesha vichupo vyako.</translation> <translation id="4750035648288509542">Inaelekea kukamilisha mchakato wa kusasisha! Fungua tena Chromium ili ukamilishe mchakato wa kusasisha. Haitafungua upya madirisha fiche.</translation> +<translation id="4788777615168560705">Chromium imeshindwa kukagua manenosiri yako. Jaribu tena baada ya saa 24 au <ph name="BEGIN_LINK" />kagua manenosiri katika Akaunti yako ya Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Huduma hii hutumia kikagua maendelezo sawa na kinachotumika kwenye Huduma ya Tafuta na Google. Maandishi unayoandika kwenye kivinjari yanatumwa kwa Google. Unaweza kubadilisha hali hii katika mipangilio wakati wowote.</translation> <translation id="4888717733111232871">Sheria ya ndani ya Chromium ili kuruhusu trafiki ya mDNS.</translation> <translation id="4943838377383847465">Chromium iko katika hali ya chini chini.</translation> <translation id="4987820182225656817">Walioalikwa wanaweza kutumia Chromium bila kuacha kitu chochote nyuma.</translation> <translation id="4994636714258228724">Jiongeze kwenye Chrome</translation> +<translation id="5224391634244552924">Hakuna manenosiri yaliyohifadhiwa. Chromium inaweza kukagua manenosiri yako ukiyahifadhi.</translation> <translation id="5277894862589591112">Ili utumie mabadiliko uliyofanya, fungua Chromium upya</translation> <translation id="5358375970380395591">Unaingia katika akaunti inayodhibitiwa na kumpa msimamizi wa akaunti hiyo udhibiti wa wasifu wako kwenye Chromium. Data yako ya Chromium, kama vile programu zako, alamisho, historia, manenosiri, na mipangilio miingine itahusishwa na <ph name="USER_NAME" /> kabisa. Utaweza kufuta data hii kupitia Dashibodi ya Akaunti za Google, lakini hutaweza kuunganisha data hii na akaunti nyingine. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Inasasisha Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Mfumo wa Uendeshaji wa Chromium haukuweza kusawazisha data yako. Tafadhali sasisha kauli ya siri unayotumia kusawazisha.</translation> <translation id="7067091210845072982">Ikiwa picha haina ufafanuzi muhimu, Chromium itajaribu kukuwekea. Ili kuweka ufafanuzi, tutatuma picha kwa Google.</translation> <translation id="7196312274710523067">Imeshindwa kuanzisha Chromium. Jaribu tena.</translation> +<translation id="7197677400338048821">Chromium imeshindwa kukagua manenosiri yako. Jaribu tena baada ya saa 24.</translation> <translation id="7205698830395646142">Ficha katika Menyu ya Chromium</translation> <translation id="7223968959479464213">Kidhibiti cha Shughuli - Chromium</translation> <translation id="731644333568559921">Sasisha Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb index db219c8..72b0e19 100644 --- a/chrome/app/resources/chromium_strings_th.xtb +++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">คีย์ API ของ Google หายไป การทำงานบางอย่างของ Chromium จะถูกปิดใช้งาน</translation> <translation id="3296368748942286671">เรียกใช้แอปพลิเคชันพื้นหลังต่อไปเมื่อปิด Chromium</translation> <translation id="331951419404882060">Chromium OS ไม่สามารถซิงค์ข้อมูลของคุณเนื่องจากเกิดข้อผิดพลาดในการลงชื่อเข้าใช้</translation> +<translation id="347328004046849135">Chromium จะแจ้งให้ทราบเมื่อคุณลงชื่อเข้าใช้ด้วยรหัสผ่านที่ไม่รัดกุม</translation> <translation id="3474745554856756813">การดำเนินการนี้จะลบ <ph name="ITEMS_COUNT" /> รายการออกจากอุปกรณ์นี้ หากต้องการดึงข้อมูลภายหลัง ให้ลงชื่อเข้าใช้ Chromium ด้วย <ph name="USER_EMAIL" /></translation> <translation id="3509308970982693815">โปรดปิดหน้าต่าง Chromium ทั้งหมดแล้วลองอีกครั้ง</translation> <translation id="3575459661164320785">มีซอฟต์แวร์อันตรายในคอมพิวเตอร์ของคุณ Chromium ช่วยนำซอฟต์แวร์ดังกล่าวออก คืนการตั้งค่า และปิดใช้ส่วนขยายให้คุณได้ เพื่อให้เบราว์เซอร์กลับมาทำงานเป็นปกติอีกครั้ง</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">ปิด Chromium ใช่ไหม</translation> <translation id="4748217263233248895">ระบบเพิ่งนำการอัปเดตความปลอดภัยพิเศษไปใช้กับ Chromium รีสตาร์ทเลย แล้วเราจะคืนค่าแท็บให้คุณ</translation> <translation id="4750035648288509542">ใกล้จะอัปเดตเสร็จแล้ว เปิด Chromium อีกครั้งเพื่อให้การอัปเดตเสร็จสมบูรณ์ หน้าต่างที่ไม่ระบุตัวตนจะไม่เปิดให้อีก</translation> +<translation id="4788777615168560705">Chromium ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดรอ 24 ชั่วโมงแล้วลองอีกครั้งหรือ<ph name="BEGIN_LINK" />ตรวจสอบรหัสผ่านในบัญชี Google<ph name="END_LINK" /></translation> <translation id="479167709087336770">การดำเนินการนี้จะใช้โปรแกรมตรวจตัวสะกดแบบเดียวกับใน Google Search ข้อความที่คุณพิมพ์ในเบราว์เซอร์จะส่งไปยัง Google คุณปรับเปลี่ยนลักษณะการทำงานนี้ได้ทุกเมื่อในการตั้งค่า</translation> <translation id="4888717733111232871">กฎขาเข้าสำหรับ Chromium เพื่ออนุญาตการเข้าชมแบบ mDNS</translation> <translation id="4943838377383847465">Chromium กำลังอยู่ในโหมดทำงานในพื้นหลัง</translation> <translation id="4987820182225656817">ผู้เยี่ยมชมสามารถใช้ Chromium โดยไม่ทิ้งร่องรอยไว้</translation> <translation id="4994636714258228724">เพิ่มตัวคุณเองใน Chromium</translation> +<translation id="5224391634244552924">ไม่มีรหัสผ่านที่บันทึกไว้ Chromium จะตรวจสอบรหัสผ่านได้เมื่อคุณบันทึกรหัสผ่านไว้</translation> <translation id="5277894862589591112">เปิด Chromium ขึ้นมาใหม่เพื่อให้การเปลี่ยนแปลงมีผล</translation> <translation id="5358375970380395591">คุณกำลังลงชื่อเข้าใช้ด้วยบัญชีที่จัดการ และให้การควบคุมระดับผู้ดูแลระบบของบัญชีดังกล่าวเหนือโปรไฟล์ Chromium ของคุณ ข้อมูล Chromium เช่น แอป บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จะเชื่อมโยงอย่างถาวรกับ <ph name="USER_NAME" /> คุณจะสามารถลบข้อมูลนี้ผ่านทางแผงควบคุมบัญชี Google แต่คุณจะไม่สามารถเชื่อมโยงข้อมูลนี้กับบัญชีอื่น <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">กำลังอัปเดต Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Chromium OS ไม่สามารถซิงค์ข้อมูลของคุณ โปรดอัปเดตข้อความรหัสผ่านสำหรับการซิงค์</translation> <translation id="7067091210845072982">หากรูปภาพไม่มีคำอธิบายที่เป็นประโยชน์ Chromium จะพยายามใส่คำอธิบายให้คุณ รูปภาพจะส่งมายัง Google เพื่อสร้างคำอธิบาย</translation> <translation id="7196312274710523067">เปิด Chromium ไม่ได้ โปรดลองอีกครั้ง</translation> +<translation id="7197677400338048821">Chromium ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดรอ 24 ชั่วโมงแล้วลองอีกครั้ง</translation> <translation id="7205698830395646142">ซ่อนในเมนู Chromium</translation> <translation id="7223968959479464213">ตัวจัดการงาน - Chromium</translation> <translation id="731644333568559921">อัปเดต &Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb index e1610c12..9bedab4 100644 --- a/chrome/app/resources/chromium_strings_tr.xtb +++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -56,6 +56,7 @@ <translation id="328888136576916638">Google API anahtarları eksik. Chromium'un bazı işlevleri devre dışı bırakılacak.</translation> <translation id="3296368748942286671">Chromium kapandığında arka plan uygulamaları çalıştırmaya devam et</translation> <translation id="331951419404882060">Oturum açma sırasındaki bir hata nedeniyle Chromium OS, verilerinizi senkronize edemedi.</translation> +<translation id="347328004046849135">Chromium, güvenliği ihlal edilmiş bir şifreyle oturum açtığınızda size haber verir</translation> <translation id="3474745554856756813">Bu işlem, <ph name="ITEMS_COUNT" /> öğeyi bu cihazdan silecektir. Verilerinizi daha sonra geri almak için Chromium'da <ph name="USER_EMAIL" /> hesabıyla oturum açın.</translation> <translation id="3509308970982693815">Lütfen tüm Chromium pencerelerini kapatıp tekrar deneyin.</translation> <translation id="3575459661164320785">Bilgisayarınızda zararlı yazılım var. Chromium, tarayıcınızın tekrar normal şekilde çalışmasını sağlamak için bunu kaldırabilir, ayarlarınızı geri yükleyebilir ve uzantıları devre dışı bırakabilir.</translation> @@ -91,11 +92,13 @@ <translation id="4746050847053251315">Yine de Chromium'dan çıkılsın mı?</translation> <translation id="4748217263233248895">Chromium için özel bir güvenlik güncellemesi uygulandı. Uygulamayı hemen yeniden başlatın; açık sekmeleriniz geri yüklenir.</translation> <translation id="4750035648288509542">Güncel hale gelmek üzere! Güncellemenin tamamlanması için Chromium'u yeniden başlatın. Gizli pencereler yeniden açılmayacak.</translation> +<translation id="4788777615168560705">Chromium, şifrelerinizi kontrol edemiyor. 24 saat sonra tekrar deneyin veya <ph name="BEGIN_LINK" />şifreleri Google Hesabınızda kontrol edin<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Bu işlev, Google Arama'da kullanılan yazım denetiminin aynısını kullanır. Tarayıcıda yazdığınız metin Google'a gönderilir. Bu davranışı istediğiniz zaman ayarlardan değiştirebilirsiniz.</translation> <translation id="4888717733111232871">Chromium'un mDNS trafiğine izin vermeyi sağlayan gelen trafik kuralı.</translation> <translation id="4943838377383847465">Chromium arka plan modunda.</translation> <translation id="4987820182225656817">Misafirler Chromium'u geride hiçbir şey bırakmadan kullanabilir.</translation> <translation id="4994636714258228724">Kendinizi Chromium'a ekleyin</translation> +<translation id="5224391634244552924">Kaydedilen şifre yok. Chromium, kaydetmeniz halinde şifrelerinizi kontrol edebilir.</translation> <translation id="5277894862589591112">Yaptığınız değişiklikleri uygulamak için Chromium'u yeniden başlatın</translation> <translation id="5358375970380395591">Yönetilen bir hesapla oturum açıyor ve hesabın yöneticisine Chromium profilinizi denetleme izni veriyorsunuz. Uygulamalarınız, yer işaretleriniz, geçmişiniz, şifreleriniz ve diğer ayarlarınız gibi Chromium verileriniz kalıcı olarak <ph name="USER_NAME" /> ile bağlantılandırılacaktır. Google Hesapları Hesap Özeti'ni kullanarak bu verileri silebilecek, ancak bu verileri başka bir hesapla ilişkilendiremeyeceksiniz. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium güncelleniyor (<ph name="PROGRESS_PERCENT" />)</translation> @@ -162,6 +165,7 @@ <translation id="7066436765290594559">Chromium OS, verilerinizi senkronize edemedi. Lütfen Senkronizasyon parolanızı güncelleyin.</translation> <translation id="7067091210845072982">Bir resmin işe yarar bir açıklaması yoksa, Chromium sizin için bir açıklama sağlamaya çalışır. Açıklama oluşturmak için resimler Google'a gönderilir.</translation> <translation id="7196312274710523067">Chromium başlatılamadı. Tekrar deneyin.</translation> +<translation id="7197677400338048821">Chromium, şifrelerinizi kontrol edemiyor. 24 saat sonra tekrar deneyin.</translation> <translation id="7205698830395646142">Chromium Menüsünde Gizle</translation> <translation id="7223968959479464213">Görev Yöneticisi - Chromium</translation> <translation id="731644333568559921">&Chromium OS'i güncelle</translation>
diff --git a/chrome/app/resources/chromium_strings_uk.xtb b/chrome/app/resources/chromium_strings_uk.xtb index 5f7b633..abb5133 100644 --- a/chrome/app/resources/chromium_strings_uk.xtb +++ b/chrome/app/resources/chromium_strings_uk.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">Ключі API Google відсутні. Деякі функції Chromium буде вимкнено.</translation> <translation id="3296368748942286671">Продовжувати роботу фонових програм, коли Chromium закрито</translation> <translation id="331951419404882060">ОС Chromium не вдалося синхронізувати ваші дані через помилку входу.</translation> +<translation id="347328004046849135">Chromium сповістить, коли ви ввійдете в обліковий запис, ввівши зламаний пароль</translation> <translation id="3474745554856756813">З цього пристрою буде видалено стільки елементів: <ph name="ITEMS_COUNT" />. Щоб відновити дані пізніше, увійдіть в обліковий запис Chromium як <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Закрийте всі вікна Chromium і повторіть спробу.</translation> <translation id="3575459661164320785">Виявлено шкідливе програмне забезпечення на вашому комп’ютері. Chromium може видалити його, відновити налаштування та вимкнути розширення, щоб веб-переглядач знову працював належним чином.</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">Усе одно вийти з Chromium?</translation> <translation id="4748217263233248895">Щойно було застосовано спеціальне оновлення для захисту Chromium. Перезапустіть веб-переглядач, і ваші вкладки буде відновлено.</translation> <translation id="4750035648288509542">Майже готово. Перезапустіть Chromium, щоб завершити оновлення. Вікна в режимі анонімного перегляду не відновляться й не відкриються знову.</translation> +<translation id="4788777615168560705">Chromium не може перевірити паролі. Повторіть спробу через 24 години або <ph name="BEGIN_LINK" />перевірте паролі в обліковому записі Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Використовується та сама технологія перевірки правопису, що й у Пошуку Google. Текст, який ви вводите у веб-переглядачі, надсилається в Google. Це завжди можна змінити в налаштуваннях.</translation> <translation id="4888717733111232871">Вхідне правило для Chromium дозволяє трафік mDNS.</translation> <translation id="4943838377383847465">Chromium у фоновому режимі.</translation> <translation id="4987820182225656817">Гості можуть анонімно користуватися Chromium.</translation> <translation id="4994636714258228724">Додати себе в Chromium</translation> +<translation id="5224391634244552924">Немає збережених паролів. Chromium зможе перевірити ваші паролі, коли ви їх збережете.</translation> <translation id="5277894862589591112">Щоб застосувати зміни, перезапустіть Chromium</translation> <translation id="5358375970380395591">Ви входите, використовуючи дані облікового запису, яким керує адміністратор. Адміністратор може контролювати ваш профіль Chromium. Ваші дані Chromium, як-от програми, закладки, історія, паролі й інші налаштування, буде назавжди пов’язано з обліковим записом <ph name="USER_NAME" />. Ці дані можна видалити на інформаційній панелі Облікових записів Google, але ви не зможете пов’язати їх з іншим обліковим записом. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium оновлюється (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">ОС Chromium не вдалося синхронізувати ваші дані. Оновіть свою парольну фразу для синхронізації.</translation> <translation id="7067091210845072982">Якщо зображення не має корисного опису, Chromium спробує додати його. Для цього зображення надсилаються в Google.</translation> <translation id="7196312274710523067">Не вдалося запустити Chromium. Повторіть спробу.</translation> +<translation id="7197677400338048821">Chromium не може перевірити паролі. Повторіть спробу через 24 години.</translation> <translation id="7205698830395646142">Сховати в меню Chromium</translation> <translation id="7223968959479464213">Диспетчер завдань – Chromium</translation> <translation id="731644333568559921">Оновити &ОС Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_uz.xtb b/chrome/app/resources/chromium_strings_uz.xtb index 05fbb2da..64679f0 100644 --- a/chrome/app/resources/chromium_strings_uz.xtb +++ b/chrome/app/resources/chromium_strings_uz.xtb
@@ -56,6 +56,7 @@ <translation id="328888136576916638">Google API kalitlari yetishmayapti. Chromium’ning ba’zi funksiyalari ishlamasligi mumkin.</translation> <translation id="3296368748942286671">Chromium yopilishida orqa fon rejimida ishlayotgan ilovalar to‘xtatilmasin</translation> <translation id="331951419404882060">Hisobga kirishdagi xatolik sababli Chromium OS ma’lumotlarni sinxronlay olmadi.</translation> +<translation id="347328004046849135">Google hisobingizga kirsangiz, Chromium oshkor qilingan parollar haqida xabar qiladi</translation> <translation id="3474745554856756813">Ushbu qurilmadagi <ph name="ITEMS_COUNT" /> ta element butunlay o‘chiriladi. Ma’lumotlaringizni keyinroq olish uchun Chromium brauzeriga <ph name="USER_EMAIL" /> sifatida kiring.</translation> <translation id="3509308970982693815">Barcha Chromium oynalarini yoping va qaytadan urinib ko‘ring.</translation> <translation id="3575459661164320785">Kompyuteringizda zararli dasturlar topildi. Chromium uni tozalab, sozlamalarni qayta tiklashi, kengaytmalarni oʻchirib qoʻyishi mumkin.</translation> @@ -91,11 +92,13 @@ <translation id="4746050847053251315">Chromium baribir yopilsinmi?</translation> <translation id="4748217263233248895">Chromium xavfsizlik tizimiga maxsus yangilanish oʻrnatildi. Qayta ishga tushiring va ochiq sahifalarni tiklang.</translation> <translation id="4750035648288509542">Deyarli yangilandi! Yangilash tugashi uchun Chromium brauzerini qayta ishga tushiring. Inkognito oynalar qayta ochilmaydi.</translation> +<translation id="4788777615168560705">Chromium parollaringizni tekshira olmadi. 24 soatdan keyin qayta urining yoki <ph name="BEGIN_LINK" />Google hisobingizdagi parollarni tekshiring<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Google qidiruvida ishlatiladigan imlo tekshiruvi vositasidan foydalanadi. Brauzerda kiritiladigan matn Google serverlariga yuboriladi. Buni istalgan vaqtda sozlamalar orqali oʻzgartirish mumkin.</translation> <translation id="4888717733111232871">Chromium‘ga kiruvchi trafikni mDNS protokoli orqali uzatishga ruxsat berish</translation> <translation id="4943838377383847465">Chromium orqa fon rejimida ishlamoqda.</translation> <translation id="4987820182225656817">Agar tashrif buyurgan saytlaringiz haqidagi ma’lumotlar saqlanmasligini xohlasangiz, Chromium mehmon rejimidan foydalaning.</translation> <translation id="4994636714258228724">Chromium foydalanuvchini qo‘shish</translation> +<translation id="5224391634244552924">Hech qanday parol saqlanmagan. Chromium faqat saqlangan parollaringizni tekshira oladi.</translation> <translation id="5277894862589591112">O‘zgarishlarni tatbi qilish uchun Chromium qayta ishga tushirilishi zarur</translation> <translation id="5358375970380395591">Siz boshqaruvdagi hisobga kiryapsiz va uning administratoriga Chromium profilingizni boshqarishga ruxsat beryapsiz. Ilovalar, xatcho‘plar, brauzer tarixi, parollar va boshqa sozlamalar kabi barcha Chromium ma’lumotlaringiz <ph name="USER_NAME" /> hisobiga biriktiriladi. Siz bu ma’lumotlarni Google hisoblar shaxsiy kabinetidan o‘chirishingiz mumkin, lekin bu ma’lumotlarni boshqa hisob bilan bog‘lay olmaysiz. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium yangilanmoqda (<ph name="PROGRESS_PERCENT" />)</translation> @@ -162,6 +165,7 @@ <translation id="7066436765290594559">Chromium OS ma’lumotlaringizni sinxronlay olmadi. Sync kodli iborasini yangilang.</translation> <translation id="7067091210845072982">Agar rasmga foydali tavsif berilmagan boʻlsa, Chromium uni sizga tavsiflaydi. Tavsif yaratish uchun rasmlar Googlega yuboriladi.</translation> <translation id="7196312274710523067">Chromium ishga tushmadi. Qayta urining.</translation> +<translation id="7197677400338048821">Chromium parollaringizni tekshira olmadi. 24 soatdan keyin qayta urining.</translation> <translation id="7205698830395646142">Chromium menyusida ko‘rsatilmasin</translation> <translation id="7223968959479464213">Vazifalar menejeri – Chromium</translation> <translation id="731644333568559921">&Chromium OS‘ni yangilash</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-HK.xtb b/chrome/app/resources/chromium_strings_zh-HK.xtb index 9413594..2b83525 100644 --- a/chrome/app/resources/chromium_strings_zh-HK.xtb +++ b/chrome/app/resources/chromium_strings_zh-HK.xtb
@@ -60,6 +60,7 @@ <translation id="328888136576916638">缺少 Google API 金鑰,系統將停用 Chromium 的部分功能。</translation> <translation id="3296368748942286671">在 Chromium 關閉時繼續執行背景應用程式</translation> <translation id="331951419404882060">登入時發生錯誤,因此 Chromium 作業系統無法同步處理您的數據。</translation> +<translation id="347328004046849135">如果您使用被盜用的密碼登入帳戶,Chromium 會通知您</translation> <translation id="3474745554856756813">這會刪除此裝置上的 <ph name="ITEMS_COUNT" /> 個項目。如果日後想擷取資料,請以 <ph name="USER_EMAIL" /> 的身分登入 Chromium。</translation> <translation id="3509308970982693815">請關閉所有 Chromium 視窗,然後再試一次。</translation> <translation id="3575459661164320785">在您的電腦上發現有害軟件。Chromium 可移除該軟件、復原設定及停用擴充程式,讓瀏覽器恢復正常運作。</translation> @@ -95,11 +96,13 @@ <translation id="4746050847053251315">仍要退出 Chromium 嗎?</translation> <translation id="4748217263233248895">Chromium 剛套用了特別的安全性更新。建議您立即重新啟動,我們將會還原您的分頁。</translation> <translation id="4750035648288509542">即將更新至最新版本!重新啟動 Chromium 即可完成更新程序。無痕式視窗不會重新開啟。</translation> +<translation id="4788777615168560705">Chromium 無法檢查密碼,請於 24 小時後再試一次,或<ph name="BEGIN_LINK" />檢查 Google 帳戶中的密碼<ph name="END_LINK" />。</translation> <translation id="479167709087336770">這會使用與「Google 搜尋」相同的的拼字檢查工具。您在瀏覽器輸入的文字將會傳送給 Google。您可以在設定中變更此行為。</translation> <translation id="4888717733111232871">允許 mDNS 流量的 Chromium 輸入規則。</translation> <translation id="4943838377383847465">Chromium 正在背景模式中執行。</translation> <translation id="4987820182225656817">以訪客身分使用 Chromium 不會留下任何記錄。</translation> <translation id="4994636714258228724">新增為 Chromium 使用者</translation> +<translation id="5224391634244552924">沒有已儲存的密碼。儲存密碼時,Chromium 可檢查您的密碼。</translation> <translation id="5277894862589591112">如要套用變更,請重新啟動 Chromium</translation> <translation id="5358375970380395591">您已登入受管理的帳戶,並將管理控制權授予您的 Chromium 設定檔。您的 Chromium 數據 (例如應用程式、書籤、記錄、密碼和其他設定) 均將永久與 <ph name="USER_NAME" /> 建立關聯。您可以透過 Google 帳戶資訊主頁刪除這些數據,但您無法將這些數據與其他帳戶建立關聯。<ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">正在更新 Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -166,6 +169,7 @@ <translation id="7066436765290594559">Chromium 作業系統無法同步處理您的數據,請更新您的同步複雜密碼。</translation> <translation id="7067091210845072982">如果圖片並無有用的說明,Chromium 會嘗試為您提供說明。因此,圖片將傳送至 Google 以建立說明。</translation> <translation id="7196312274710523067">無法啟動 Chromium,請再試一次。</translation> +<translation id="7197677400338048821">Chromium 無法檢查密碼,請於 24 小時後再試一次。</translation> <translation id="7205698830395646142">隱藏在 Chromium 選單中</translation> <translation id="7223968959479464213">工作管理員 - Chromium</translation> <translation id="731644333568559921">更新 Chromium 作業系統(&C)</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-TW.xtb b/chrome/app/resources/chromium_strings_zh-TW.xtb index 4ede335..e98803b58 100644 --- a/chrome/app/resources/chromium_strings_zh-TW.xtb +++ b/chrome/app/resources/chromium_strings_zh-TW.xtb
@@ -58,6 +58,7 @@ <translation id="328888136576916638">缺少 Google API 金鑰,系統將停用 Chromium 的部分功能。</translation> <translation id="3296368748942286671">在 Chromium 關閉時繼續執行背景應用程式</translation> <translation id="331951419404882060">登入時發生錯誤,因此 Chromium 作業系統無法同步處理你的資料。</translation> +<translation id="347328004046849135">如果你使用遭外洩的密碼登入帳戶,Chromium 會通知你</translation> <translation id="3474745554856756813">登出後,系統會將 <ph name="ITEMS_COUNT" /> 個項目從這個裝置上刪除。日後如要重新取得你的資料,請以 <ph name="USER_EMAIL" /> 身分登入 Chromium。</translation> <translation id="3509308970982693815">請關閉所有 Chromium 視窗,然後再試一次。</translation> <translation id="3575459661164320785">你的電腦安裝了有害軟體。Chromium 可以移除該軟體、復原設定及停用擴充功能,讓你的瀏覽器恢復正常運作。</translation> @@ -93,11 +94,13 @@ <translation id="4746050847053251315">確定要關閉 Chromium 嗎?</translation> <translation id="4748217263233248895">Chromium 剛才套用了特殊的安全性更新。請立即重新啟動,系統會恢復你原先開啟的分頁。</translation> <translation id="4750035648288509542">即將更新為最新版本!重新啟動 Chromium 即可完成更新程序。無痕式視窗不會重新開啟。</translation> +<translation id="4788777615168560705">Chromium 無法檢查你的密碼,請於 24 小時後再試,或<ph name="BEGIN_LINK" />檢查 Google 帳戶中的密碼<ph name="END_LINK" />。</translation> <translation id="479167709087336770">這會使用與 Google 搜尋相同的拼字檢查工具。系統會將你在瀏覽器中輸入的文字傳送給 Google。你隨時可以在設定中變更這項行為。</translation> <translation id="4888717733111232871">允許 mDNS 流量的 Chromium 輸入規則。</translation> <translation id="4943838377383847465">Chromium 正在背景模式中執行。</translation> <translation id="4987820182225656817">以訪客身分使用 Chromium 不會留下任何記錄。</translation> <translation id="4994636714258228724">新增為 Chromium 使用者</translation> +<translation id="5224391634244552924">未儲存任何密碼。你必須先儲存密碼,才能使用 Chromium 的密碼檢查功能。</translation> <translation id="5277894862589591112">如要套用變更,請重新啟動 Chromium</translation> <translation id="5358375970380395591">你已登入管理化環境下的帳戶,並將管理控制權授予你的 Chromium 設定檔。你的 Chromium 資料 (例如應用程式、書籤、記錄、密碼和其他設定) 均將永久與 <ph name="USER_NAME" /> 建立關聯。你可以透過 Google 帳戶資訊主頁刪除這些資料,但你無法將這些資料與其他帳戶建立關聯。<ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">正在更新 Chromium (<ph name="PROGRESS_PERCENT" />)</translation> @@ -164,6 +167,7 @@ <translation id="7066436765290594559">Chromium 作業系統無法同步處理你的資料,請更新你的同步通關密語。</translation> <translation id="7067091210845072982">如果圖片缺少有用的說明,Chromium 會嘗試為你提供說明。系統會將圖片傳送給 Google,以便產生說明。</translation> <translation id="7196312274710523067">無法啟動 Chromium,請再試一次。</translation> +<translation id="7197677400338048821">Chromium 無法檢查你的密碼,請於 24 小時後再試。</translation> <translation id="7205698830395646142">在 Chromium 選單中隱藏</translation> <translation id="7223968959479464213">工作管理員 - Chromium</translation> <translation id="731644333568559921">更新 Chromium 作業系統(&C)</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index a218b60..0a588686 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Drukbediener</translation> <translation id="1805967612549112634">Bevestig PIN</translation> <translation id="1806335016774576568">Skakel oor na 'n ander oop program</translation> +<translation id="1809483812148634490">Programme wat jy van Google Play afgelaai het, sal van hierdie Chromebook af uitgevee word. + <ph name="LINE_BREAKS1" /> + Inhoud wat jy gekoop het soos flieks, TV-programme, musiek, boeke of ander inprogram-aankope kan dalk ook uitgevee word. + <ph name="LINE_BREAKS2" /> + Dit raak nie programme of inhoud op ander toestelle nie.</translation> <translation id="1809734401532861917">Voeg my boekmerke, geskiedenis, wagwoorde en ander instellings by <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Dienste</translation> <translation id="18139523105317219">EDI-partynaam</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Kry die naam wat agterop jou sekuriteitsleutel gedruk is</translation> <translation id="2828650939514476812">Koppel aan Wi-Fi-netwerk</translation> <translation id="2835294513443818940">Hierdie lêer kan nie veilig afgelaai word nie.</translation> +<translation id="2835547721736623118">Spraakherkenningdiens</translation> <translation id="2836269494620652131">Omval</translation> <translation id="2836635946302913370">Aanmelding met hierdie gebruikersnaam is deur jou administrateur gedeaktiveer.</translation> <translation id="283669119850230892">Om die netwerk <ph name="NETWORK_ID" /> te gebruik, moet jy eers klaar aan die internet koppel hieronder.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Subbladsy-knoppie</translation> <translation id="3020183492814296499">Kortpaaie</translation> <translation id="3020990233660977256">Reeksnommer: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Terwyl dit battery gebruik</translation> <translation id="3021066826692793094">Skoenlapper</translation> <translation id="3021678814754966447">Bekyk raambron</translation> <translation id="3022978424994383087">Kon dit nie hoor nie.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Rugsteun in Google Drive. Laai data maklik terug of wissel enige tyd jou toestel. Hierdie rugsteun sluit programdata in. Rugsteune word na Google toe opgelaai en met jou kind se Google-rekeningwagwoord geënkripteer.</translation> <translation id="4634771451598206121">Meld weer aan …</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> is nie vir gasgebruikers beskikbaar nie.</translation> +<translation id="4635444580397524003">Linux-rugsteun is suksesvol teruggestel.</translation> <translation id="4636930964841734540">Inligting</translation> <translation id="4637083375689622795">Nog handelinge, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Aktiveer ADB-ontfouting.</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Wys gevorderde drukkeropsies</translation> <translation id="4891089016822695758">Beta-forum</translation> <translation id="4892229439761351791">Werf kan Bluetooth gebruik</translation> +<translation id="489258173289528622">Rushandeling terwyl dit battery gebruik</translation> <translation id="4893336867552636863">Dit sal jou blaaidata permanent van hierdie toestel af uitvee.</translation> <translation id="4893522937062257019">Op die sluitskerm</translation> <translation id="489454699928748701">Laat werwe toe om bewegingsensors te gebruik</translation> @@ -3615,6 +3624,7 @@ <translation id="5863445608433396414">Aktiveer ontfoutingkenmerke</translation> <translation id="5864195618110239517">Gebruik betaalde verbinding</translation> <translation id="5864471791310927901">DHCP-opsoek het misluk</translation> +<translation id="5864754048328252126">Rushandeling terwyl dit laai</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> sal binnekort onderbreek word</translation> <translation id="586567932979200359">Jy laat loop <ph name="PRODUCT_NAME" /> tans van sy skyfafbeelding af. As jy dit op jou rekenaar installeer, kan jy dit sonder die skyfafbeelding laat loop, en verseker dat dit op datum gehou word.</translation> <translation id="5865733239029070421">Stuur gebruikstatistieke en omvalverslae outomaties na Google</translation> @@ -3814,6 +3824,7 @@ <translation id="6120205520491252677">Speld hierdie bladsy aan beginskerm vas …</translation> <translation id="6122081475643980456">Jou internetverbinding word beheer</translation> <translation id="6122095009389448667">Hou aan om hierdie werf te blokkeer om die knipbord te sien</translation> +<translation id="6122831415929794347">Skakel Veiligblaai af?</translation> <translation id="6122875415561139701">Skryftaak word nie toegelaat nie op: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">Die volgende uitbreidings is afhanklik van hierdie uitbreiding:</translation> <translation id="6124698108608891449">Hierdie werf benodig nog toestemmings.</translation> @@ -4017,6 +4028,7 @@ <translation id="6408118934673775994">Lees en verander jou data op <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> en <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Prentlêers</translation> <translation id="6410328738210026208">Verander kanaal en Kragwas</translation> +<translation id="6410390304316730527">Veiligblaai beskerm jou teen aanvallers wat jou dalk kan mislei om iets gevaarlik te doen, soos om kwaadwillige sagteware te installeer of jou persoonlike inligting, soos wagwoorde, foonnommers of kredietkaartinligting, bekend te maak. As jy dit afskakel, moet jy versigtig wees wanneer jy op onbekende of nie-fatsoenlike werwe blaai.</translation> <translation id="6410668567036790476">Voeg soekenjin by</translation> <translation id="641081527798843608">Voorwerppassing</translation> <translation id="6412673304250309937">Vergelyk URL'e met 'n lys onveilige werwe wat in Chrome geberg word. As 'n werf probeer om jou wagwoord te steel, of wanneer jy 'n skadelike lêer aflaai, sal Chrome dalk ook URL'e, insluitend stukkies bladsyinhoud, na Veiligblaai toe stuur.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Terugstelling kon weens 'n probleem nie voltooi word nie</translation> <translation id="8951465597020890363">Verlaat besoekermodus in elk geval?</translation> <translation id="8952831374766033534">Opstellingopsie word nie gesteun nie: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Terwyl dit laai</translation> <translation id="895347679606913382">Begin tans …</translation> <translation id="8957762313041272117">Intydse Onderskrif</translation> <translation id="895944840846194039">JavaScript-geheue</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 6982c148..9d959e6a 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -85,7 +85,7 @@ <translation id="1114202307280046356">معيّن</translation> <translation id="1114335938027186412">يحتوي الكمبيوتر على جهاز أمان الوحدة النمطية للنظام الأساسي الموثوق به (TPM)، والذي يستخدم لتنفيذ العديد من ميزات الأمان المهمة في نظام التشغيل Chrome. ويُمكنك الانتقال إلى مركز مساعدة Chromebook للتعرف على مزيد من المعلومات: https://support.google.com/chromebook/?p=tpm</translation> <translation id="1116639326869298217">تعذُّر إثبات هويتك</translation> -<translation id="1116694919640316211">لمحة عامة</translation> +<translation id="1116694919640316211">لمحة</translation> <translation id="1116779635164066733">تم فرض هذا الإعداد بواسطة الإضافة "<ph name="NAME" />".</translation> <translation id="1118738876271697201">تعذَّر على النظام تحديد طراز الجهاز أو رقمه التسلسلي.</translation> <translation id="1119447706177454957">خطأ داخلي</translation> @@ -94,7 +94,7 @@ <translation id="1122960773616686544">اسم الإشارة</translation> <translation id="1124772482545689468">المستخدم</translation> <translation id="1125550662859510761">تبدو كـ <ph name="WIDTH" /> x <ph name="HEIGHT" /> (أصلية)</translation> -<translation id="1126809382673880764">لا يوفّر لك هذا الوضع حماية من الإضافات أو عمليات التنزيل أو المواقع الإلكترونية الضارة. وستظل تستفيد من ميزة "التصفّح الآمن" متى أمكن في خدمات Google الأخرى، مثل Gmail و"بحث Google".</translation> +<translation id="1126809382673880764">لا يوفّر لك هذا الوضع حماية من الإضافات أو عمليات التنزيل أو المواقع الإلكترونية الضارة. وستظل تستفيد من ميزة "التصفّح الآمن" عند توفّرها في خدمات Google الأخرى، مثل Gmail و"بحث Google".</translation> <translation id="1128109161498068552">عدم السماح لأي موقع ويب باستخدام الرسائل الحصرية في النظام للدخول إلى أجهزة MIDI</translation> <translation id="1128128132059598906">EAP-TTLS</translation> <translation id="1128591060186966949">تعديل محرّك البحث</translation> @@ -612,6 +612,11 @@ <translation id="1805888043020974594">خادم الطباعة</translation> <translation id="1805967612549112634">تأكيد رقم التعريف الشخصي</translation> <translation id="1806335016774576568">التبديل إلى تطبيق آخر مفتوح</translation> +<translation id="1809483812148634490">سيتم حذف التطبيقات التي نزّلتها من Google Play من جهاز Chromebook هذا. + <ph name="LINE_BREAKS1" /> + قد يتم أيضًا حذف المحتوى الذي اشتريته، مثل الأفلام أو البرامج التلفزيونية أو الموسيقى أو الكتب أو عمليات الشراء الأخرى داخل التطبيق. + <ph name="LINE_BREAKS2" /> + لن يؤثر هذا الحذف في التطبيقات أو المحتوى على الأجهزة الأخرى.</translation> <translation id="1809734401532861917">إضافة الإشارات المرجعية، والسّجل، وكلمات المرور، والإعدادات الأخرى إلى <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">الخدمات</translation> <translation id="18139523105317219">اسم جهة تبادل البيانات الإلكتروني (EDI)</translation> @@ -772,7 +777,7 @@ <translation id="2025891858974379949">محتوى غير آمن</translation> <translation id="202918510990975568">يُرجى إدخال كلمة المرور لضبط قفل الشاشة وتسجيل الدخول</translation> <translation id="2034346955588403444">إضافة شبكة WiFi أخرى</translation> -<translation id="203574396658008164">تفعيل تدوين الملاحظات من شاشة التأمين</translation> +<translation id="203574396658008164">تفعيل تدوين الملاحظات من شاشة القفل</translation> <translation id="2037445849770872822">تم إعداد الإشراف من أجل حساب Google هذا. ولإعداد المزيد من أدوات الرقابة الأبوية، يُرجى اختيار "مواصلة". وبخلاف ذلك، يمكنك تسجيل الخروج الآن حتى تنعكس التغييرات التي يتم إجراؤها على هذا الحساب على هذا الجهاز. @@ -830,7 +835,7 @@ <translation id="2114326799768592691">تحديث الإطار</translation> <translation id="2114896190328250491">صورة <ph name="NAME" /></translation> <translation id="2119349053129246860">فتح في <ph name="APP" /></translation> -<translation id="2119461801241504254">تم تفعيل "التصفّح الآمن" وحمايتك من عمليات التنزيل والمواقع الإلكترونية الضارة.</translation> +<translation id="2119461801241504254">تم تفعيل "التصفّح الآمن" وهو يحميك من عمليات التنزيل والمواقع الإلكترونية الضارة.</translation> <translation id="2120297377148151361">النشاط والتفاعلات</translation> <translation id="2120639962942052471">تم حظر إذن <ph name="PERMISSION" />.</translation> <translation id="2121055421682309734">{COUNT,plural, =0{تم حظر ملفات تعريف الارتباط.}=1{تم حظر ملفات تعريف الارتباط باستثناء ملف واحد.}two{تم حظر ملفات تعريف الارتباط باستثناء ملفَّين ({COUNT}).}few{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملفات.}many{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملفًا.}other{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملف.}}</translation> @@ -1021,7 +1026,7 @@ <translation id="2351266942280602854">اللغة والإدخال</translation> <translation id="2352495879228166246">{NUM_ITEMS,plural, =1{عنصر واحد}zero{{NUM_ITEMS} عنصر}two{عنصران ({NUM_ITEMS})}few{{NUM_ITEMS} عناصر}many{{NUM_ITEMS} عنصرًا}other{{NUM_ITEMS} عنصر}}</translation> <translation id="2352662711729498748">< 1 ميغابايت</translation> -<translation id="2352810082280059586">يتم حفظ ملاحظات شاشة التأمين تلقائيًا إلى <ph name="LOCK_SCREEN_APP_NAME" />. ستظل أحدث ملاحظة في شاشة التأمين.</translation> +<translation id="2352810082280059586">يتم حفظ ملاحظات شاشة القفل تلقائيًا إلى <ph name="LOCK_SCREEN_APP_NAME" />. ستظل أحدث ملاحظة في شاشة القفل.</translation> <translation id="2353297238722298836">تم السماح باستخدام الكاميرا والميكروفون</translation> <translation id="2356070529366658676">طلب</translation> <translation id="2357330829548294574">إزالة <ph name="USER_NAME" /></translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">العثور على الاسم المطبوع على الجزء الخلفي من مفتاح الأمان</translation> <translation id="2828650939514476812">الاتصال بشبكة Wi-Fi</translation> <translation id="2835294513443818940">لا يمكن تنزيل هذا الملف بشكل آمن.</translation> +<translation id="2835547721736623118">خدمة "التعرُّف على الكلام"</translation> <translation id="2836269494620652131">تعطل</translation> <translation id="2836635946302913370">تم إيقاف تسجيل الدخول باستخدام اسم المستخدم هذا بواسطة المشرف.</translation> <translation id="283669119850230892">لاستخدام الشبكة <ph name="NETWORK_ID" />، أكمل أولاً اتصالك بالإنترنت أدناه.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">زر صفحة فرعية</translation> <translation id="3020183492814296499">الاختصارات</translation> <translation id="3020990233660977256">الرقم التسلسلي: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">أثناء التشغيل على البطارية</translation> <translation id="3021066826692793094">فراشة</translation> <translation id="3021678814754966447">عرض م&صدر الإطار</translation> <translation id="3022978424994383087">لم يتم استيعاب هذا.</translation> @@ -2730,6 +2737,7 @@ <translation id="4633757335284074492">يمكنك الاحتفاظ بنسخة احتياطية في Google Drive. ويمكنك استعادة البيانات أو تبديل الجهاز بسهولة وفي أي وقت. تتضمّن هذه النسخة الاحتياطية بيانات التطبيق. ويتم تحميل النسخ الاحتياطية إلى Google وترميزها باستخدام كلمة مرور حسابك الفرعي على Google.</translation> <translation id="4634771451598206121">تسجيل الدخول مرة أخرى...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> غير متاحة للمستخدمين الضيوف.</translation> +<translation id="4635444580397524003">تمت استعادة نسخة احتياطية من Linux بنجاح.</translation> <translation id="4636930964841734540">معلومات</translation> <translation id="4637083375689622795">مزيد من الإجراءات، <ph name="EMAIL" /></translation> <translation id="4638930039313743000">تفعيل خيار "تصحيح الأخطاء عبر ADB"</translation> @@ -2780,7 +2788,7 @@ <translation id="4701025263201366865">تسجيل دخول أحد الوالدَين</translation> <translation id="4707302005824653064">يمكن للمدير مراجعة الاستخدام والسجل (<ph name="CUSTODIAN_EMAIL" />) على chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPSec + شهادة المستخدم</translation> -<translation id="4708794300267213770">عرض شاشة التأمين عند التنبيه من وضع السكون</translation> +<translation id="4708794300267213770">عرض شاشة القفل عند التنبيه من وضع السكون</translation> <translation id="4708849949179781599">إنهاء <ph name="PRODUCT_NAME" /></translation> <translation id="4711638718396952945">استعادة الإعدادات</translation> <translation id="4716483597559580346">Powerwash لمزيد من الأمان</translation> @@ -2905,8 +2913,9 @@ <translation id="4890773143211625964">عرض خيارات الطابعة المتقدمة</translation> <translation id="4891089016822695758">منتدى الإصدار التجريبي</translation> <translation id="4892229439761351791">يمكن لموقع الويب استخدام البلوتوث.</translation> +<translation id="489258173289528622">إجراء الخمول أثناء التشغيل على البطارية</translation> <translation id="4893336867552636863">سيؤدي هذا إلى حذف بيانات التصفح من هذا الجهاز نهائيًا.</translation> -<translation id="4893522937062257019">على شاشة التأمين</translation> +<translation id="4893522937062257019">على شاشة القفل</translation> <translation id="489454699928748701">السماح لمواقع الويب باستخدام مستشعرات الحركة</translation> <translation id="4898011734382862273">تمثل الشهادة "<ph name="CERTIFICATE_NAME" />" مرجعًا مصدقًا</translation> <translation id="489985760463306091">لإنهاء إزالة البرامج الضارة، أعد تشغيل الكمبيوتر</translation> @@ -3307,7 +3316,7 @@ <translation id="5457459357461771897">التعرّف على الصور، والموسيقى، والوسائط الأخرى من الكمبيوتر وحذفها</translation> <translation id="5457599981699367932">تصفَّح كزائر</translation> <translation id="5457991019809708398">مفعَّل، بلا تجوال</translation> -<translation id="5458998536542739734">ملاحظات شاشة التأمين</translation> +<translation id="5458998536542739734">ملاحظات شاشة القفل</translation> <translation id="546322474339998983">يتم استخدام محرك البحث من قِبَل متصفح Chrome ومشغّل التطبيقات للجهاز <ph name="DEVICE_TYPE" />.</translation> <translation id="5463231940765244860">إدخال</translation> <translation id="5463275305984126951">فهرس المجلد <ph name="LOCATION" /></translation> @@ -3612,6 +3621,7 @@ <translation id="5863445608433396414">تفعيل ميزات تصحيح الأخطاء</translation> <translation id="5864195618110239517">استخدام اتصال يفرض تكلفة استخدام</translation> <translation id="5864471791310927901">تعذّر بحث DHCP</translation> +<translation id="5864754048328252126">إجراء الخمول أثناء الشحن</translation> <translation id="5865508026715185451">سيتم إيقاف تطبيق <ph name="APP_NAME" /> مؤقتًا بعد قليل.</translation> <translation id="586567932979200359">أنت تشغّل <ph name="PRODUCT_NAME" /> من صورته على القرص. ويسمح لك تثبيته على الكمبيوتر بتشغيله بدون الحاجة إلى صورة القرص، كما يضمن ذلك الحفاظ على تحديثه بشكل مستمر.</translation> <translation id="5865733239029070421">يُرسِل إحصاءات الاستخدام وتقارير الأعطال إلى Google تلقائيًا.</translation> @@ -3656,7 +3666,7 @@ <translation id="5924047253200400718">الحصول على مساعدة<ph name="SCANNING_STATUS" /></translation> <translation id="5924527146239595929">يمكنك التقاط صورة جديدة أو اختيار رمز أو صورة حالية. <ph name="LINE_BREAK" /> - ستظهر هذه الصورة على شاشة التأمين وشاشة تسجيل الدخول في جهاز Chromebook.</translation> + ستظهر هذه الصورة على شاشة القفل وشاشة تسجيل الدخول في جهاز Chromebook.</translation> <translation id="5925147183566400388">مؤشر بيان تطبيق الشهادة</translation> <translation id="592880897588170157">تنزيل ملفات PDF بدلاً من فتحها تلقائيًا في Chrome</translation> <translation id="5931146425219109062">قراءة جميع بياناتك وتغييرها على مواقع الويب التي تزورها</translation> @@ -3811,6 +3821,7 @@ <translation id="6120205520491252677">جارٍ إضافة هذه الصفحة إلى شاشة البدء...</translation> <translation id="6122081475643980456">يتم التحكم في اتصال الإنترنت التابع لك</translation> <translation id="6122095009389448667">مواصلة حظر موقع الويب هذا من الاطلاع على الحافظة</translation> +<translation id="6122831415929794347">هل تريد إيقاف "التصفُّح الآمن"؟</translation> <translation id="6122875415561139701">لا يُسمح بعملية الكتابة على: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">تعتمد الإضافات التالية على هذه الإضافة:</translation> <translation id="6124698108608891449">يحتاج هذا الموقع الإلكتروني إلى مزيد من الأذونات.</translation> @@ -3891,7 +3902,7 @@ <translation id="6237816943013845465">تسمح لك بضبط دقة الشاشة</translation> <translation id="6238624845858322552">الاتصال بجهاز البلوتوث</translation> <translation id="6238767809035845642">النص الذي تمت مشاركته من Other Device (جهاز آخر)</translation> -<translation id="6238923052227198598">إبقاء آخر ملاحظة على شاشة التأمين</translation> +<translation id="6238923052227198598">إبقاء آخر ملاحظة على شاشة القفل</translation> <translation id="6239558157302047471">تحديث الإطار</translation> <translation id="6241530762627360640">الوصول إلى معلومات حول أجهزة البلوتوث المقترنة بنظامك واكتشاف أجهزة البلوتوث القريبة.</translation> <translation id="6241844896329831164">لا حاجة للوصول</translation> @@ -4015,6 +4026,7 @@ <translation id="6408118934673775994">قراءة بياناتك وتغييرها في <ph name="WEBSITE_1" />، <ph name="WEBSITE_2" /> و <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">ملفات الصور</translation> <translation id="6410328738210026208">تغيير القناة وPowerwash</translation> +<translation id="6410390304316730527">يحميك "التصفُّح الآمن" من المهاجمين الذين قد يحاولون خداعك لاتّخاذ إجراءات خطيرة، مثل تثبيت البرامج الضارة أو الكشف عن معلومات شخصية، مثل كلمات المرور أو أرقام الهواتف أو بطاقات الائتمان. وفي حال إيقاف "التصفُّح الآمن"، ننصحك بتوخّي الحذر عند تصفُّح مواقع إلكترونية غير مألوفة أو غير معروفة.</translation> <translation id="6410668567036790476">إضافة محرّك بحث</translation> <translation id="641081527798843608">مطابقة الموضوع</translation> <translation id="6412673304250309937">يعمل على التحقّق من عناوين URL التي تحتوي على قائمة بمواقع إلكترونية غير آمنة مُخزّنة في Chrome. وإذا حاول موقع إلكتروني سرقة كلمة المرور أو إذا نزّلت ملفًا ضارًا، قد يرسل متصفّح Chrome أيضًا عناوين URL تتضمّن أجزاء من محتوى الصفحة إلى "التصفّح الآمن".</translation> @@ -4485,7 +4497,7 @@ <translation id="7063957500469387217">إعداد الطابعات أو إدارتها في الطباعة السحابية من Google.</translation> <translation id="7064734931812204395">جارٍ إعداد حاوية نظام التشغيل Linux. قد تستغرق عملية الإعداد ما يصل إلى 30 دقيقة.</translation> <translation id="7065223852455347715">تم قفل هذا الجهاز في وضع يمنع التسجيل في المؤسسة. إذا كنت ترغب في تسجيل الجهاز، ينبغي تنفيذ إجراءات استرداد الجهاز أولاً.</translation> -<translation id="7065534935986314333">لمحة عامة عن النظام</translation> +<translation id="7065534935986314333">لمحة عن النظام</translation> <translation id="706626672220389329">حدث خطأ في تحميل المشاركة. تم تحميل المشاركة المُحدّدة من قبل.</translation> <translation id="7066944511817949584">تعذّر الاتصال بـ "<ph name="DEVICE_NAME" />".</translation> <translation id="7067396782363924830">الألوان المحيطة</translation> @@ -5001,7 +5013,7 @@ <translation id="7770651108375708429">قطع الاتصال بشبكة Wi-Fi</translation> <translation id="7771452384635174008">تخطيط</translation> <translation id="7772032839648071052">تأكيد عبارة المرور</translation> -<translation id="7772127298218883077">لمحة عامة عن <ph name="PRODUCT_NAME" /></translation> +<translation id="7772127298218883077">لمحة عن <ph name="PRODUCT_NAME" /></translation> <translation id="7772773261844472235">التحقق من حالة جهاز Chromebook</translation> <translation id="7773726648746946405">مساحة تخزين الجلسة</translation> <translation id="7774365994322694683">طائر</translation> @@ -5829,7 +5841,7 @@ <translation id="8818152010000655963">الخلفية</translation> <translation id="8818958672113348984">التحقُّق عبر الهاتف</translation> <translation id="8820817407110198400">الإشارات المرجعية</translation> -<translation id="8821045908425223359">تهيئة عنوان IP تلقائيًا</translation> +<translation id="8821045908425223359">ضبط عنوان IP تلقائيًا</translation> <translation id="882204272221080310">يمكنك تحديث البرامج الثابتة لمزيد من الأمان.</translation> <translation id="8823514049557262177">نسخ &نص الرابط</translation> <translation id="8823559166155093873">حظر ملفات تعريف الارتباط</translation> @@ -5935,6 +5947,7 @@ <translation id="8951256747718668828">تعذَّر إكمال الاستعادة بسبب حدوث خطأ</translation> <translation id="8951465597020890363">هل تريد الخروج من وضع الضيف على أي حال؟</translation> <translation id="8952831374766033534">خيار الضبط غير متاح: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">أثناء الشحن</translation> <translation id="895347679606913382">بدء التحميل...</translation> <translation id="8957762313041272117">النسخ النصي التلقائي</translation> <translation id="895944840846194039">ذاكرة JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index b959acf..bcce544 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -94,6 +94,7 @@ <translation id="1122960773616686544">বুকমার্কের নাম</translation> <translation id="1124772482545689468">ব্যবহারকারী</translation> <translation id="1125550662859510761">মনে হচ্ছে <ph name="WIDTH" /> x <ph name="HEIGHT" /> (স্থানীয়)</translation> +<translation id="1126809382673880764">এই মোডে আপনার ডিভাইসের ক্ষতি করতে পারে এমন ওয়েবসাইট, ডাউনলোড অথবা এক্সটেনশন থেকে কোনও সুরক্ষা পাওয়া সম্ভব হয় না। তবে Gmail এবং Search-এর মতো অন্যান্য Google পরিষেবায়, যেখানে উপলভ্য সেখানে আপনি এখনও 'Safe Browsing'-এর সুরক্ষা পাবেন।</translation> <translation id="1128109161498068552">কোনো সাইটকে MIDI ডিভাইসগুলি অ্যাক্সেস করার জন্য সিস্টেমের বিশিষ্ট বার্তাগুলি ব্যবহার করার মঞ্জুরি দেবেন না</translation> <translation id="1128128132059598906">EAP-TTLS</translation> <translation id="1128591060186966949">সার্চ ইঞ্জিন সম্পাদনা করুন</translation> @@ -185,6 +186,7 @@ <translation id="1235458158152011030">পরিচিত নেটওয়ার্কগুলি</translation> <translation id="123578888592755962">ডিস্ক পূর্ণ</translation> <translation id="1238191093934674082">VPN খুলুন</translation> +<translation id="1239439601391236986">ব্যক্তিগত তথ্য ইনপুটের সাজেশন টগল করুন</translation> <translation id="1239594683407221485">Files অ্যাপে ডিভাইসের কন্টেন্ট ঘুরে দেখুন।</translation> <translation id="124116460088058876">আরও ভাষা</translation> <translation id="1241753985463165747">চালু করলে বর্তমান ওয়েবসাইটের সব ডেটা পড়ে ও পরিবর্তন করে</translation> @@ -301,6 +303,7 @@ <translation id="140723521119632973">সেলুলার চালু করা</translation> <translation id="1407489512183974736">মাঝ খান থেকে ক্রপ করা</translation> <translation id="1408504635543854729">ফাইল অ্যাপে ডিভাইসের কন্টেন্ট খুঁজে দেখুন। একজন অ্যাডমিনিস্ট্রেটর কন্টেন্টটি সীমাবদ্ধ করে আছে এবং মডিফাই করা যাবে না।</translation> +<translation id="1408980562518920698">ব্যক্তিগত তথ্য ম্যানেজ করুন</translation> <translation id="1410197035576869800">অ্যাপ আইকন</translation> <translation id="1410616244180625362">আপনার ক্যামেরা অ্যাক্সেস করতে <ph name="HOST" /> এর মঞ্জুরি অবিরত রাখুন</translation> <translation id="1414648216875402825">আপনি <ph name="PRODUCT_NAME" />-এর অস্থায়ী ভার্সনে আপডেট করছেন, এটিতে থাকা বৈশিষ্টগুলি প্রগতিতে রয়েছে৷ ক্র্যাশ এবং অপ্রত্যাশিত ত্রুটিগুলি ঘটবে৷ সাবধানতার সাথে এগিয়ে যান৷</translation> @@ -434,6 +437,7 @@ <ph name="EXTENSION_NAME" /></translation> <translation id="1587275751631642843">&JavaScript কনসোল</translation> <translation id="1587907146729660231">আঙ্গুল দিয়ে পাওয়ার বোতামে টাচ করুন</translation> +<translation id="1588200577109872591">স্মার্ট ইনপুট</translation> <translation id="1588438908519853928">সাধারণ</translation> <translation id="158849752021629804">হোম নেটওয়ার্কের প্রয়োজন</translation> <translation id="1588870296199743671">এর সাথে লিঙ্ক খুলুন...</translation> @@ -669,6 +673,7 @@ <translation id="1879000426787380528">কোন আইডি দিয়ে সাইন-ইন করবেন</translation> <translation id="1880905663253319515">সার্টিফিকেট মুছবেন "<ph name="CERTIFICATE_NAME" />"?</translation> <translation id="1884013283844450420"><ph name="NETWORK_COUNT" />টির মধ্যে <ph name="NETWORK_INDEX" /> নম্বর নেটওয়ার্ক, <ph name="NETWORK_NAME" />, কানেক্ট করুন</translation> +<translation id="1884705339276589024">Linux ডিস্কের সাইজ বদলান</translation> <translation id="1886996562706621347">সাইটগুলিকে প্রোটোকলের জন্য ডিফল্ট পরিচালক হতে জিজ্ঞাসা করার অনুমতি দেয় (প্রস্তাবিত)</translation> <translation id="1887442540531652736">সাইন-ইন করতে সমস্যা হয়েছে</translation> <translation id="1887597546629269384">আবার "হ্যালো Google" বলুন</translation> @@ -738,6 +743,7 @@ <translation id="1979280758666859181"><ph name="PRODUCT_NAME" />-এর পুরনো ভার্সন দিয়ে একটি চ্যানেলে পরিবর্তন করছেন৷ যখন আপনার ডিভাইসে বর্তমানে ইনস্টল করা ভার্সনের সঙ্গে চ্যানেলের ভার্সনটি মিলে যাবে তখনই চ্যানেল পরিবর্তন প্রযুক্ত হবে৷</translation> <translation id="197989455406964291">উল্লিখিত এনক্রিপশনের ধরন KDC-তে কাজ করে না</translation> <translation id="1982354452682152483">এই ছবির কোনও বিবরণ নেই।</translation> +<translation id="1984417487208496350">সুরক্ষিত নয় (সাজেস্ট করা হচ্ছে না)</translation> <translation id="1987317783729300807">অ্যাকাউন্টসমূহ</translation> <translation id="1989112275319619282">ব্রাউজ করুন</translation> <translation id="1990512225220753005">এই পৃষ্ঠাতে শর্টকাট দেখাবেন না</translation> @@ -807,6 +813,7 @@ <translation id="2090165459409185032">আপনার অ্যাকাউন্ট তথ্য পুনরুদ্ধার করতে, google.com/accounts/recovery-তে যান</translation> <translation id="2090876986345970080">সিস্টেম সুরক্ষা সেটিং</translation> <translation id="2091887806945687916">আওয়াজ</translation> +<translation id="2096478741073211388">আপনি কিছু নির্দিষ্ট শব্দ টাইপ করলেই ব্যক্তিগত তথ্যের সাজেশন আপনার নাম, ঠিকানা বা ফোন নম্বর সাজেস্ট করে, যাতে অতি দ্রুত আপনি সেগুলি লিখে ফেলতে পারেন। আপনার অ্যাকাউন্টে আপনি শুধুমাত্র নিজের ব্যক্তিগত, পছন্দসই সাজেশনই দেখতে পাবেন।</translation> <translation id="2096715839409389970">থার্ড-পার্টি কুকিজ মুছুন</translation> <translation id="2097372108957554726">নতুন ডিভাইস রেজিস্টার করতে আপনাকে Chrome-এ সাইন-ইন করতে হবে</translation> <translation id="2099172618127234427">আপনি Chrome OS ডিবাগিং বৈশিষ্ট্যগুলি চালু করছেন যা sshd daemon সেট-আপ করবে এবং USB ড্রাইভগুলি থেকে বুট করা চালু করবে৷</translation> @@ -823,6 +830,7 @@ <translation id="2114326799768592691">রিলোড ও ফ্রেম করুন</translation> <translation id="2114896190328250491"><ph name="NAME" /> এর থেকে পাওয়া ফটো</translation> <translation id="2119349053129246860"><ph name="APP" /> এ খুলুন</translation> +<translation id="2119461801241504254">'Safe Browsing'-এর সুবিধা চালু করা আছে এবং এটি আপনাকে ক্ষতিকর সাইট ও ডাউনলোডের হাত থেকে রক্ষা করে</translation> <translation id="2120297377148151361">অ্যাক্টিভিটি এবং ইন্টার্যাকশন</translation> <translation id="2120639962942052471"><ph name="PERMISSION" /> ব্লক করা হয়েছে</translation> <translation id="2121055421682309734">{COUNT,plural, =0{কুকি ব্লক করা আছে}=1{১টি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}one{{COUNT}টি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}other{{COUNT}টি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}}</translation> @@ -1889,6 +1897,7 @@ <translation id="3515983984924808886">রিসেট করা কনফার্ম করতে আপনার নিরাপত্তা কী আবার টাচ করুন। পিন সহ নিরাপত্তা কীয়ে সেভ করা সব তথ্য মুছে যাবে।</translation> <translation id="3518985090088779359">স্বীকার করুন ও অবিরত রাখুন</translation> <translation id="351952459507671940">নতুন গ্রুপে যোগ করুন</translation> +<translation id="3521606918211282604">ডিস্ক সাইজ পরিবর্তন করুন</translation> <translation id="3523642406908660543">আপনার কম্পিউটার অ্যাক্সেস করার জন্য যখন কোনো সাইট কোনো প্লাগ-ইন ব্যবহার করতে চায় তখন জিজ্ঞাসা করবে (প্রস্তাবিত)</translation> <translation id="3524965460886318643">এক্সপোর্ট অ্যাক্টিভিটি</translation> <translation id="3526034519184079374">সাইটের ডেটা পড়তে বা পরিবর্তন করতে পারে না</translation> @@ -1976,6 +1985,7 @@ <translation id="3629631988386925734">Smart Lock চালু করতে আপনার পাসওয়ার্ড লিখুন। পরের বার, আপনার ফোন <ph name="DEVICE_TYPE" /> আনলক করবে। সেটিংসে গিয়ে Smart Lock বন্ধ করতে পারবেন।</translation> <translation id="3630132874740063857">আপনার ফোন</translation> <translation id="3630995161997703415">যেকোনও সময় ব্যবহার করার জন্য এই সাইটটিকে আপনার শেল্ফে যোগ করুন</translation> +<translation id="3633309367764744750">পৃষ্ঠার তথ্য আগে থেকেই ফেচ করা হয়, এর মধ্যে সেই পৃষ্ঠাগুলিও আছে যেগুলিতে আপনি এখনও যাননি। যদি আপনি কুকিকে অনুমতি দিয়ে রাখেন, তাহলে ফেচ করা তথ্যে কুকি থাকতে পারে।</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />টির মধ্যে <ph name="NETWORK_INDEX" /> নম্বর নেটওয়ার্ক, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, অ্যাডমিনিস্ট্রেটর ম্যানেজ করে, বিবরণ</translation> <translation id="3635241501480133979">এই ডেটা আপনার সংস্থার নিরাপত্তার নীতি লঙ্ঘন করেছে, তাই এটি এখানে টেনে এনে রাখা যাবে না।</translation> <translation id="3635353578505343390">Google-এ মতামত জানান</translation> @@ -3931,6 +3941,7 @@ <translation id="6298962879096096191">Android অ্যাপ ইনস্টল করতে Google Play ব্যবহার করুন</translation> <translation id="630065524203833229">ব&ন্ধ</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> অটোমেটিক কনফিগার করা যাচ্ছে না। প্রিন্টারের উন্নত বিবরণ উল্লেখ করুন। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation> +<translation id="630292539633944562">ব্যক্তিগত তথ্যের সাজেশন</translation> <translation id="6305607932814307878">সার্বিক নীতি:</translation> <translation id="6307990684951724544">সিস্টেম ব্যস্ত আছে</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> এক্সটেনশন দিয়ে সাইন-ইন করুন</translation> @@ -4009,6 +4020,7 @@ <translation id="641081527798843608">বিষয়ের মিল</translation> <translation id="6412673304250309937">Chrome-এ স্টোর করা নিরাপদ নয় এমন সাইটের তালিকা থেকে সাইটগুলির ইউআরএল পরীক্ষা করে দেখে। যদি কোনও সাইট আপনার পাসওয়ার্ড চুরি করার চেষ্টা করে বা আপনি কোনও ক্ষতিকারক ফাইল ডাউনলোড করলে, Safe Browsing-এ Chrome পৃষ্ঠার কিছু কন্টেন্ট সহ ইউআরএলও হয়ত পাঠাতে পারে।</translation> <translation id="6412931879992742813">নতুন ছদ্মবেশী উইন্ডো</translation> +<translation id="6413591858632097328">এটি <ph name="ORIGIN_NAME" />-এর স্টোর করা সব ডেটা ও কুকি এবং এর ইনস্টল করা সমস্ত অ্যাপ মুছে দেবে।</translation> <translation id="641469293210305670">অ্যাপ ও আপডেটগুলি ইনস্টল করুন</translation> <translation id="6414888972213066896">এই পৃষ্ঠাটিতে যাওয়া ঠিক হবে কিনা সেই বিষয়ে আপনি আপনার অভিভাবকের অনুমতি নিন৷</translation> <translation id="6415900369006735853">আপনার ফোনের মাধ্যমে ইন্টারনেটে কানেক্ট করুন</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 7c10384..08539e6 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Server za štampanje</translation> <translation id="1805967612549112634">Potvrda PIN-a</translation> <translation id="1806335016774576568">Prebaci na drugu otvorenu aplikaciju</translation> +<translation id="1809483812148634490">Aplikacije koje ste preuzeli s Google Playa će se izbrisati s ovog Chromebooka. + <ph name="LINE_BREAKS1" /> + Moguće je da će sadržaj koji ste kupili, kao što su filmovi, TV emisije, muzika, knjige ili druge kupovine unutar aplikacija, također biti izbrisan. + <ph name="LINE_BREAKS2" /> + To neće uticati na aplikacije ili sadržaj na drugim uređajima.</translation> <translation id="1809734401532861917">Dodaj moje oznake, historiju, lozinke i druge postavke na <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Usluge</translation> <translation id="18139523105317219">Naziv strane u EDI komunikaciji</translation> @@ -813,7 +818,7 @@ <translation id="2090165459409185032">Za oporavak podataka o računu otvorite: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Postavke sigurnosnog sistema</translation> <translation id="2091887806945687916">Zvuk</translation> -<translation id="2096478741073211388">Pomoću prijedloga ličnih informacija brže pišete uz predlaganje vašeg imena, adrese ili broja telefona kada pišete neke određene riječi. Samo vi možete vidjeti privatne, personalizirane prijedloge za svoj račun.</translation> +<translation id="2096478741073211388">Prijedlozi ličnih informacija vam pomažu da brže pišete predlaganjem vašeg imena, adrese ili broja telefona kada pišete neke određene riječi. Samo vi možete vidjeti privatne, personalizirane prijedloge za svoj račun.</translation> <translation id="2096715839409389970">Izbriši kolačiće trećih strana</translation> <translation id="2097372108957554726">Morate se prijaviti na Chrome da registrirate nove uređaje</translation> <translation id="2099172618127234427">Omogućujete funkcije za otklanjanje grešaka na Chrome OS-u kojim će se postaviti sshd daemon i omogućiti pokretanje sistema s USB uređaja.</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Potražite ime odštampano na poleđini sigurnosnog ključa.</translation> <translation id="2828650939514476812">Povežite se na WiFi mrežu</translation> <translation id="2835294513443818940">Nije moguće sigurno preuzeti fajl.</translation> +<translation id="2835547721736623118">Usluga prepoznavanja govora</translation> <translation id="2836269494620652131">Pad aplikacije</translation> <translation id="2836635946302913370">Administrator je onemogućio prijavu s ovim korisničkim imenom.</translation> <translation id="283669119850230892">Da koristite mrežu <ph name="NETWORK_ID" />, najprije se povežite na internet prema uputama u nastavku.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Dugme za podstranicu</translation> <translation id="3020183492814296499">Prečice</translation> <translation id="3020990233660977256">Serijski broj: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Tokom rada na bateriji</translation> <translation id="3021066826692793094">Leptir</translation> <translation id="3021678814754966447">&Prikaži izvor okvira</translation> <translation id="3022978424994383087">Nisam shvatio.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Izradite sigurnosne kopije na Google disku. Jednostavno u svakom trenutku vratite podatke ili promijenite uređaj. Ova sigurnosna kopija obuhvata podatke aplikacija. Sigurnosne kopije se otpremaju na Google i šifriraju pomoću lozinke Google računa vašeg djeteta.</translation> <translation id="4634771451598206121">Prijavite se ponovo...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> nije dostupan gostima.</translation> +<translation id="4635444580397524003">Sigurnosna kopija Linuxa je uspješno vraćena.</translation> <translation id="4636930964841734540">Informacije</translation> <translation id="4637083375689622795">Više radnji, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Omogući otklanjanje grešaka putem ADB-a</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Prikaži napredne opcije pisača</translation> <translation id="4891089016822695758">Forum za beta verziju</translation> <translation id="4892229439761351791">Web lokacija može koristiti Bluetooth</translation> +<translation id="489258173289528622">Radnja u slučaju neaktivnosti tokom rada na bateriji</translation> <translation id="4893336867552636863">Ovo će trajno izbrisati vaše podatke o pregledanju s ovog uređaja.</translation> <translation id="4893522937062257019">Na zaključanom zaslonu</translation> <translation id="489454699928748701">Dozvoli web lokacijama korištenje senzora pokreta</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Omogući funkcije za otklanjanje grešaka</translation> <translation id="5864195618110239517">Koristi vezu s naplatom</translation> <translation id="5864471791310927901">Traženje DHCP-a nije uspjelo</translation> +<translation id="5864754048328252126">Radnja u slučaju neaktivnosti tokom punjenja</translation> <translation id="5865508026715185451">Aplikacija <ph name="APP_NAME" /> će se uskoro pauzirati</translation> <translation id="586567932979200359">Pokrećete <ph name="PRODUCT_NAME" /> sa slike diska. Ako ga instalirate na računaru, moći ćete ga pokrenuti bez slike diska i uvijek će biti ažuriran.</translation> <translation id="5865733239029070421">Automatski šalje Googleu statistiku korištenja i izvještaje o padovima aplikacije</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Zakači ovu stranicu za Početni ekran…</translation> <translation id="6122081475643980456">Vašom internetskom vezom se upravlja</translation> <translation id="6122095009389448667">Nastavi blokirati uvid u međumemoriju ovoj web lokaciji</translation> +<translation id="6122831415929794347">Isključiti Sigurno pregledanje?</translation> <translation id="6122875415561139701">Pisanje nije dozvoljeno na uređaju: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">Sljedeće ekstenzije ovise o ovoj ekstenziji:</translation> <translation id="6124698108608891449">Ovoj web lokaciji je potrebno više odobrenja.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Pregled i izmjena podataka na web lokacijama <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> i <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Fajlovi slike</translation> <translation id="6410328738210026208">Promijeni kanal i pokreni Powerwash</translation> +<translation id="6410390304316730527">Sigurno pregledanje vas štiti od napadača koji vas mogu prevarom navesti da uradite nešto opasno, naprimjer, da instalirate zlonamjerni softver ili otkrijete lične informacije kao što su lozinke i brojevi telefona ili kreditnih kartica. Ako ga isključite, budite oprezni prilikom pregledanja nepoznatih ili sumnjivih web lokacija.</translation> <translation id="6410668567036790476">Dodajte pretraživač</translation> <translation id="641081527798843608">Podudaranje predmeta</translation> <translation id="6412673304250309937">Provjerava URL-ove s listom nesigurnih web lokacija pohranjenih u Chromeu. Ako web lokacija pokuša ukrasti vašu lozinku, ili kada preuzimate štetan fajl, Chrome može slati i URL-ove, uključujući dijelove sadržaja stranice, u Sigurno pregledanje.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Vraćanje nije uspjelo zbog greške</translation> <translation id="8951465597020890363">Ipak napustiti način rada za gosta?</translation> <translation id="8952831374766033534">Opcija za konfiguraciju nije podržana: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Tokom punjenja</translation> <translation id="895347679606913382">Pokretanje…</translation> <translation id="8957762313041272117">Automatski titlovi</translation> <translation id="895944840846194039">JavaScript memorija</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 5807b48..e56bea9 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Servidor d'impressió</translation> <translation id="1805967612549112634">Confirma el PIN</translation> <translation id="1806335016774576568">Canvia a una altra aplicació oberta</translation> +<translation id="1809483812148634490">Les aplicacions que hagis baixat de Google Play se suprimiran d'aquest Chromebook. + <ph name="LINE_BREAKS1" /> + També pot ser que se suprimeixi el contingut que hagis comprat, com ara pel·lícules, sèries de televisió, música, llibres o altres compres fetes des de les aplicacions. + <ph name="LINE_BREAKS2" /> + Això no afecta les aplicacions ni el contingut d'altres dispositius.</translation> <translation id="1809734401532861917">Afegeix les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració a <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Serveis</translation> <translation id="18139523105317219">Nom de la part EDI</translation> @@ -1392,6 +1397,7 @@ <translation id="2825848369316359348">Cerca el nom imprès a la part posterior de la clau de seguretat</translation> <translation id="2828650939514476812">Connectar a una xarxa Wi-Fi</translation> <translation id="2835294513443818940">Aquest fitxer no es pot baixar de manera segura.</translation> +<translation id="2835547721736623118">Servei de reconeixement de parla</translation> <translation id="2836269494620652131">Bloqueig</translation> <translation id="2836635946302913370">L'administrador ha desactivat l'inici de sessió amb aquest nom d'usuari.</translation> <translation id="283669119850230892">Per fer servir la xarxa <ph name="NETWORK_ID" />, primer cal establir la connexió a Internet a continuació.</translation> @@ -1536,6 +1542,7 @@ <translation id="3019285239893817657">Botó de subpàgina</translation> <translation id="3020183492814296499">Dreceres</translation> <translation id="3020990233660977256">Número de sèrie: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Mentre s'utilitza la bateria</translation> <translation id="3021066826692793094">Papallona</translation> <translation id="3021678814754966447">&Visualitza l'origen del marc</translation> <translation id="3022978424994383087">No t'he entès.</translation> @@ -2067,7 +2074,7 @@ <translation id="3726137731714254362">Si se suprimeixen carpetes des d'aquí, es deixen de compartir, però no se'n suprimeixen els fitxers.</translation> <translation id="3727148787322499904">Els canvis en aquesta opció de configuració afectaran totes les xarxes compartides</translation> <translation id="3727187387656390258">Inspecciona l'element emergent</translation> -<translation id="372722114124766626">Només un cop</translation> +<translation id="372722114124766626">Només una vegada</translation> <translation id="3729303374699765035">Pregunta'm quan un lloc web vulgui descobrir dispositius Bluetooth propers</translation> <translation id="3729506734996624908">Llocs web permesos</translation> <translation id="3731997362820527097">Selecciona la teva clau de seguretat</translation> @@ -2730,6 +2737,7 @@ <translation id="4633757335284074492">Crea còpies de seguretat a Google Drive. Canvia de dispositiu o restaura'n les dades fàcilment en qualsevol moment. Aquesta còpia de seguretat inclou dades d'aplicacions. Les còpies de seguretat es pengen a Google i s'encripten amb la contrasenya del Compte de Google del teu fill.</translation> <translation id="4634771451598206121">Torna a iniciar la sessió...</translation> <translation id="4635398712689569051">La pàgina <ph name="PAGE_NAME" /> no està disponible per als usuaris convidats.</translation> +<translation id="4635444580397524003">La còpia de seguretat de Linux s'ha restaurat correctament.</translation> <translation id="4636930964841734540">Informació</translation> <translation id="4637083375689622795">Més accions, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Activa la depuració d'ADB</translation> @@ -2905,6 +2913,7 @@ <translation id="4890773143211625964">Mostra les opcions avançades de la impressora</translation> <translation id="4891089016822695758">Fòrum per a la versió beta</translation> <translation id="4892229439761351791">El lloc web pot fer servir Bluetooth</translation> +<translation id="489258173289528622">Acció d'inactivitat mentre s'utilitza la bateria</translation> <translation id="4893336867552636863">Amb aquesta acció, se suprimiran les vostres dades de navegació d'aquest dispositiu permanentment.</translation> <translation id="4893522937062257019">A la pantalla de bloqueig</translation> <translation id="489454699928748701">Permet que els llocs web utilitzin els sensors de moviment</translation> @@ -3613,6 +3622,7 @@ <translation id="5863445608433396414">Activa les funcions de depuració</translation> <translation id="5864195618110239517">Fes servir la connexió d'ús mesurat</translation> <translation id="5864471791310927901">Error en la cerca de DHCP</translation> +<translation id="5864754048328252126">Acció d'inactivitat mentre es carrega</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> aviat es posarà en pausa</translation> <translation id="586567932979200359">Esteu executant <ph name="PRODUCT_NAME" /> des de la imatge de disc. Si instal·leu l'aplicació a l'equip, podreu executar-la sense la imatge de disc i es mantindrà actualitzada.</translation> <translation id="5865733239029070421">Envia automàticament a Google estadístiques d'ús i informes d'error</translation> @@ -3812,6 +3822,7 @@ <translation id="6120205520491252677">Fixa aquesta pàgina a la pantalla d'inici...</translation> <translation id="6122081475643980456">La vostra connexió a Internet s'està controlant</translation> <translation id="6122095009389448667">Continua impedint que aquest lloc web vegi el porta-retalls</translation> +<translation id="6122831415929794347">Vols desactivar Navegació segura?</translation> <translation id="6122875415561139701">L'operació d'escriptura no es permet a <ph name="DEVICE_NAME" />.</translation> <translation id="6124650939968185064">D'aquesta extensió en depenen les extensions següents:</translation> <translation id="6124698108608891449">Aquest lloc web necessita més permisos.</translation> @@ -4015,6 +4026,7 @@ <translation id="6408118934673775994">Llegir i modificar les dades dels llocs web <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> i <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Fitxers d'imatge </translation> <translation id="6410328738210026208">Canvia el canal i fes Powerwash</translation> +<translation id="6410390304316730527">Navegació segura et protegeix contra els atacants que et poden enganyar perquè facis alguna acció perillosa, com ara instal·lar programari maliciós o revelar informació personal (per exemple, contrasenyes, números de telèfon o targetes de crèdit). Si la desactives, ves amb compte quan naveguis per llocs web desconeguts o amb mala reputació.</translation> <translation id="6410668567036790476">Afegeix un motor de cerca</translation> <translation id="641081527798843608">Coincidència d'assumpte</translation> <translation id="6412673304250309937">Compara els URL amb una llista de llocs web no segurs emmagatzemada a Chrome. Si un lloc web prova de robar-te la contrasenya o si baixes un fitxer maliciós, és possible que Chrome també n'enviï els URL, inclosos fragments de contingut de les pàgines, a Navegació segura.</translation> @@ -5935,6 +5947,7 @@ <translation id="8951256747718668828">La restauració no s'ha pogut completar a causa d'un error</translation> <translation id="8951465597020890363">Vols sortir del mode de convidat de totes maneres?</translation> <translation id="8952831374766033534">Opció de configuració no admesa: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Mentre es carrega</translation> <translation id="895347679606913382">S'està iniciant...</translation> <translation id="8957762313041272117">Subtítols instantanis</translation> <translation id="895944840846194039">Memòria de JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 15876df..6a4b507 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Tiskový server</translation> <translation id="1805967612549112634">Potvrdit kód PIN</translation> <translation id="1806335016774576568">Přepnout na jinou otevřenou aplikaci</translation> +<translation id="1809483812148634490">Z tohoto Chromebooku budou smazány aplikace, které jste stáhli z Google Play. + <ph name="LINE_BREAKS1" /> +Může být smazán i váš zakoupený obsah, jako jsou například filmy, televizní pořady, hudba, knihy a další nákupy v aplikacích. + <ph name="LINE_BREAKS2" /> +Na aplikace a obsah v jiných zařízeních tato akce nemá vliv.</translation> <translation id="1809734401532861917">Přidejte mé záložky, historii, hesla a další nastavení do účtu <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Služby</translation> <translation id="18139523105317219">Název strany EDI</translation> @@ -1392,6 +1397,7 @@ <translation id="2825848369316359348">Vyhledejte název uvedený na zadní části bezpečnostního klíče</translation> <translation id="2828650939514476812">Připojit k síti Wi-Fi</translation> <translation id="2835294513443818940">Tento soubor nelze bezpečně stáhnout.</translation> +<translation id="2835547721736623118">Služba rozpoznávání řeči</translation> <translation id="2836269494620652131">Selhání</translation> <translation id="2836635946302913370">Přihlášení pomocí tohoto uživatelského jména bylo správcem zakázáno.</translation> <translation id="283669119850230892">Chcete-li používat sít <ph name="NETWORK_ID" />, dokončete nejdříve připojení k internetu níže.</translation> @@ -1536,6 +1542,7 @@ <translation id="3019285239893817657">Tlačítko podstránky</translation> <translation id="3020183492814296499">Zkratky</translation> <translation id="3020990233660977256">Sériové číslo: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Při provozu na baterii</translation> <translation id="3021066826692793094">Motýl</translation> <translation id="3021678814754966447">Zobrazit zdrojo&vý kód rámce</translation> <translation id="3022978424994383087">Nerozumím.</translation> @@ -2731,6 +2738,7 @@ <translation id="4633757335284074492">Zálohování na Disk Google. Snadno obnovte data nebo kdykoliv přejděte na jiné zařízení. Tato záloha obsahuje data aplikací. Zálohy se nahrávají do Googlu a šifrují pomocí hesla účtu Google dítěte.</translation> <translation id="4634771451598206121">Znovu přihlásit...</translation> <translation id="4635398712689569051">Stránka <ph name="PAGE_NAME" /> hostům není k dispozici.</translation> +<translation id="4635444580397524003">Záloha Linuxu byla úspěšně obnovena.</translation> <translation id="4636930964841734540">Informace</translation> <translation id="4637083375689622795">Další akce, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Zapnout ladění ADB</translation> @@ -2906,6 +2914,7 @@ <translation id="4890773143211625964">Zobrazit rozšířené možnosti tiskárny</translation> <translation id="4891089016822695758">Fórum beta</translation> <translation id="4892229439761351791">Web může používat Bluetooth</translation> +<translation id="489258173289528622">Akce nečinnosti při provozu na baterii</translation> <translation id="4893336867552636863">Tímto z tohoto zařízení trvale smažete své údaje o prohlížení.</translation> <translation id="4893522937062257019">Na obrazovce uzamčení</translation> <translation id="489454699928748701">Povolit webům používání senzorů pohybu</translation> @@ -3612,6 +3621,7 @@ <translation id="5863445608433396414">Aktivovat funkce ladění</translation> <translation id="5864195618110239517">Použít měřené připojení</translation> <translation id="5864471791310927901">Vyhledávání serveru DHCP selhalo.</translation> +<translation id="5864754048328252126">Akce nečinnosti při nabíjení</translation> <translation id="5865508026715185451">Aplikace <ph name="APP_NAME" /> se brzy pozastaví</translation> <translation id="586567932979200359">Aplikaci <ph name="PRODUCT_NAME" /> spouštíte z bitové kopie disku. Pokud ji nainstalujte do svého počítače, můžete ji spouštět bez bitové kopie disku a umožníte její aktualizace.</translation> <translation id="5865733239029070421">Automaticky odesílá statistiky o využívání a zprávy o selhání do Googlu</translation> @@ -3811,6 +3821,7 @@ <translation id="6120205520491252677">Připnout tuto stránku na úvodní obrazovku...</translation> <translation id="6122081475643980456">Vaše připojení k internetu je ovládáno</translation> <translation id="6122095009389448667">Tomuto webu přístup ke schránce i nadále blokovat</translation> +<translation id="6122831415929794347">Vypnout Bezpečné prohlížení?</translation> <translation id="6122875415561139701">Operace zápisu v zařízení <ph name="DEVICE_NAME" /> není povolena.</translation> <translation id="6124650939968185064">Na tomto rozšíření závisejí následující rozšíření:</translation> <translation id="6124698108608891449">Web potřebuje další oprávnění.</translation> @@ -4014,6 +4025,7 @@ <translation id="6408118934673775994">Čtení a úprava dat na webu <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> a <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Obrázkové soubory</translation> <translation id="6410328738210026208">Změnit kanál a použít funkci Powerwash</translation> +<translation id="6410390304316730527">Bezpečné prohlížení vás chrání před útočníky, kteří se vás snaží přimět k nebezpečné akci, jako je instalace škodlivého softwaru nebo vyzrazení osobních údajů (například hesel, telefonních čísel nebo platebních karet). Pokud ji vypnete, budete si muset dávat pozor na neznámé a podezřelé weby.</translation> <translation id="6410668567036790476">Přidat vyhledávač</translation> <translation id="641081527798843608">Shoda předmětu</translation> <translation id="6412673304250309937">Kontroluje adresy URL oproti seznamu nebezpečných webů uloženému v Chromu. Pokud se web pokusí odcizit vám heslo nebo když stáhnete škodlivý soubor, může Chrome Bezpečnému prohlížení odeslat také adresy URL, včetně částí obsahu stránky.</translation> @@ -5933,6 +5945,7 @@ <translation id="8951256747718668828">Obnovení se kvůli chybě nepodařilo dokončit</translation> <translation id="8951465597020890363">Přesto režim hosta ukončit?</translation> <translation id="8952831374766033534">Konfigurační možnost není podporována: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Při nabíjení</translation> <translation id="895347679606913382">Spouštění...</translation> <translation id="8957762313041272117">Živý přepis</translation> <translation id="895944840846194039">Paměť JavaScriptu</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index b3519d7..d8545ca2 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Printerserver</translation> <translation id="1805967612549112634">Bekræft pinkode</translation> <translation id="1806335016774576568">Skift til en anden åben app</translation> +<translation id="1809483812148634490">Apps, du har downloadet i Google Play, slettes fra denne Chromebook. + <ph name="LINE_BREAKS1" /> + Indhold, du har købt, f.eks. film, tv-serier, musik, bøger eller andre køb i apps, slettes muligvis også. + <ph name="LINE_BREAKS2" /> + Dette påvirker ikke apps eller indhold på andre enheder.</translation> <translation id="1809734401532861917">Føj mine bogmærker, min historik, mine adgangskoder og andre indstillinger til <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Tjenester</translation> <translation id="18139523105317219">EDI-partsnavn</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Find navnet, der står på bagsiden af din sikkerhedsnøgle</translation> <translation id="2828650939514476812">Opret forbindelse til Wi-Fi-netværk</translation> <translation id="2835294513443818940">Denne fil kan ikke downloades sikkert.</translation> +<translation id="2835547721736623118">Tjeneste til talegenkendelse</translation> <translation id="2836269494620652131">Nedbrud</translation> <translation id="2836635946302913370">Login med dette brugernavn er blevet deaktiveret af din administrator.</translation> <translation id="283669119850230892">Hvis du vil bruge netværket <ph name="NETWORK_ID" />, skal du først oprette forbindelse til internettet nedenfor.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Knap til underside</translation> <translation id="3020183492814296499">Genveje</translation> <translation id="3020990233660977256">Serienummer: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Når batteriet bruges</translation> <translation id="3021066826692793094">Sommerfugl</translation> <translation id="3021678814754966447">&Vis rammens kilde</translation> <translation id="3022978424994383087">Det er ikke forstået.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Sikkerhedskopiér i Google Drev. Gendan nemt data, eller skift enhed når som helst. Denne backup omfatter appdata. Backups uploades til Google og krypteres ved hjælp af adgangskoden til dit barns Google-konto.</translation> <translation id="4634771451598206121">Log ind igen...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> er ikke tilgængelig for gæstebrugere</translation> +<translation id="4635444580397524003">Linux-sikkerhedskopien er nu gendannet.</translation> <translation id="4636930964841734540">Oplysninger</translation> <translation id="4637083375689622795">Flere handlinger, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Aktivér ADB-fejlretning</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Vis avancerede printerindstillinger</translation> <translation id="4891089016822695758">Betaforum</translation> <translation id="4892229439761351791">Websitet kan anvende Bluetooth</translation> +<translation id="489258173289528622">Handling for inaktivitet, når batteriet bruges</translation> <translation id="4893336867552636863">Denne handling sletter dine browserdata permanent fra denne enhed.</translation> <translation id="4893522937062257019">På låseskærmen</translation> <translation id="489454699928748701">Tillad brug af bevægelsessensorer på websites</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Aktivér fejlretningsfunktioner</translation> <translation id="5864195618110239517">Brug forbrugsafregnet forbindelse</translation> <translation id="5864471791310927901">DHCP-opslag mislykkedes</translation> +<translation id="5864754048328252126">Handling for inaktivitet under opladning</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> sættes snart på pause</translation> <translation id="586567932979200359">Du kører <ph name="PRODUCT_NAME" /> fra dets diskbillede. Hvis du installerer det på din computer, kan du køre det uden diskbilledet, og det vil blive opdateret løbende.</translation> <translation id="5865733239029070421">Sender automatisk brugsstatistikker og nedbrudsrapporter til Google</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Fastgør denne side til startskærmen...</translation> <translation id="6122081475643980456">Din internetforbindelse bliver overvåget</translation> <translation id="6122095009389448667">Fortsæt med at blokere dette website fra at se udklipsholderen</translation> +<translation id="6122831415929794347">Vil du deaktivere Beskyttet browsing?</translation> <translation id="6122875415561139701">Skrivehandlingen er ikke tilladt på: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">Følgende udvidelser er afhængige af denne udvidelse:</translation> <translation id="6124698108608891449">Dette website kræver flere tilladelser.</translation> @@ -4017,6 +4028,7 @@ <translation id="6408118934673775994">Læse og redigere dine data på <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> og <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Billedfiler</translation> <translation id="6410328738210026208">Skift kanal og powerwash</translation> +<translation id="6410390304316730527">Beskyttet browsing beskytter dig mod hackere, som kan narre dig til at gøre uhensigtsmæssige ting, f.eks. at installere skadelig software eller afsløre personlige oplysninger som adgangskoder, telefonnumre eller betalingskortnumre. Hvis du deaktivere funktionen, skal du være ekstra forsigtig, når du besøger websites, du ikke kender eller har tillid til.</translation> <translation id="6410668567036790476">Tilføj søgemaskine</translation> <translation id="641081527798843608">Emnematch</translation> <translation id="6412673304250309937">Tjekker webadresser ift. en liste over usikre websites, der er gemt i Chrome. Hvis et website forsøger at stjæle din adgangskode, eller når du downloader en skadelig fil, sender Chrome muligvis også webadresser, bl.a. mindre mængder sideindhold, til Beskyttet browsing.</translation> @@ -5937,6 +5949,7 @@ <translation id="8951256747718668828">Gendannelsen kunne ikke fuldføres på grund af en fejl</translation> <translation id="8951465597020890363">Vil du afslutte delefunktionen?</translation> <translation id="8952831374766033534">Konfigurationsmuligheden understøttes ikke: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Under opladning</translation> <translation id="895347679606913382">Begynder...</translation> <translation id="8957762313041272117">Livetekstning</translation> <translation id="895944840846194039">JavaScript-hukommelse</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 45139c6..8be4b84b 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -609,6 +609,11 @@ <translation id="1805888043020974594">Druckerserver</translation> <translation id="1805967612549112634">PIN bestätigen</translation> <translation id="1806335016774576568">Zu einer anderen geöffneten App wechseln</translation> +<translation id="1809483812148634490">Die bei Google Play heruntergeladenen Apps werden von diesem Chromebook gelöscht. + <ph name="LINE_BREAKS1" /> + Von Ihnen gekaufte Inhalte, wie Filme, TV-Sendungen, Musik, Bücher oder andere In-App-Käufe, werden eventuell ebenfalls gelöscht. + <ph name="LINE_BREAKS2" /> + Apps oder Inhalte auf anderen Geräten sind davon nicht betroffen.</translation> <translation id="1809734401532861917">Meine Lesezeichen, den Verlauf, Passwörter und andere Einstellungen zu <ph name="USER_EMAIL_ADDRESS" /> hinzufügen</translation> <translation id="1813278315230285598">Dienste</translation> <translation id="18139523105317219">Name der EDI-Partei</translation> @@ -1389,6 +1394,7 @@ <translation id="2825848369316359348">Den Namen finden Sie auf der Rückseite Ihres Sicherheitsschlüssels</translation> <translation id="2828650939514476812">Mit WLAN verbinden</translation> <translation id="2835294513443818940">Diese Datei kann nicht sicher heruntergeladen werden.</translation> +<translation id="2835547721736623118">Spracherkennungsservice</translation> <translation id="2836269494620652131">Absturz</translation> <translation id="2836635946302913370">Die Anmeldung mit diesem Nutzernamen wurde von Ihrem Administrator deaktiviert.</translation> <translation id="283669119850230892">Zur Verwendung des Netzwerks "<ph name="NETWORK_ID" />" müssen Sie zuerst unten Ihre Internetverbindung herstellen.</translation> @@ -1533,6 +1539,7 @@ <translation id="3019285239893817657">Taste zur Unterseite</translation> <translation id="3020183492814296499">Verknüpfungen</translation> <translation id="3020990233660977256">Seriennummer: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Im Akkubetrieb</translation> <translation id="3021066826692793094">Schmetterling</translation> <translation id="3021678814754966447">Frame-Quelltext &anzeigen</translation> <translation id="3022978424994383087">Nicht verstanden.</translation> @@ -2729,6 +2736,7 @@ <translation id="4633757335284074492">In Google Drive sichern. Sie können Daten jederzeit wiederherstellen – auch auf einem anderen Gerät. In dieser Sicherung sind auch App-Daten enthalten. Sicherungen werden an Google gesendet und mit dem Passwort des Google-Kontos Ihres Kindes verschlüsselt.</translation> <translation id="4634771451598206121">Erneut anmelden...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> ist für Gastnutzer nicht verfügbar.</translation> +<translation id="4635444580397524003">Die Linux-Sicherung wurde erfolgreich wiederhergestellt.</translation> <translation id="4636930964841734540">Info</translation> <translation id="4637083375689622795">Weitere Aktionen, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">ADB-Fehlerbehebung aktivieren</translation> @@ -2904,6 +2912,7 @@ <translation id="4890773143211625964">Erweiterte Druckereinstellungen anzeigen</translation> <translation id="4891089016822695758">Beta-Forum</translation> <translation id="4892229439761351791">Website kann Bluetooth verwenden</translation> +<translation id="489258173289528622">Aktion bei Inaktivität im Akkubetrieb</translation> <translation id="4893336867552636863">Dadurch werden die Browserdaten dauerhaft von diesem Gerät gelöscht.</translation> <translation id="4893522937062257019">Auf dem Sperrbildschirm</translation> <translation id="489454699928748701">Websites erlauben, Bewegungssensoren zu verwenden</translation> @@ -3610,6 +3619,7 @@ <translation id="5863445608433396414">Debugging-Funktionen aktivieren</translation> <translation id="5864195618110239517">Kostenpflichtige Verbindung nutzen</translation> <translation id="5864471791310927901">DHCP-Suche fehlgeschlagen</translation> +<translation id="5864754048328252126">Aktion bei Inaktivität beim Aufladen</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> wird bald pausiert</translation> <translation id="586567932979200359">Sie führen <ph name="PRODUCT_NAME" /> vom Datenträgerabbild aus. Wenn Sie den Browser auf Ihrem Computer installieren, wird er ohne Datenträgerabbild ausgeführt und immer automatisch aktualisiert.</translation> <translation id="5865733239029070421">Nutzungsstatistiken und Absturzberichte automatisch an Google senden</translation> @@ -3809,6 +3819,7 @@ <translation id="6120205520491252677">Diese Seite an Startbildschirm anpinnen...</translation> <translation id="6122081475643980456">Internetverbindung wird kontrolliert</translation> <translation id="6122095009389448667">Weiterhin verhindern, dass diese Website die Zwischenablage aufrufen kann</translation> +<translation id="6122831415929794347">Safe Browsing deaktivieren?</translation> <translation id="6122875415561139701">Der Schreibvorgang ist auf folgendem Gerät nicht erlaubt: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">Die folgenden Erweiterungen hängen von dieser Erweiterung ab:</translation> <translation id="6124698108608891449">Diese Website benötigt weitere Berechtigungen.</translation> @@ -4012,6 +4023,7 @@ <translation id="6408118934673775994">Eigene Daten auf <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> und <ph name="WEBSITE_3" /> lesen und ändern</translation> <translation id="6410257289063177456">Bilddateien</translation> <translation id="6410328738210026208">Kanaländerung und Powerwash</translation> +<translation id="6410390304316730527">Safe Browsing schützt Sie gegen Angreifer, die Sie dazu verleiten möchten, Risiken einzugehen, wie z. B. schädliche Software zu installieren oder personenbezogene Daten wie Passwörter, Telefonnummern oder Kreditkartendaten preiszugeben. Wenn Sie Safe Browsing deaktivieren, seien Sie besonders vorsichtig, wenn Sie auf unbekannten oder zweifelhaften Websites surfen.</translation> <translation id="6410668567036790476">Suchmaschine hinzufügen</translation> <translation id="641081527798843608">subject-match</translation> <translation id="6412673304250309937">Prüft URLs anhand einer Liste unsicherer Websites, die in Chrome gespeichert wird. Wenn eine Website versucht, Ihr Passwort zu stehlen, oder wenn Sie eine schädliche Datei herunterladen, kann Chrome auch URLs, einschließlich Teile von Seiteninhalten, an Safe Browsing senden.</translation> @@ -5931,6 +5943,7 @@ <translation id="8951256747718668828">Die Wiederherstellung konnte aufgrund eines Fehlers nicht abgeschlossen werden</translation> <translation id="8951465597020890363">Gastmodus trotzdem beenden?</translation> <translation id="8952831374766033534">Konfigurationsoption wird nicht unterstützt: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Beim Aufladen</translation> <translation id="895347679606913382">Wird gestartet...</translation> <translation id="8957762313041272117">Automatische Untertitel</translation> <translation id="895944840846194039">JavaScript-Speicher</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 967130a..4f5e96c 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Print server</translation> <translation id="1805967612549112634">Confirm PIN</translation> <translation id="1806335016774576568">Switch to another open app</translation> +<translation id="1809483812148634490">Apps that you’ve downloaded from Google Play will be deleted from this Chromebook. + <ph name="LINE_BREAKS1" /> + Content that you’ve purchased such as movies, TV shows, music, books or other in-app purchases may also be deleted. + <ph name="LINE_BREAKS2" /> + This doesn’t affect apps or content on other devices.</translation> <translation id="1809734401532861917">Add my bookmarks, history, passwords and other settings to <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Services</translation> <translation id="18139523105317219">EDI Party Name</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Find the name printed on the back of your security key</translation> <translation id="2828650939514476812">Connect to Wi-Fi network</translation> <translation id="2835294513443818940">This file can't be downloaded securely.</translation> +<translation id="2835547721736623118">Speech recognition service</translation> <translation id="2836269494620652131">Crash</translation> <translation id="2836635946302913370">Signing in with this username has been disabled by your administrator.</translation> <translation id="283669119850230892">To use the network <ph name="NETWORK_ID" />, first complete your connection to the Internet below.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Subpage button</translation> <translation id="3020183492814296499">Shortcuts</translation> <translation id="3020990233660977256">Serial Number: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">While on battery</translation> <translation id="3021066826692793094">Butterfly</translation> <translation id="3021678814754966447">&View Frame Source</translation> <translation id="3022978424994383087">Didn't get that.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Back up to Google Drive. Easily restore data or switch device at any time. This backup includes app data. Backups are uploaded to Google and encrypted using your child's Google Account password.</translation> <translation id="4634771451598206121">Sign in again...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> is not available to Guest users.</translation> +<translation id="4635444580397524003">Linux backup has been successfully restored.</translation> <translation id="4636930964841734540">Info</translation> <translation id="4637083375689622795">More actions, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Enable ADB debugging</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Show advanced printer options</translation> <translation id="4891089016822695758">Beta forum</translation> <translation id="4892229439761351791">Site can use Bluetooth</translation> +<translation id="489258173289528622">Idle action while on battery</translation> <translation id="4893336867552636863">This will permanently delete your browsing data from this device.</translation> <translation id="4893522937062257019">On the lock screen</translation> <translation id="489454699928748701">Allow sites to use motion sensors</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Enable debugging features</translation> <translation id="5864195618110239517">Use metered connection</translation> <translation id="5864471791310927901">DHCP look-up failed</translation> +<translation id="5864754048328252126">Idle action while charging</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> will pause soon</translation> <translation id="586567932979200359">You're running <ph name="PRODUCT_NAME" /> from its disk image. Installing it on your computer lets you run it without the disk image and ensures that it will be kept up to date.</translation> <translation id="5865733239029070421">Automatically sends usage statistics and crash reports to Google</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Pin this page to Start screen...</translation> <translation id="6122081475643980456">Your Internet connection is being controlled</translation> <translation id="6122095009389448667">Continue blocking this site from seeing the clipboard</translation> +<translation id="6122831415929794347">Turn off Safe Browsing?</translation> <translation id="6122875415561139701">Write operation is not permitted on: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">The following extensions depend on this extension:</translation> <translation id="6124698108608891449">This site needs more permissions.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Read and change your data on <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> and <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Image Files</translation> <translation id="6410328738210026208">Change channel and Powerwash</translation> +<translation id="6410390304316730527">Safe Browsing protects you against attackers who may trick you into doing something dangerous, like installing malicious software or revealing personal information such as passwords, phone numbers or credit cards. If you turn it off, be careful when browsing unfamiliar or unreputable sites.</translation> <translation id="6410668567036790476">Add search engine</translation> <translation id="641081527798843608">Subject match</translation> <translation id="6412673304250309937">Checks URLs with a list of unsafe sites stored in Chrome. If a site tries to steal your password, or when you download a harmful file, Chrome may also send URLs, including bits of page content, to Safe Browsing.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Restoring couldn't be completed due to an error</translation> <translation id="8951465597020890363">Exit guest mode anyway?</translation> <translation id="8952831374766033534">Configuration option not supported: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">While charging</translation> <translation id="895347679606913382">Starting...</translation> <translation id="8957762313041272117">Live Caption</translation> <translation id="895944840846194039">JavaScript Memory</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index cbb66361..8bf7f90e 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -203,7 +203,7 @@ <translation id="1259152067760398571">La comprobación de seguridad se ejecutó ayer</translation> <translation id="1260451001046713751">Permitir siempre ventanas emergentes y redirecciones de <ph name="HOST" /></translation> <translation id="126156426083987769">Ha habido un problema con las licencias del modo de demostración del dispositivo.</translation> -<translation id="1263490604593716556">Cuenta gestionada por <ph name="FIRST_PARENT_EMAIL" /> y <ph name="SECOND_PARENT_EMAIL" />. Para cerrar la sesión en la cuenta principal de este dispositivo, haz clic en la hora que se muestra en la pantalla. En el menú que aparecerá, haz clic en Cerrar sesión.</translation> +<translation id="1263490604593716556">Cuenta gestionada por <ph name="FIRST_PARENT_EMAIL" /> y <ph name="SECOND_PARENT_EMAIL" />. Para cerrar la sesión en la cuenta principal de este dispositivo, haz clic en la hora que aparece en la pantalla. En el menú que aparecerá, haz clic en Cerrar sesión.</translation> <translation id="126710816202626562">Idioma de traducción:</translation> <translation id="126768002343224824">16x</translation> <translation id="1272079795634619415">Interrumpir</translation> @@ -880,7 +880,7 @@ <translation id="2172784515318616985">Continuar</translation> <translation id="2173302385160625112">Comprueba tu conexión a Internet</translation> <translation id="2173801458090845390">Añadir solicitud de ID para este dispositivo</translation> -<translation id="2174948148799307353">Cuenta gestionada por <ph name="PARENT_EMAIL" />. Para cerrar la sesión en la cuenta principal de este dispositivo, haz clic en la hora que se muestra en la pantalla. En el menú que aparecerá, haz clic en Cerrar sesión.</translation> +<translation id="2174948148799307353">Cuenta gestionada por <ph name="PARENT_EMAIL" />. Para cerrar la sesión en la cuenta principal de este dispositivo, haz clic en la hora que aparece en la pantalla. En el menú que aparecerá, haz clic en Cerrar sesión.</translation> <translation id="2175607476662778685">Barra de inicio rápido</translation> <translation id="217576141146192373">No se ha podido añadir la impresora. Revisa la configuración de tu impresora y vuelve a intentarlo.</translation> <translation id="2177950615300672361">Pestaña de incógnito: <ph name="TAB_NAME" /></translation> @@ -4941,7 +4941,7 @@ <translation id="7690294790491645610">Confirma la nueva contraseña</translation> <translation id="7690378713476594306">Elegir una opción de la lista</translation> <translation id="7690853182226561458">Añadir &carpeta...</translation> -<translation id="7691073721729883399">No se ha podido activar la criptocasa de la aplicación de kiosco.</translation> +<translation id="7691073721729883399">No se ha podido activar el directorio principal cifrado de la aplicación de kiosco.</translation> <translation id="7691077781194517083">No se puede restablecer esta llave de seguridad. Error <ph name="ERROR_CODE" />.</translation> <translation id="7696063401938172191">En tu "<ph name="PHONE_NAME" />":</translation> <translation id="7698408911093959127">{COUNT,plural, =1{1 elemento en la lista de marcadores}other{# elementos en la lista de marcadores}}</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 21bb64bb..8991dce4 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -103,7 +103,7 @@ <translation id="1136712381129578788">Segurtasun-giltza blokeatuta dago PINa gehiegitan idatzi delako oker. Hura desblokeatzeko, atera ezazu, eta sar ezazu berriro.</translation> <translation id="1137673463384776352">Ireki esteka <ph name="APP" /> aplikazioan</translation> <translation id="1139343347646843679">Errore bat gertatu da Linux konfiguratzean. Jarri administratzailearekin harremanetan.</translation> -<translation id="1140351953533677694">Atzitu Bluetooth gailuak eta seriekoak</translation> +<translation id="1140351953533677694">Atzitu Bluetooth bidezko gailuak eta seriekoak</translation> <translation id="114036956334641753">Audioa eta azpitituluak</translation> <translation id="1140746652461896221">Blokeatu edukiak ikusten dituzun orrietan</translation> <translation id="1143142264369994168">Ziurtagiriaren sinatzailea</translation> @@ -612,6 +612,11 @@ <translation id="1805888043020974594">Inprimatze-zerbitzaria</translation> <translation id="1805967612549112634">Berretsi PIN kodea</translation> <translation id="1806335016774576568">Aldatu irekita dagoen beste aplikazio batera</translation> +<translation id="1809483812148634490">Google Play zerbitzutik deskargatu dituzun aplikazioak ezabatu egingo dira Chromebook-etik. + <ph name="LINE_BREAKS1" /> + Erosi duzun edukia ere ezabatuko da agian; besteak beste, filmak, telesaioak, musika, liburuak eta aplikazioko beste erosketa batzuk. + <ph name="LINE_BREAKS2" /> + Horrek ez die eragiten beste gailu batzuetako aplikazioei edo edukiei.</translation> <translation id="1809734401532861917">Gehitu laster-markak, historia, pasahitzak eta ezarpenak <ph name="USER_EMAIL_ADDRESS" /> profilean</translation> <translation id="1813278315230285598">Zerbitzuak</translation> <translation id="18139523105317219">EDI alderdiaren izena</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Bilatu segurtasun-giltzaren atzealdean agertzen den izena</translation> <translation id="2828650939514476812">Konektatu wifi-sarera</translation> <translation id="2835294513443818940">Fitxategi hau ezin da segurtasunez deskargatu.</translation> +<translation id="2835547721736623118">Ahotsa hautemateko zerbitzua</translation> <translation id="2836269494620652131">Hutsegitea</translation> <translation id="2836635946302913370">Administratzaileak desgaitu egin du erabiltzaile-izen horrekin saioa hasteko aukera.</translation> <translation id="283669119850230892"><ph name="NETWORK_ID" /> sarea erabiltzeko, lehendabizi, osatu Interneterako konexioa hemen behean.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Azpiorrira joateko botoia</translation> <translation id="3020183492814296499">Lasterbideak</translation> <translation id="3020990233660977256">Serie-zenbakia: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Kargatzen ari ez denean</translation> <translation id="3021066826692793094">Tximeleta</translation> <translation id="3021678814754966447">&Ikusi markoaren iturburua</translation> <translation id="3022978424994383087">Ez dut ulertu.</translation> @@ -1986,7 +1993,7 @@ <translation id="3629631988386925734">Smart Lock gaitzeko, idatzi pasahitza. Hurrengoan, telefonoak desblokeatuko du <ph name="DEVICE_TYPE" /> gailua. Smart Lock desaktibatzeko, joan ezarpenetara.</translation> <translation id="3630132874740063857">Zure telefonoa</translation> <translation id="3630995161997703415">Gehitu webgunea biltegian edonoiz erabili ahal izateko</translation> -<translation id="3633309367764744750">Orrien informazioa aurretik kargatzen du, oraindik ikusi ez dituzun orriak barne. Kargatutako informazioaren artean baliteke cookie-ak egotea, haiek onartzen badituzu.</translation> +<translation id="3633309367764744750">Orrien informazioa aurretik kargatzen du, oraindik ikusi ez dituzun orriena barne. Kargatutako informazioaren artean baliteke cookieak egotea, haiek onartzen badituzu.</translation> <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> sarea. <ph name="NETWORK_NAME" /> (<ph name="CONNECTION_STATUS" />). Administratzaileak kudeatua. Xehetasunak.</translation> <translation id="3635241501480133979">Datu hauek erakundearen segurtasun-gidalerroak urratzen dituzte eta ezin dira jaregin.</translation> <translation id="3635353578505343390">Bidali oharrak Google-ri</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Egin babeskopiak Google Drive-n. Leheneratu gailu honen datuak edo aldatu gailua edonoiz. Aplikazioetako datuak ere sartzen dira babeskopietan. Babeskopiak Google-ra kargatzen dira eta enkriptatu egiten dira haurraren Google-ko kontuaren pasahitza erabilita.</translation> <translation id="4634771451598206121">Hasi saioa berriro…</translation> <translation id="4635398712689569051">Gonbidatuek ezin dute erabili <ph name="PAGE_NAME" /> orria.</translation> +<translation id="4635444580397524003">Leheneratu da Linux-en babeskopia.</translation> <translation id="4636930964841734540">Informazioa</translation> <translation id="4637083375689622795">Ekintza gehiago, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Gautu ADB arazketa</translation> @@ -2752,7 +2760,7 @@ <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" bertsioa espero zen, baina "<ph name="NEW_ID" />" da bertsioa</translation> <translation id="4660540330091848931">Tamaina aldatzen</translation> <translation id="4660838440047236328">gelaren diseinua</translation> -<translation id="4661407454952063730">Aplikazioek gordetako datu guztiak sartzen dira aplikazioetako datuetan (garatzailearen ezarpenen arabera), kontaktuak, mezuak eta argazkiak barne.</translation> +<translation id="4661407454952063730">Aplikazioek gordetako datu guztiak sartzen dira aplikazioetako datuetan (garatzaileen ezarpenen arabera), kontaktuak, mezuak eta argazkiak barne.</translation> <translation id="4662788913887017617">Partekatu laster-marka iPhone-arekin</translation> <translation id="4663373278480897665">Kamera erabil daiteke</translation> <translation id="4664482161435122549">PKCS #12 fitxategiaren esportazio-errorea</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Erakutsi inprimagailuaren aukera aurreratuak</translation> <translation id="4891089016822695758">Beta foroa</translation> <translation id="4892229439761351791">Webguneak Bluetooth konexioa erabil dezake</translation> +<translation id="489258173289528622">Gailua kargatzen ari ez denean inaktibo geratuz gero gauzatu beharreko ekintza</translation> <translation id="4893336867552636863">Hori eginez gero, betiko ezabatuko dira gailuko arakatze-datuak.</translation> <translation id="4893522937062257019">Pantaila blokeatuan</translation> <translation id="489454699928748701">Eman sentsoreak erabiltzeko baimena webguneei</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Gaitu arazte-eginbideak</translation> <translation id="5864195618110239517">Erabili neurtutako konexioa</translation> <translation id="5864471791310927901">DHCP bilaketak huts egin du</translation> +<translation id="5864754048328252126">Gailua kargatzen ari denean inaktibo geratuz gero gauzatu beharreko ekintza</translation> <translation id="5865508026715185451">Laster pausatuko da <ph name="APP_NAME" /></translation> <translation id="586567932979200359"><ph name="PRODUCT_NAME" /> bere disko-irudiaren bidez abiarazi duzu. Ordenagailuan instalatzen baduzu, ez duzu hori egin beharko eta eguneratuta dagoela ziurtatuko duzu.</translation> <translation id="5865733239029070421">Erabilera-estatistikak eta hutsegite-txostenak automatikoki bidaltzen dizkio Google-ri</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Ainguratu orria hasierako pantailan…</translation> <translation id="6122081475643980456">Luzapen bat kontrolatzen ari da Interneteko konexioa</translation> <translation id="6122095009389448667">Jarraitu blokeatzen webguneak arbeleko edukiak ikusteko aukera</translation> +<translation id="6122831415929794347">Arakatze segurua desaktibatu nahi duzu?</translation> <translation id="6122875415561139701">"<ph name="DEVICE_NAME" />" gailuak ez du idazteko baimenik.</translation> <translation id="6124650939968185064">Luzapen hauek beste honen menpe daude:</translation> <translation id="6124698108608891449">Webgune honek baimen gehiago behar ditu.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Irakurri eta aldatu <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, eta <ph name="WEBSITE_3" /> webguneetan dituzun datuak</translation> <translation id="6410257289063177456">Irudi-fitxategiak</translation> <translation id="6410328738210026208">Aldatu kanala eta berrezarri fabrikako ezarpenak.</translation> +<translation id="6410390304316730527">Arakatze seguruaren helburua zu balizko erasotzaileen aurrean babestea da, litekeena baita halakoek, azpikeriaz, zu zerbait arriskutsua egitera bultzatzea; esate baterako, software gaiztoa instalatu edo informazio pertsonala ezagutzera eman (adibidez, pasahitzak, telefono-zenbakiak edo kreditu-txartelak). Arakatze segurua desaktibatuz gero, tentuz ibili ezagunak edo izen onekoak ez diren webguneak arakatzean.</translation> <translation id="6410668567036790476">Gehitu bilatzailea</translation> <translation id="641081527798843608">Gaiaren bat-etortzea</translation> <translation id="6412673304250309937">URLak Chrome-n gordetako webgune ez-seguruen zerrendan dauden ala ez egiaztatzen du. Webguneren bat pasahitza lapurtzen saiatzen bada, edo fitxategi kaltegarriren bat deskargatzen baduzu, baliteke Chrome-k URLak ere bidaltzea (orriko edukiaren zati batzuk barne) Arakatze segurua eginbideari.</translation> @@ -4116,7 +4128,7 @@ <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Oharra:<ph name="END_BOLD" /> gaitu aukera zer egiten ari zaren baldin badakizu edo hori egiteko eskatu badizute, datuak biltzeak errendimendua murritz baitezake.</translation> <translation id="6541638731489116978">Webgune honi mugimendu-sentsoreak atzitzeko aukera blokeatu zaio.</translation> <translation id="6545665334409411530">Errepikapen-abiadura</translation> -<translation id="6545864417968258051">Bluetooth bidezko gailuak bilatzea</translation> +<translation id="6545864417968258051">Bluetooth bidezko gailuen bilaketa</translation> <translation id="6545867563032584178">Mikrofonoa erabiltzeko baimena desaktibatuta dago Mac sistemaren hobespenetan</translation> <translation id="6547354035488017500">Libratu gutxienez 512 MB; bestela, gailuak ez du erantzungo. Tokia egiteko, ezabatu fitxategiak gailuaren memoriatik.</translation> <translation id="6549639163247690448"><ph name="DOMAIN" /> domeinuak wifi-sare batera orain konektatzea eta eguneratze bat deskargatzea eskatzen du. Automatikoki deskargatuko da eguneratzea Internetera konektatzen zarenean.</translation> @@ -5258,7 +5270,7 @@ <translation id="8068809649322155577"><ph name="SITE_GROUP_NAME" /> webguneak, haren barneko webguneek eta hark instalatutako aplikazioek gorde dituzten datu eta cookie guztiak garbituko dira.</translation> <translation id="8069615408251337349">Google Cloud Print</translation> <translation id="8071432093239591881">Inprimatu irudi gisa</translation> -<translation id="8073499153683482226"><ph name="BEGIN_PARAGRAPH1" />Aplikazioek gordetako datu guztiak sartzen dira aplikazioetako datuetan (garatzailearen ezarpenen arabera), kontaktuak, mezuak eta argazkiak barne.<ph name="END_PARAGRAPH1" /> +<translation id="8073499153683482226"><ph name="BEGIN_PARAGRAPH1" />Aplikazioek gordetako datu guztiak sartzen dira aplikazioetako datuetan (garatzaileen ezarpenen arabera), kontaktuak, mezuak eta argazkiak barne.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Babeskopiek ez dute hartzen tokirik zure haurraren Drive-n.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Ezarpenak atalean desaktiba dezakezu zerbitzu hori.<ph name="END_PARAGRAPH3" /></translation> <translation id="8074127646604999664">Baimendu berriki itxitako webguneei datuak bidaltzen eta jasotzen amaitzea</translation> @@ -5276,7 +5288,7 @@ <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> pluginak ez du erantzuten</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Egin babeskopiak Google Drive-n; horrela, errazagoa izango da datuak leheneratzea edo beste gailu batera eramatea. Aplikazioetako datuak ere sartzen dira babeskopietan.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Babeskopiak Google-ra kargatzen dira eta enkriptatu egiten dira Google-ko kontuaren pasahitza erabilita.<ph name="END_PARAGRAPH2" /> - <ph name="BEGIN_PARAGRAPH3" />Aplikazioek gordetako datu guztiak sartzen dira aplikazioetako datuetan (garatzailearen ezarpenen arabera), kontaktuak, mezuak eta argazkiak barne.<ph name="END_PARAGRAPH3" /> + <ph name="BEGIN_PARAGRAPH3" />Aplikazioek gordetako datu guztiak sartzen dira aplikazioetako datuetan (garatzaileen ezarpenen arabera), kontaktuak, mezuak eta argazkiak barne.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Babeskopiek ez dute hartzen tokirik Drive-n.<ph name="END_PARAGRAPH4" /> <ph name="BEGIN_PARAGRAPH5" />Ezarpenak atalean desaktiba dezakezu zerbitzu hori.<ph name="END_PARAGRAPH5" /></translation> <translation id="80974698889265265">PIN kodeak ez datoz bat</translation> @@ -5935,6 +5947,7 @@ <translation id="8951256747718668828">Ezin izan da leheneratu errore bat gertatu delako</translation> <translation id="8951465597020890363">Gonbidatu modutik irten nahi duzu hala ere?</translation> <translation id="8952831374766033534">Konfigurazio-aukera ez da onartzen: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Kargatzen ari denean</translation> <translation id="895347679606913382">Hasten…</translation> <translation id="8957762313041272117">Istanteko azpitituluak</translation> <translation id="895944840846194039">JavaScript memoria</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index b4753ee..e38d3cf 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Tulostuspalvelin</translation> <translation id="1805967612549112634">Vahvista PIN-koodi</translation> <translation id="1806335016774576568">Vaihda toiseen avoimeen sovellukseen</translation> +<translation id="1809483812148634490">Google Playsta lataamasi sovellukset poistetaan tältä Chromebookilta. + <ph name="LINE_BREAKS1" /> + Ostamasi sisältö, kuten elokuvat, TV-ohjelmat, musiikki, kirjat tai sovelluksen sisäiset ostokset, saatetaan poistaa samalla. + <ph name="LINE_BREAKS2" /> + Tämä ei vaikuta sovelluksiin tai sisältöön muilla laitteilla.</translation> <translation id="1809734401532861917">Lisää kirjanmerkit, salasanat ja muut asetukset tilille <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Palvelut</translation> <translation id="18139523105317219">EDI-osapuolen nimi</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Katso suojausavaimen nimi sen takaa</translation> <translation id="2828650939514476812">Yhdistä Wi-Fi-verkkoon</translation> <translation id="2835294513443818940">Tätä tiedostoa ei voi ladata turvallisesti.</translation> +<translation id="2835547721736623118">Puheentunnistuspalvelu</translation> <translation id="2836269494620652131">Kaatuminen</translation> <translation id="2836635946302913370">Järjestelmänvalvoja on estänyt tällä käyttäjänimellä kirjautumisen.</translation> <translation id="283669119850230892">Jos haluat käyttää verkkoa <ph name="NETWORK_ID" />, määritä ensin internetyhteyden muodostus alla.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Alasivun painike</translation> <translation id="3020183492814296499">Pikanäppäimet</translation> <translation id="3020990233660977256">Sarjanumero: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Akkuvirralla</translation> <translation id="3021066826692793094">Perhonen</translation> <translation id="3021678814754966447">&Näytä kehyksen lähdekoodi</translation> <translation id="3022978424994383087">En ymmärtänyt.</translation> @@ -2730,6 +2737,7 @@ <translation id="4633757335284074492">Varmuuskopioi Google Driveen. Palauta dataa tai ota uusi laite käyttöön kätevästi milloin tahansa. Tämä varmuuskopio sisältää sovellusdatan. Varmuuskopiot ladataan Googleen ja salataan lapsesi Google-tilin salasanalla.</translation> <translation id="4634771451598206121">Kirjaudu uudelleen sisään...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> ei ole vieraskäyttäjien saatavilla.</translation> +<translation id="4635444580397524003">Linux-varmuuskopio palautettiin.</translation> <translation id="4636930964841734540">Tietoja</translation> <translation id="4637083375689622795">Lisää toimintoja, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Ota käyttöön ADB-virheenkorjaus</translation> @@ -2905,6 +2913,7 @@ <translation id="4890773143211625964">Näytä tulostimen lisäasetukset</translation> <translation id="4891089016822695758">Beta-keskusteluryhmä</translation> <translation id="4892229439761351791">Sivusto voi käyttää Bluetoothia</translation> +<translation id="489258173289528622">Käyttämättömyystila akkuvirralla</translation> <translation id="4893336867552636863">Tämä poistaa pysyvästi selaustietosi tältä laitteelta.</translation> <translation id="4893522937062257019">Lukitusnäytöllä</translation> <translation id="489454699928748701">Anna sivustojen käyttää liiketunnistimia</translation> @@ -3611,6 +3620,7 @@ <translation id="5863445608433396414">Ota käyttöön virheenkorjausominaisuudet</translation> <translation id="5864195618110239517">Käytä maksullista yhteyttä</translation> <translation id="5864471791310927901">DHCP-haku epäonnistui</translation> +<translation id="5864754048328252126">Käyttämättömyystila latauksessa</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> keskeytetään pian</translation> <translation id="586567932979200359">Käytät tuotetta <ph name="PRODUCT_NAME" /> sen levyvedoksen kautta. Asentamalla tuotteen tietokoneellesi voit käyttää sitä ilman levyvedosta ja varmistat, että tuote pysyy päivitettynä.</translation> <translation id="5865733239029070421">Lähettää automaattisesti käyttötilastoja ja virheraportteja Googlelle</translation> @@ -3810,6 +3820,7 @@ <translation id="6120205520491252677">Kiinnitä tämä sivu aloitusruutuun...</translation> <translation id="6122081475643980456">Internetyhteyttäsi hallinnoidaan</translation> <translation id="6122095009389448667">Estä sivustoa näkemästä leikepöydän sisältöä myös jatkossa</translation> +<translation id="6122831415929794347">Laitetaanko Selaussuoja pois päältä?</translation> <translation id="6122875415561139701">Kirjoitustoiminto ei ole sallittu laitteella <ph name="DEVICE_NAME" />.</translation> <translation id="6124650939968185064">Seuraavat laajennukset ovat riippuvaisia tästä laajennuksesta:</translation> <translation id="6124698108608891449">Tämä sivusto tarvitsee lisää käyttöoikeuksia.</translation> @@ -4015,6 +4026,7 @@ <translation id="6408118934673775994">lukea ja muuttaa tietojasi sivustoissa <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> ja <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Kuvatiedostot </translation> <translation id="6410328738210026208">Vaihda kanavaa ja tee Powerwash</translation> +<translation id="6410390304316730527">Selaussuoja parantaa suojaustasi, jos hyökkääjä yrittää huijata sinua tekemään jotain vaarallista, kuten asentamaan haittaohjelmia tai paljastamaan henkilötietoja (esimerkiksi salasanoja, puhelinnumeroita tai credit-kortin tietoja). Jos laitat sen pois päältä, ole varovainen tuntemattomilla tai huonomaineisilla sivustoilla.</translation> <translation id="6410668567036790476">Lisää hakukone</translation> <translation id="641081527798843608">Aiheen vastaavuus</translation> <translation id="6412673304250309937">Tarkistaa URL-osoitteet Chromeen tallennetun vaarallisten sivustojen luettelon avulla. Jos sivusto yrittää varastaa salasanaasi tai jos lataat haitallisen tiedoston, Chrome voi myös lähettää Selaussuojan tarkistettavaksi URL-osoitteita, mukaan lukien osia sivujen sisällöstä.</translation> @@ -5934,6 +5946,7 @@ <translation id="8951256747718668828">Palauttaminen epäonnistui virheen takia</translation> <translation id="8951465597020890363">Haluatko silti poistua Guest Modesta?</translation> <translation id="8952831374766033534">Määritysvaihtoehtoa ei tueta: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Latauksessa</translation> <translation id="895347679606913382">Käynnistää...</translation> <translation id="8957762313041272117">Livetekstitys</translation> <translation id="895944840846194039">JavaScriptin käyttämä muisti</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index abbadab..d60670a 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Serveur d'impression</translation> <translation id="1805967612549112634">Confirmez le NIP</translation> <translation id="1806335016774576568">Passer à une autre application ouverte</translation> +<translation id="1809483812148634490">Les applications que vous avez téléchargées à partir de Google Play seront supprimées de ce Chromebook. + <ph name="LINE_BREAKS1" /> + Les contenus que vous avez achetés, comme les films, les émissions, la musique, les livres ou autres achats au moyen de l'application, peuvent également être supprimés. + <ph name="LINE_BREAKS2" /> + Cela ne concerne pas les applications ou les contenus des autres appareils.</translation> <translation id="1809734401532861917">Ajouter au compte <ph name="USER_EMAIL_ADDRESS" /> mes favoris, mon historique, mes mots de passe et autres paramètres</translation> <translation id="1813278315230285598">Services</translation> <translation id="18139523105317219">Nom de partie EDI</translation> @@ -1394,6 +1399,7 @@ <translation id="2825848369316359348">Trouvez le nom imprimé au dos de votre clé de sécurité</translation> <translation id="2828650939514476812">Connexion au réseau Wi-Fi</translation> <translation id="2835294513443818940">Ce fichier ne peut pas être téléchargé de manière sécuritaire.</translation> +<translation id="2835547721736623118">Service de reconnaissance vocale</translation> <translation id="2836269494620652131">Plantage</translation> <translation id="2836635946302913370">L'administrateur a désactivé la connexion avec ce nom d'utilisateur.</translation> <translation id="283669119850230892">Pour utiliser le réseau <ph name="NETWORK_ID" />, terminez d'abord la connexion à Internet ci-dessous.</translation> @@ -1538,6 +1544,7 @@ <translation id="3019285239893817657">Bouton pour accéder à la sous-page</translation> <translation id="3020183492814296499">Raccourcis</translation> <translation id="3020990233660977256">Numéro de série : <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Sur la pile</translation> <translation id="3021066826692793094">Papillon</translation> <translation id="3021678814754966447">&Afficher le code source du cadre</translation> <translation id="3022978424994383087">Je n'ai pas compris.</translation> @@ -2734,6 +2741,7 @@ <translation id="4633757335284074492">Sauvegarder sur Google Disque. Restaurez facilement vos données ou changez d'appareil à tout moment. Les données des applications sont également sauvegardées. Les sauvegardes sont téléversées dans les serveurs de Google et sont chiffrées en utilisant le mot de passe du compte Google de votre enfant.</translation> <translation id="4634771451598206121">Connectez-vous de nouveau...</translation> <translation id="4635398712689569051">Les utilisateurs invités n'ont pas accès à la page <ph name="PAGE_NAME" />.</translation> +<translation id="4635444580397524003">La sauvegarde Linux a été restaurée.</translation> <translation id="4636930964841734540">Renseignements</translation> <translation id="4637083375689622795">Autres actions, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Activer le débogage PDA</translation> @@ -2909,6 +2917,7 @@ <translation id="4890773143211625964">Afficher les options d'imprimante avancées</translation> <translation id="4891089016822695758">Forum bêta</translation> <translation id="4892229439761351791">Le site peut utiliser le Bluetooth</translation> +<translation id="489258173289528622">Action en cas d'inactivité lorsque l'appareil utilise la pile</translation> <translation id="4893336867552636863">Cette action entraînera la suppression définitive de vos données de navigation sur cet appareil.</translation> <translation id="4893522937062257019">À l'écran de verrouillage</translation> <translation id="489454699928748701">Autoriser les sites à utiliser les capteurs de mouvement</translation> @@ -3615,6 +3624,7 @@ <translation id="5863445608433396414">Activer les fonctionnalités de débogage</translation> <translation id="5864195618110239517">Utiliser une connexion mesurée</translation> <translation id="5864471791310927901">Échec de la vérification DHCP</translation> +<translation id="5864754048328252126">Action en cas d'inactivité durant la recharge</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> sera bientôt mise en pause</translation> <translation id="586567932979200359">Vous utilisez <ph name="PRODUCT_NAME" /> à partir de son image disque. Si vous l'installez sur votre ordinateur, vous pourrez l'utiliser sans image disque et vous bénéficierez de mises à jour automatiques.</translation> <translation id="5865733239029070421">Envoie automatiquement des statistiques d'utilisation et des rapports d'erreur à Google</translation> @@ -3814,6 +3824,7 @@ <translation id="6120205520491252677">Épingler cette page à l'écran de démarrage...</translation> <translation id="6122081475643980456">Une extension a pris le contrôle de votre connexion Internet</translation> <translation id="6122095009389448667">Continuer à bloquer ce site pour qu'il ne puisse pas voir le presse-papiers</translation> +<translation id="6122831415929794347">Désactiver la navigation sécurisée?</translation> <translation id="6122875415561139701">Opération d'écriture non autorisée sur l'appareil « <ph name="DEVICE_NAME" /> ».</translation> <translation id="6124650939968185064">Les extensions suivantes dépendent de cette extension :</translation> <translation id="6124698108608891449">Ce site a besoin d'autorisations supplémentaires.</translation> @@ -4017,6 +4028,7 @@ <translation id="6408118934673775994">Accéder à vos données sur <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> et <ph name="WEBSITE_3" /> et les modifier</translation> <translation id="6410257289063177456">Fichiers image</translation> <translation id="6410328738210026208">Changement de version et réinitialisation « Powerwash »</translation> +<translation id="6410390304316730527">La navigation sécurisée vous protège contre les pirates qui pourraient vous inciter à faire quelque chose de dangereux comme installer un logiciel malveillant ou révéler vos renseignements personnels (par exemple, des mots de passe, des numéros de téléphone ou des numéros de carte de crédit). Si vous la désactivez, faites attention lorsque vous naviguez sur des sites inconnus ou de mauvaise réputation.</translation> <translation id="6410668567036790476">Ajouter un moteur de recherche</translation> <translation id="641081527798843608">Correspondance d'objet</translation> <translation id="6412673304250309937">Il vérifie les URL en fonction d'une liste de sites non sécuritaires stockée dans Chrome. Si un site tente de voler votre mot de passe ou si vous téléchargez un fichier dangereux, Chrome peut également envoyer les URL concernées, y compris des extraits du contenu de pages, à la navigation sécurisée.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Une erreur s'est produite et la restauration n'a pas pu être terminée</translation> <translation id="8951465597020890363">Quitter le mode Invité quand même?</translation> <translation id="8952831374766033534">Cette option de configuration n'est pas prise en charge : <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Pendant la charge</translation> <translation id="895347679606913382">Début du téléchargement...</translation> <translation id="8957762313041272117">Transcription instantanée</translation> <translation id="895944840846194039">Mémoire pour JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index ed555326..d007b7f 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -611,6 +611,11 @@ <translation id="1805888043020974594">Servidor de impresión</translation> <translation id="1805967612549112634">Confirmar PIN</translation> <translation id="1806335016774576568">Cambiar a outra aplicación aberta</translation> +<translation id="1809483812148634490">As aplicacións que descargases desde Google Play eliminaranse deste Chromebook. + <ph name="LINE_BREAKS1" /> + Tamén se pode eliminar o contido que comprases, como as películas, os programas de televisión, a música, os libros ou outras compras integradas nas aplicacións. + <ph name="LINE_BREAKS2" /> + Isto non afecta ás aplicacións nin ao contido doutros dispositivos.</translation> <translation id="1809734401532861917">Engade os meus marcadores, o historial, os contrasinais e outras opcións de configuración a <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Servizos</translation> <translation id="18139523105317219">Nome da parte EDI</translation> @@ -1392,6 +1397,7 @@ <translation id="2825848369316359348">O nome está impreso na parte traseira da chave de seguranza</translation> <translation id="2828650939514476812">Conectarse a unha rede wifi</translation> <translation id="2835294513443818940">Este ficheiro non se pode descargar de forma segura.</translation> +<translation id="2835547721736623118">Servizo de recoñecemento de voz</translation> <translation id="2836269494620652131">Erro</translation> <translation id="2836635946302913370">O administrador desactivou o inicio de sesión con este nome de usuario.</translation> <translation id="283669119850230892">Para utilizar a rede <ph name="NETWORK_ID" />, primeiro completa a túa conexión a Internet a continuación.</translation> @@ -1536,6 +1542,7 @@ <translation id="3019285239893817657">Botón de subpáxina</translation> <translation id="3020183492814296499">Atallos</translation> <translation id="3020990233660977256">Número de serie: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Durante o uso da batería</translation> <translation id="3021066826692793094">Bolboreta</translation> <translation id="3021678814754966447">&Ver fonte do marco</translation> <translation id="3022978424994383087">Non se entendeu a mensaxe.</translation> @@ -2732,6 +2739,7 @@ <translation id="4633757335284074492">Facer copia de seguranza en Drive. Restaura os datos facilmente ou cambia de dispositivo en calquera momento. Esta copia de seguranza inclúe os datos das aplicacións. As copias de seguranza cárganse en Google e encríptanse co contrasinal da Conta de Google do teu fillo.</translation> <translation id="4634771451598206121">Inicia sesión de novo...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> non está dispoñible para usuarios invitados.</translation> +<translation id="4635444580397524003">Restaurouse correctamente a copia de seguranza de Linux.</translation> <translation id="4636930964841734540">Información</translation> <translation id="4637083375689622795">Máis accións, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Activar depuración de ADB</translation> @@ -2907,6 +2915,7 @@ <translation id="4890773143211625964">Mostrar opcións avanzadas da impresora</translation> <translation id="4891089016822695758">Foro de Chrome Beta</translation> <translation id="4892229439761351791">O sitio pode usar o Bluetooth</translation> +<translation id="489258173289528622">Acción de inactividade durante o uso da batería</translation> <translation id="4893336867552636863">Esta acción eliminará permanentemente os teus datos de navegación deste dispositivo.</translation> <translation id="4893522937062257019">Na pantalla de bloqueo</translation> <translation id="489454699928748701">Permitir que os sitios utilicen os sensores de movemento</translation> @@ -3613,6 +3622,7 @@ <translation id="5863445608433396414">Activar funcións de depuración</translation> <translation id="5864195618110239517">Usar conexión de pago por consumo</translation> <translation id="5864471791310927901">Produciuse un erro na busca de DHCP</translation> +<translation id="5864754048328252126">Acción de inactividade durante a carga</translation> <translation id="5865508026715185451">A aplicación <ph name="APP_NAME" /> porase en pausa en breve</translation> <translation id="586567932979200359">Estás executando <ph name="PRODUCT_NAME" /> desde a imaxe de disco. Se o instalas no ordenador, poderás executalo sen a imaxe de disco e aseguraraste de mantelo actualizado.</translation> <translation id="5865733239029070421">Envía estatísticas de uso e informes de erros automaticamente a Google</translation> @@ -3812,6 +3822,7 @@ <translation id="6120205520491252677">Fixar esta páxina á pantalla de inicio...</translation> <translation id="6122081475643980456">Estase controlando a túa conexión a Internet</translation> <translation id="6122095009389448667">Seguir impedindo que este sitio vexa o contido do portapapeis</translation> +<translation id="6122831415929794347">Queres desactivar a función Navegación segura?</translation> <translation id="6122875415561139701">Non se permite a operación de escritura no dispositivo "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">As seguintes extensións dependen desta extensión:</translation> <translation id="6124698108608891449">Este sitio necesita máis permisos.</translation> @@ -4015,6 +4026,7 @@ <translation id="6408118934673775994">Ler e cambiar os teus datos en <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Ficheiros de imaxe</translation> <translation id="6410328738210026208">Cambiar canle e Powerwash</translation> +<translation id="6410390304316730527">A función Navegación segura protéxete contra os piratas informáticos que poden enganarte para que realices accións perigosas, como instalar un software malicioso ou revelar información persoal (por exemplo, contrasinais, números de teléfono ou tarxetas de crédito). Se a desactivas, ten coidado ao consultar sitios descoñecidos ou con mala reputación.</translation> <translation id="6410668567036790476">Engadir motor de busca</translation> <translation id="641081527798843608">Coincidencia do asunto</translation> <translation id="6412673304250309937">Comproba enderezos URL cunha lista de sitios non seguros almacenada en Chrome. Se un sitio tenta roubarche o contrasinal ou se descargas un ficheiro daniño, Chrome tamén pode comprobar os enderezos URL, entre os que se inclúen fragmentos de contido das páxinas, a través da función Navegación segura.</translation> @@ -5934,6 +5946,7 @@ <translation id="8951256747718668828">Non se puido completar a restauración debido a un erro</translation> <translation id="8951465597020890363">Queres saír do modo de invitado de todas formas?</translation> <translation id="8952831374766033534">Non se admite a opción de configuración: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Durante a carga</translation> <translation id="895347679606913382">Iniciando...</translation> <translation id="8957762313041272117">Subtítulos instantáneos</translation> <translation id="895944840846194039">Memoria JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index afe44a8..2a214bd 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Nyomtatószerver</translation> <translation id="1805967612549112634">PIN-kód megerősítése</translation> <translation id="1806335016774576568">Váltás másik megnyitott alkalmazásra</translation> +<translation id="1809483812148634490">A Google Playről letöltött alkalmazások törlődnek erről a Chromebookról. + <ph name="LINE_BREAKS1" /> + A megvásárolt tartalmak, például filmek, sorozatok, zeneszámok, könyvek vagy egyéb, alkalmazáson belüli vásárlások szintén törlődhetnek. + <ph name="LINE_BREAKS2" /> + Ez nem befolyásolja a más eszközön található alkalmazásokat vagy tartalmakat.</translation> <translation id="1809734401532861917">Saját könyvjelzők, előzmények, jelszavak és egyéb beállítások hozzáadása a következőhöz: <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Szolgáltatások</translation> <translation id="18139523105317219">EDI fél neve</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Keresse meg a biztonsági hardverkulcs hátuljára nyomtatott nevet</translation> <translation id="2828650939514476812">Csatlakozás Wi-Fi-hálózathoz</translation> <translation id="2835294513443818940">Ezt a fájlt nem lehet biztonságosan letölteni.</translation> +<translation id="2835547721736623118">Beszédfelismerési szolgáltatás</translation> <translation id="2836269494620652131">Összeomlás</translation> <translation id="2836635946302913370">A rendszergazdája letiltotta a bejelentkezést ezzel a felhasználónévvel.</translation> <translation id="283669119850230892">A hálózat (<ph name="NETWORK_ID" />) használatához először fejezze be csatlakozást az internethez alább.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Aloldal gombja</translation> <translation id="3020183492814296499">Billentyűparancsok</translation> <translation id="3020990233660977256">Sorozatszám: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Amíg akkumulátorról működik</translation> <translation id="3021066826692793094">Pillangó</translation> <translation id="3021678814754966447">&Keret forrásának megtekintése</translation> <translation id="3022978424994383087">Nem értettem.</translation> @@ -2732,6 +2739,7 @@ <translation id="4633757335284074492">Biztonsági mentés a Google Drive-ra. Bármikor könnyedén visszaállíthatja adatait vagy lecserélheti eszközét. A biztonsági másolat alkalmazásadatokat tartalmaz. A biztonsági másolatokat a Google szervereire tölti fel a rendszer, és a gyermeke Google-fiókjához használt jelszóval titkosítja őket.</translation> <translation id="4634771451598206121">Bejelentkezés újra...</translation> <translation id="4635398712689569051">A(z) <ph name="PAGE_NAME" /> nem hozzáférhető a vendég felhasználók számára.</translation> +<translation id="4635444580397524003">A Linux biztonsági másolata sikeresen visszaállítva.</translation> <translation id="4636930964841734540">Információ</translation> <translation id="4637083375689622795">További műveletek, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">ADB-hibakeresés engedélyezése</translation> @@ -2907,6 +2915,7 @@ <translation id="4890773143211625964">Speciális nyomtatóbeállítások megjelenítése</translation> <translation id="4891089016822695758">Béta fórum</translation> <translation id="4892229439761351791">A webhely használhat Bluetooth-t</translation> +<translation id="489258173289528622">Tétlenségi művelet akkumulátorról való működéskor</translation> <translation id="4893336867552636863">Ezzel az eszközön lévő összes böngészési adat véglegesen törlődik.</translation> <translation id="4893522937062257019">A lezárási képernyőn</translation> <translation id="489454699928748701">A mozgásérzékelők használatának engedélyezése a webhelyek számára</translation> @@ -3615,6 +3624,7 @@ <translation id="5863445608433396414">Hibakeresési funkciók bekapcsolása</translation> <translation id="5864195618110239517">Forgalomkorlátos kapcsolat használata</translation> <translation id="5864471791310927901">DHCP-keresés sikertelen</translation> +<translation id="5864754048328252126">Tétlenségi művelet töltés közben</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> hamarosan szünetelni fog</translation> <translation id="586567932979200359">A <ph name="PRODUCT_NAME" /> alkalmazást jelenleg a lemezképéről futtatja. Ha telepíti a számítógépére, akkor futtathatja a lemezkép nélkül is, emellett biztosan naprakészen tartja.</translation> <translation id="5865733239029070421">Automatikusan elküldi a használati statisztikákat és hibajelentéseket a Google-nak</translation> @@ -3814,6 +3824,7 @@ <translation id="6120205520491252677">Az oldal rögzítése a kezdőképernyőn...</translation> <translation id="6122081475643980456">Internetkapcsolata felett más vette át az irányítást</translation> <translation id="6122095009389448667">A webhely vágólap megtekintésére vonatkozó tiltásának fenntartása</translation> +<translation id="6122831415929794347">Kikapcsolja a Biztonságos Böngészést?</translation> <translation id="6122875415561139701">Az írási művelet nem engedélyezett a következőn: „<ph name="DEVICE_NAME" />”.</translation> <translation id="6124650939968185064">Ettől a bővítménytől a következő bővítmények függnek:</translation> <translation id="6124698108608891449">A webhelynek több engedélyre van szüksége.</translation> @@ -4017,6 +4028,7 @@ <translation id="6408118934673775994">Adatainak olvasása és módosítása itt: <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> és <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Képfájlok</translation> <translation id="6410328738210026208">Csatorna módosítása és Powerwash</translation> +<translation id="6410390304316730527">A Biztonságos Böngészés megvédi azoktól a támadóktól, akik megpróbálják csellel rávenni Önt valamilyen kockázatos dologra, például arra, hogy rosszindulatú szoftvert telepítsen, vagy felfedje személyes adatait (jelszavakat, telefonszámokat, bankkártyaadatokat stb). Ha kikapcsolja, legyen óvatos, amikor ismeretlen vagy kétes hírnevű webhelyeket keres fel.</translation> <translation id="6410668567036790476">Keresőmotor hozzáadása</translation> <translation id="641081527798843608">Tárgyegyeztetés</translation> <translation id="6412673304250309937">Ellenőrzi az URL-eket a Chrome-ban a nem biztonságos webhelyekről tárolt lista alapján. Ha egy webhely megpróbálja ellopni az Ön jelszavát, illetve ha Ön ártalmas fájlt tölt le, akkor a Chrome elküldheti az URL-eket is (az oldaltartalmak részleteivel együtt) a Biztonságos Böngészésnek.</translation> @@ -5937,6 +5949,7 @@ <translation id="8951256747718668828">Hiba történt, ezért nem lehetett végrehajtani a visszaállítást.</translation> <translation id="8951465597020890363">Mindenképp kilép a vendég módból?</translation> <translation id="8952831374766033534">Nem támogatott konfigurációs beállítás: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Töltés közben</translation> <translation id="895347679606913382">Kezdés...</translation> <translation id="8957762313041272117">Élő feliratozás</translation> <translation id="895944840846194039">JavaScript-memória</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index e323134..3b84ef4 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Տպման սերվեր</translation> <translation id="1805967612549112634">Հաստատեք PIN կոդը</translation> <translation id="1806335016774576568">Անցնել մյուս բացված հավելված</translation> +<translation id="1809483812148634490">Google Play-ից ներբեռնված հավելվածները կհեռացվեն այս Chromebook-ից։ + <ph name="LINE_BREAKS1" /> + Ձեր գնած բովանդակությունը (ֆիլմերը, սերիալները, երգերը, գրքերը, ինչպես նաև հավելվածներից կատարած մյուս գնումները) նույնպես կարող է ջնջվել։ + <ph name="LINE_BREAKS2" /> + Մյուս սարքերի հավելվածներն ու բովանդակությունը կպահպանվեն։</translation> <translation id="1809734401532861917">Ավելացնել իմ էջանիշները, պատմությունը, գաղտնաբառերն ու մյուս կարգավորումները <ph name="USER_EMAIL_ADDRESS" /> պրոֆիլում</translation> <translation id="1813278315230285598">Services</translation> <translation id="18139523105317219">EDI կողմի անունը</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Անունը նշված է անվտանգության բանալու հետևի մասում</translation> <translation id="2828650939514476812">Միացեք Wi-Fi ցանցի</translation> <translation id="2835294513443818940">Այս ֆայլը հնարավոր չէ ներբեռնել անվտանգ եղանակով։</translation> +<translation id="2835547721736623118">Խոսքի ճանաչման ծառայություն</translation> <translation id="2836269494620652131">Խափանում</translation> <translation id="2836635946302913370">Այս օգտանունով մուտքը կասեցվել է ձեր ադմինիստրատորի կողմից:</translation> <translation id="283669119850230892"><ph name="NETWORK_ID" /> ցանցն օգտագործելու համար նախ կապակցվեք համացանցին:</translation> @@ -1508,8 +1514,8 @@ <translation id="2986010903908656993">Այս էջին արգելված է ամբողջապես վերահսկել MIDI սարքերը:</translation> <translation id="2987620471460279764">Այլ սարքից ուղարկված տեքստ</translation> <translation id="2989474696604907455">կցված չէ</translation> -<translation id="2989786307324390836">Երկուական մեկ վկայագիր՝ DER-գաղտնագրումով</translation> -<translation id="2992931425024192067">Ցուցադրել ծանուցումներն ամբողջությամբ</translation> +<translation id="2989786307324390836">Բինարային մեկ վկայագիր՝ DER-գաղտնագրումով</translation> +<translation id="2992931425024192067">Ծանուցումները ցույց տալ ամբողջությամբ</translation> <translation id="2993517869960930405">Տեղեկություններ ծրագրի մասին</translation> <translation id="2996286169319737844">Տվյալները գաղտնագրվել են ձեր համաժամացման անցաբառով: Գաղտնագրումը չի կիրառվում վճարման եղանակների և Google Pay-ի հասցեների համար։</translation> <translation id="2996722619877761919">Շրջել երկար եզրի կողմով</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Ենթաէջի կոճակ</translation> <translation id="3020183492814296499">Դյուրանցումներ</translation> <translation id="3020990233660977256">Սերիական համարը` <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Մարտկոցից սնուցման ընթացքում</translation> <translation id="3021066826692793094">Թիթեռ</translation> <translation id="3021678814754966447">&Դիտել շրջանակի սկզբնաղբյուրը</translation> <translation id="3022978424994383087">Անհասկանալի է:</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Պահուստավորում Google Drive-ում։ Ցանկացած ժամանակ հեշտությամբ վերականգնեք ձեր տվյալները կամ տեղափոխեք մեկ այլ սարք։ Պահուստավորումը ներառում է հավելվածների տվյալները։ Պահուստավորված տվյալները վերբեռնվում են Google և գաղտնագրվում ձեր երեխայի Google հաշվի գաղտնաբառի միջոցով։</translation> <translation id="4634771451598206121">Նորից մուտք գործել…</translation> <translation id="4635398712689569051">«<ph name="PAGE_NAME" />» էջը հասանելի չէ հյուրի ռեժիմում:</translation> +<translation id="4635444580397524003">Լինուքսի պահուստավորված տվյալները վերականգնվեցին։</translation> <translation id="4636930964841734540">Տեղեկություններ</translation> <translation id="4637083375689622795">Այլ գործողություններ, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Միացնել ADB վրիպազերծումը</translation> @@ -2909,6 +2917,7 @@ <translation id="4890773143211625964">Ցուցադրել տպիչի լրացուցիչ ընտրանքները</translation> <translation id="4891089016822695758">Բետա ֆորում</translation> <translation id="4892229439761351791">Կայքը կարող է օգտագործել Bluetooth-ը</translation> +<translation id="489258173289528622">Անգործուն ռեժիմի միացում՝ մարտկոցից սնուցման ընթացքում</translation> <translation id="4893336867552636863">Այս սարքից այցելությունների տվյալներն ընդմիշտ կջնջվեն:</translation> <translation id="4893522937062257019">Կողպէկրանին</translation> <translation id="489454699928748701">Թույլ տալ կայքերին օգտագործել շարժման տվիչները</translation> @@ -3617,6 +3626,7 @@ <translation id="5863445608433396414">Միացնել վրիպազերծման գործառույթները</translation> <translation id="5864195618110239517">Օգտագործել վճարովի թրաֆիկով կապը</translation> <translation id="5864471791310927901">DHCP-ի որոնումը չհաջողվեց</translation> +<translation id="5864754048328252126">Անգործուն ռեժիմի միացում լիցքավորման ընթացքում</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> հավելվածի աշխատանքը շուտով կդադարեցվի</translation> <translation id="586567932979200359"><ph name="PRODUCT_NAME" />-ը գործարկվում է իր սկավառակի պատկերից: Եթե տեղադրեք այն համակարգչում, կարող եք գործարկել առանց սկավառակի պատկերի` միևնույն ժամանակ այն արդի պահելով:</translation> <translation id="5865733239029070421">Ավտոմատ Google-ին է ուղարկում օգտագործման վիճակագրությունը և խափանումների մասին հաշվետվությունները</translation> @@ -3816,6 +3826,7 @@ <translation id="6120205520491252677">Ամրացնել այս էջը մեկնարկի էկրանին…</translation> <translation id="6122081475643980456">Ձեր կապակցումը համացանցին վերահսկվում է</translation> <translation id="6122095009389448667">Արգելափակել այս կայքի մուտքը սեղմատախտակ</translation> +<translation id="6122831415929794347">Անջատե՞լ ապահով դիտարկումը</translation> <translation id="6122875415561139701">Գրելու գործողությունը թույլատրված չէ հետևյալ սարքում` «<ph name="DEVICE_NAME" />»:</translation> <translation id="6124650939968185064">Հետևյալ ընդլայնումները կախված են այս ընդլայնումից՝</translation> <translation id="6124698108608891449">Այս կայքին անհրաժեշտ են լրացուցիչ թույլտվություններ։</translation> @@ -4019,6 +4030,7 @@ <translation id="6408118934673775994">Կարդալ և փոխել ձեր տվյալները <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> և <ph name="WEBSITE_3" /> վեբկայքերում</translation> <translation id="6410257289063177456">Պատկերների ֆայլեր</translation> <translation id="6410328738210026208">Վարկածի փոփոխում և Powerwash</translation> +<translation id="6410390304316730527">Ապահով դիտարկումը պաշտպանում է ձեզ հարձակվողներից, ովքեր կարող են խաբեությամբ ձեր սարքում տեղադրել վնասարար ծրագրեր կամ բացահայտել ձեր անձնական տեղեկությունները (օրինակ՝ գաղտնաբառերը, հեռախոսահամարները կամ վարկային քարտերի տվյալները)։ Եթե անջատեք այն, զգո՛ւյշ եղեք անծանոթ կամ ոչ վստահելի կայքեր այցելելիս։</translation> <translation id="6410668567036790476">Որոնման համակարգի ավելացում</translation> <translation id="641081527798843608">Թեմաների համընկնում</translation> <translation id="6412673304250309937">Ստուգում է URL-ները Chrome-ում պահված վտանգավոր կայքերի ցանկի միջոցով։ Եթե կայքը փորձում է գողանալ ձեր գաղտնաբառը, կամ երբ վնասակար ֆայլ եք ներբեռնում, Chrome-ը կարող է ուղարկել URL-ն ու էջի բովանդակությունը՝ անվտանգ դիտարկման միջոցով ստուգելու համար։</translation> @@ -5937,6 +5949,7 @@ <translation id="8951256747718668828">Չհաջողվեց վերականգնել սխալի պատճառով</translation> <translation id="8951465597020890363">Փակե՞լ հյուրի ռեժիմը։</translation> <translation id="8952831374766033534">Կազմաձևումը չի աջակցվում՝ <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Լիցքավորման ընթացքում</translation> <translation id="895347679606913382">Մեկնարկ…</translation> <translation id="8957762313041272117">Կենդանի ենթագրեր</translation> <translation id="895944840846194039">JavaScript հիշողություն</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index b733022..bf485d1 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Prentþjónn</translation> <translation id="1805967612549112634">Staðfestu PIN-númerið</translation> <translation id="1806335016774576568">Skipta yfir í annað opið forrit</translation> +<translation id="1809483812148634490">Forritum sem þú hefur sótt með Google Play verður eytt úr þessari Chromebook tölvu. + <ph name="LINE_BREAKS1" /> + Efni sem þú hefur keypt eins og kvikmyndum, sjónvarpsþáttum, tónlist, bókum eða öðrum innkaupum í forritum verður einnig eytt. + <ph name="LINE_BREAKS2" /> + Þetta hefur ekki áhrif á forrit eða efni úr öðrum tækjum.</translation> <translation id="1809734401532861917">Bæta bókamerkjum, ferlinum, aðgangsorðum og öðrum stillingum við <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Þjónusta</translation> <translation id="18139523105317219">Heiti EDI-aðila</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Finndu heitið sem er letrað aftan á öryggislykilinn</translation> <translation id="2828650939514476812">Tengjast Wi-Fi neti</translation> <translation id="2835294513443818940">Ekki er hægt að sækja þessa skrá á öruggan hátt.</translation> +<translation id="2835547721736623118">Raddgreiningarþjónusta</translation> <translation id="2836269494620652131">Hrun</translation> <translation id="2836635946302913370">Kerfisstjóri hefur lokað á innskráningu með þessu notandanafni.</translation> <translation id="283669119850230892">Til að nota netið <ph name="NETWORK_ID" /> þarftu fyrst að ljúka við tenginguna við internetið hér fyrir neðan.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Hnappur fyrir undirsíðu</translation> <translation id="3020183492814296499">Flýtileiðir</translation> <translation id="3020990233660977256">Raðnúmer: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Þegar rafhlöðuorka er notuð</translation> <translation id="3021066826692793094">Fiðrildi</translation> <translation id="3021678814754966447">Skoða frumkóða ramma</translation> <translation id="3022978424994383087">Náði þessu ekki.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Taka afrit á Google Drive. Endurheimtu gögn eða skiptu um tæki hvenær sem er. Þetta öryggisafrit inniheldur forritsgögn. Öryggisafritunum þínum er hlaðið inn á Google og þau dulkóðuð með aðgangsorði Google reiknings barnsins þíns.</translation> <translation id="4634771451598206121">Skráðu þig inn aftur...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> er ekki í boði fyrir gestanotendur.</translation> +<translation id="4635444580397524003">Linux-öryggisafrit var endurheimt.</translation> <translation id="4636930964841734540">Upplýsingar</translation> <translation id="4637083375689622795">Fleiri aðgerðir, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Kveikja á ADB-villuleit</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Sýna ítarlegar stillingar prentara</translation> <translation id="4891089016822695758">Beta-umræðusvæði</translation> <translation id="4892229439761351791">Vefsvæði getur notað Bluetooth</translation> +<translation id="489258173289528622">Aðgerðaleysi þegar rafhlöðuorka er notuð</translation> <translation id="4893336867552636863">Þetta mun eyða vefskoðunargögnum varanlega úr þessu tæki.</translation> <translation id="4893522937062257019">Á lásskjánum</translation> <translation id="489454699928748701">Leyfa vefsvæðum að nota hreyfiskynjara</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Virkja villuleitareiginleika</translation> <translation id="5864195618110239517">Nota mælda tengingu</translation> <translation id="5864471791310927901">DHCP-uppfletting mistókst</translation> +<translation id="5864754048328252126">Aðgerðaleysi meðan á hleðslu stendur</translation> <translation id="5865508026715185451">Hlé verður gert á <ph name="APP_NAME" /> fljótlega</translation> <translation id="586567932979200359">Þú ert að keyra <ph name="PRODUCT_NAME" /> af diskmynd þess. Ef þú setur það upp í tölvunni geturðu keyrt það án diskmyndarinnar og tryggt að það sé alltaf uppfært.</translation> <translation id="5865733239029070421">Sendir sjálfkrafa talnagögn um notkun og tilkynningar um hrun til Google</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Festa þessa síðu á upphafsskjánum...</translation> <translation id="6122081475643980456">Tengingunni þinni við internetið er stýrt</translation> <translation id="6122095009389448667">Koma alltaf í veg fyrir að þetta vefsvæði sjái klippiborðið</translation> +<translation id="6122831415929794347">Viltu slökkva á öruggri vefnotkun?</translation> <translation id="6122875415561139701">Skrifaðgerð er ekki leyft í: „<ph name="DEVICE_NAME" />“.</translation> <translation id="6124650939968185064">Eftirfarandi viðbætur reiða sig á þessa viðbót:</translation> <translation id="6124698108608891449">Þetta vefsvæði þarf fleiri heimildir.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Lesa og breyta gögnunum þínum á <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> og <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Myndaskrár</translation> <translation id="6410328738210026208">Skipta um rás og djúphreinsa</translation> +<translation id="6410390304316730527">Örugg vefnotkun verndar þig fyrir tölvuþrjótum sem gætu platað þig til að gera eitthvað hættulegt eins og að setja upp skaðlegan hugbúnað eða gefa upp persónuupplýsingar á borð við aðgangsorð, símanúmer eða kreditkortaupplýsingar. Ef þú slekkur á henni skaltu fara varlega þegar þú skoðar ókunnug eða óáreiðanleg vefsvæði.</translation> <translation id="6410668567036790476">Bæta við leitarvél</translation> <translation id="641081527798843608">Samsvörun viðfangs</translation> <translation id="6412673304250309937">Ber vefslóðir saman við lista yfir óörugg vefsvæði sem er vistaður í Chrome. Ef vefsvæði reynir að stela aðgangsorðinu þínu, eða ef þú sækir skaðlega skrá, gæti Chrome einnig sent vefslóðir í Örugga vefskoðun, þar á meðal hluta af innihaldi síðna.</translation> @@ -5935,6 +5947,7 @@ <translation id="8951256747718668828">Villa kom í veg fyrir að hægt væri að ljúka endurheimt</translation> <translation id="8951465597020890363">Hætta samt í gestastillingu?</translation> <translation id="8952831374766033534">Stillingarvalkostur ekki studdur: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Við hleðslu</translation> <translation id="895347679606913382">Ræsir...</translation> <translation id="8957762313041272117">Skjátextar í rauntíma</translation> <translation id="895944840846194039">JavaScript-minni</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 65c2284..d92ca1b 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -94,6 +94,7 @@ <translation id="1122960773616686544">שם סימניה</translation> <translation id="1124772482545689468">משתמש</translation> <translation id="1125550662859510761">נראה כמו <ph name="WIDTH" /> x <ph name="HEIGHT" /> (במקור)</translation> +<translation id="1126809382673880764">במצב הזה המערכת לא מגינה עליך מפני אתרים, הורדות ותוספים מסוכנים. גלישה בטוחה עדיין תגן עליך בשירותים אחרים של Google שבהם היא זמינה, כמו Gmail והחיפוש.</translation> <translation id="1128109161498068552">אל תאפשר לאף אתר להשתמש בהודעות בלעדיות של המערכת כדי לגשת למכשירי MIDI.</translation> <translation id="1128128132059598906">EAP-TTLS</translation> <translation id="1128591060186966949">עריכת מנוע חיפוש</translation> @@ -185,6 +186,7 @@ <translation id="1235458158152011030">רשתות מוכרות</translation> <translation id="123578888592755962">הדיסק מלא</translation> <translation id="1238191093934674082">VPN פתוח</translation> +<translation id="1239439601391236986">הצגה של הצעות להזנת מידע אישי</translation> <translation id="1239594683407221485">באפליקציה 'קבצים' אפשר לעיין בתוכן של המכשיר.</translation> <translation id="124116460088058876">שפות נוספות</translation> <translation id="1241753985463165747">קרא ושנה את כל הנתונים שלך באתר הנוכחי בעת הקריאה</translation> @@ -301,6 +303,7 @@ <translation id="140723521119632973">הפעלה סלולרית</translation> <translation id="1407489512183974736">חתוך במרכז</translation> <translation id="1408504635543854729">עיין בתוכן של המכשיר באמצעות האפליקציה 'קבצים'. התוכן מוגבל על-ידי מנהל מערכת, ואי אפשר לשנות אותו.</translation> +<translation id="1408980562518920698">ניהול מידע אישי</translation> <translation id="1410197035576869800">סמל האפליקציה</translation> <translation id="1410616244180625362">המשך לאפשר ל-<ph name="HOST" /> לגשת למצלמה שלך</translation> <translation id="1414648216875402825">אתה מעדכן לגרסה לא יציבה של <ph name="PRODUCT_NAME" /> המכילה תכונות שנמצאות בתהליך. ייתכנו קריסות מחשב ובאגים לא צפויים. המשך בזהירות.</translation> @@ -431,6 +434,7 @@ <ph name="EXTENSION_NAME" /></translation> <translation id="1587275751631642843">קונסולת JavaScript&</translation> <translation id="1587907146729660231">יש לגעת בלחצן ההפעלה עם האצבע</translation> +<translation id="1588200577109872591">קלט חכם</translation> <translation id="1588438908519853928">רגיל</translation> <translation id="158849752021629804">יש צורך ברשת ביתית</translation> <translation id="1588870296199743671">פתח קישור באמצעות...</translation> @@ -605,6 +609,11 @@ <translation id="1805888043020974594">שרת הדפסה</translation> <translation id="1805967612549112634">אישור קוד אימות</translation> <translation id="1806335016774576568">מעבר לאפליקציה פתוחה אחרת</translation> +<translation id="1809483812148634490">אפליקציות שהורדת מ-Google Play יימחקו מה-Chromebook הזה. + <ph name="LINE_BREAKS1" /> + ייתכן גם שיימחק תוכן שרכשת, כמו סרטים, תוכניות טלוויזיה, מוזיקה, ספרים או רכישות אחרות מתוך אפליקציות. + <ph name="LINE_BREAKS2" /> + פעולה זו לא משפיעה על אפליקציות או תוכן במכשירים אחרים.</translation> <translation id="1809734401532861917">הוספת הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות שלי אל <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">שירותים</translation> <translation id="18139523105317219">שם צד EDI</translation> @@ -666,6 +675,7 @@ <translation id="1879000426787380528">כניסה בתור</translation> <translation id="1880905663253319515">למחוק את האישור "<ph name="CERTIFICATE_NAME" />"?</translation> <translation id="1884013283844450420">רשת <ph name="NETWORK_INDEX" /> מתוך <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, התחברות</translation> +<translation id="1884705339276589024">שינוי הגודל של כונן Linux</translation> <translation id="1886996562706621347">אפשר לאתרים לבקש להפוך למטפלי ברירת המחדל עבור פרוטוקולים (מומלץ)</translation> <translation id="1887442540531652736">שגיאת כניסה</translation> <translation id="1887597546629269384">יש לומר שוב "Hey Google"</translation> @@ -735,6 +745,7 @@ <translation id="1979280758666859181">אתה עובר לערוץ עם גרסה ישנה יותר של <ph name="PRODUCT_NAME" />. שינוי הערוץ יוחל כאשר גרסת הערוץ תתאים לגרסה המותקנת כעת במכשיר שלך.</translation> <translation id="197989455406964291">KDC לא תומך בסוג ההצפנה</translation> <translation id="1982354452682152483">אין תיאור.</translation> +<translation id="1984417487208496350">ללא הגנה (לא מומלץ)</translation> <translation id="1987317783729300807">חשבונות</translation> <translation id="1989112275319619282">דפדף</translation> <translation id="1990512225220753005">לא להציג קיצורי דרך בדף הזה</translation> @@ -804,6 +815,7 @@ <translation id="2090165459409185032">כדי לשחזר את המידע מהחשבון, עבור אל: google.com/accounts/recovery</translation> <translation id="2090876986345970080">הגדרה של אבטחת מערכת</translation> <translation id="2091887806945687916">צליל</translation> +<translation id="2096478741073211388">הצעות של מידע אישי עוזרות לכתוב מהר יותר בכך שהן מאפשרות להזין את השם, הכתובת או מספר הטלפון שלך בעת הקלדה של מילים ספציפיות. ההצעות הפרטיות והמותאמות אישית עבור החשבון שלך מוצגות רק לך.</translation> <translation id="2096715839409389970">ניקוי קובצי cookie של צד שלישי</translation> <translation id="2097372108957554726">עליך להיכנס מחדש ל-Chrome כדי לרשום מכשירים חדשים</translation> <translation id="2099172618127234427">אתה מאפשר תכונות ניפוי באגים במערכת ההפעלה של Chrome שיגדירו sshd daemon ויאפשרו אתחול מכונני USB.</translation> @@ -820,6 +832,7 @@ <translation id="2114326799768592691">טען מחדש את ה&מסגרת</translation> <translation id="2114896190328250491">צילום מאת <ph name="NAME" /></translation> <translation id="2119349053129246860">פתיחה באמצעות <ph name="APP" /></translation> +<translation id="2119461801241504254">הגלישה הבטוחה פועלת ומגינה עליך מפני אתרים והורדות שעלולים לגרום נזק.</translation> <translation id="2120297377148151361">פעילות ואינטראקציות</translation> <translation id="2120639962942052471">ההרשאה <ph name="PERMISSION" /> נחסמה</translation> <translation id="2121055421682309734">{COUNT,plural, =0{קובצי cookie חסומים}=1{קובצי cookie חסומים, חריג אחד}two{קובצי cookie חסומים, {COUNT} חריגים}many{קובצי cookie חסומים, {COUNT} חריגים}other{קובצי cookie חסומים, {COUNT} חריגים}}</translation> @@ -1383,6 +1396,7 @@ <translation id="2825848369316359348">יש לאתר את השם שמודפס על החלק האחורי של מפתח האבטחה</translation> <translation id="2828650939514476812">התחברות אל רשת Wi-Fi</translation> <translation id="2835294513443818940">לא ניתן להוריד את הקובץ הזה בצורה מאובטחת.</translation> +<translation id="2835547721736623118">שירות של זיהוי דיבור</translation> <translation id="2836269494620652131">קריסה</translation> <translation id="2836635946302913370">הכניסה עם שם משתמש זה הושבתה על ידי מנהל המערכת.</translation> <translation id="283669119850230892">כדי להשתמש ב-<ph name="NETWORK_ID" /> של הרשת, השלם קודם את ההתחברות לאינטרנט, למטה.</translation> @@ -1527,6 +1541,7 @@ <translation id="3019285239893817657">לחצן למעבר אל דף משנה</translation> <translation id="3020183492814296499">קיצורים</translation> <translation id="3020990233660977256">מספר סידורי: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">בזמן שימוש בסוללה</translation> <translation id="3021066826692793094">פרפר</translation> <translation id="3021678814754966447">&הצג את מקור המסגרת</translation> <translation id="3022978424994383087">ההודעה שלך לא ברורה.</translation> @@ -1888,6 +1903,7 @@ <translation id="3515983984924808886">יש לגעת במפתח האבטחה פעם נוספת כדי לאשר את האיפוס. כל המידע שמאוחסן במפתח האבטחה יימחק, כולל קוד האימות.</translation> <translation id="3518985090088779359">בסדר, מקובל עליי</translation> <translation id="351952459507671940">הוספה לקבוצה חדשה</translation> +<translation id="3521606918211282604">שינוי גודל הכונן</translation> <translation id="3523642406908660543">שאל כשאתר רוצה להשתמש בפלאגין כדי לגשת אל המחשב שלך (מומלץ)</translation> <translation id="3524965460886318643">יצוא הפעילויות</translation> <translation id="3526034519184079374">אי אפשר לקרוא את נתוני האתר או לשנות אותם</translation> @@ -1975,6 +1991,7 @@ <translation id="3629631988386925734">כדי להפעיל את Smart Lock צריך להזין סיסמה. בפעם הבאה, הטלפון יבטל את הנעילה של <ph name="DEVICE_TYPE" />. אפשר להשבית את Smart Lock דרך ההגדרות.</translation> <translation id="3630132874740063857">הטלפון שלך</translation> <translation id="3630995161997703415">כדי שניתן יהיה תמיד להשתמש באתר הזה יש להוסיף אותו למדף</translation> +<translation id="3633309367764744750">אחזור מראש מידע של דפים, כולל דפים שעדיין לא נכנסת אליהם. המידע המאוחזר יכול לכלול קובצי cookie, אם התרת קבצים כאלה.</translation> <translation id="3634507049637220048">רשת <ph name="NETWORK_INDEX" /> מתוך <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, הרשת מנוהלת על ידי מנהל המערכת שלך</translation> <translation id="3635241501480133979">הנתונים האלה מפרים את מדיניות האבטחה של הארגון שלך ולא ניתן לשחרר אותם.</translation> <translation id="3635353578505343390">שליחת משוב ל-Google</translation> @@ -2721,6 +2738,7 @@ <translation id="4633757335284074492">גיבוי ב-Google Drive. אפשר לשחזר נתונים או להחליף מכשיר בכל שלב. הגיבוי הזה כולל נתוני אפליקציות. הגיבויים מועלים ל-Google ומוצפנים באמצעות סיסמת חשבון Google של הילד/ה שלך.</translation> <translation id="4634771451598206121">היכנס שוב...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> לא זמין למשתמשים במצב אורח.</translation> +<translation id="4635444580397524003">גיבוי Linux שוחזר בהצלחה.</translation> <translation id="4636930964841734540">מידע</translation> <translation id="4637083375689622795">פעולות נוספות, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">הפעלה של ניפוי באגים באמצעות ADB</translation> @@ -2896,6 +2914,7 @@ <translation id="4890773143211625964">הצג אפשרויות מדפסת מתקדמות</translation> <translation id="4891089016822695758">פורום ביטא</translation> <translation id="4892229439761351791">לאתר יש הרשאה להשתמש ב-Bluetooth</translation> +<translation id="489258173289528622">מה לעשות בעת חוסר פעילות בזמן שימוש בסוללה</translation> <translation id="4893336867552636863">הפעולה הזו תמחק לצמיתות את נתוני הגלישה שלך במכשיר הזה.</translation> <translation id="4893522937062257019">במסך הנעילה</translation> <translation id="489454699928748701">אתרים יוכלו להשתמש בחיישני תנועה</translation> @@ -3602,6 +3621,7 @@ <translation id="5863445608433396414">הפעל תכונות ניפוי באגים</translation> <translation id="5864195618110239517">שימוש בחיבור עם חיוב לפי שימוש בנתונים</translation> <translation id="5864471791310927901">חיפוש DHCP נכשל</translation> +<translation id="5864754048328252126">מה לעשות בעת חוסר פעילות בזמן טעינה</translation> <translation id="5865508026715185451">האפליקציה <ph name="APP_NAME" /> תושהה בקרוב</translation> <translation id="586567932979200359">אתה מפעיל את <ph name="PRODUCT_NAME" /> מתמונת הדיסק שלו. התקנתו במחשב מאפשרת לך להפעיל אותו ללא תמונת הדיסק, ומבטיחה שיישאר מעודכן.</translation> <translation id="5865733239029070421">שליחת דוחות קריסה וסטטיסטיקת שימוש אל Google באופן אוטומטי</translation> @@ -3801,6 +3821,7 @@ <translation id="6120205520491252677">הצמד דף זה למסך הפתיחה...</translation> <translation id="6122081475643980456">החיבור שלך לאינטרנט נשלט על ידי גורם כלשהו</translation> <translation id="6122095009389448667">המשך חסימת הגישה של האתר הזה ללוח</translation> +<translation id="6122831415929794347">להשבית את 'גלישה בטוחה'?</translation> <translation id="6122875415561139701">פעולת כתיבה אסורה במכשיר: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">התוספים הבאים תלויים בתוסף הזה:</translation> <translation id="6124698108608891449">האתר הזה צריך הרשאות נוספות.</translation> @@ -3929,6 +3950,7 @@ <translation id="6298962879096096191">התקן אפליקציות ל-Android באמצעות Google Play</translation> <translation id="630065524203833229">צ&א</translation> <translation id="6300718114348072351">לא ניתן היה להגדיר את <ph name="PRINTER_NAME" /> באופן אוטומטי. יש לקבוע את ההגדרות המתקדמות של המדפסת. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation> +<translation id="630292539633944562">הצעות מידע אישי</translation> <translation id="6305607932814307878">מדיניות גלובלית:</translation> <translation id="6307990684951724544">המערכת עמוסה</translation> <translation id="6308493641021088955">הכניסה מבוצעת בעזרת <ph name="EXTENSION_NAME" /></translation> @@ -4003,10 +4025,12 @@ <translation id="6408118934673775994">לקרוא ולשנות את הנתונים שלך ב-<ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> וב-<ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">קובצי תמונה</translation> <translation id="6410328738210026208">מעבר לערוץ אחר וביצוע Powerwash</translation> +<translation id="6410390304316730527">גלישה בטוחה מגינה עליך מפני תוקפים שעשויים להטעות אותך כדי לגרום לך לבצע פעולה מסוכנת. למשל, התקנה של תוכנה זדונית או חשיפת מידע אישי, כמו סיסמאות, מספרי טלפון או כרטיסי אשראי. אם תשביתו את הגלישה הבטוחה, יש לנקוט זהירות בעת הגלישה באתרים לא מוכרים או בעלי מוניטין בעייתי.</translation> <translation id="6410668567036790476">הוספת מנוע חיפוש</translation> <translation id="641081527798843608">התאמת נושא</translation> <translation id="6412673304250309937">המערכת בודקת כתובות URL ששמורות ב-Chrome ומכילות רשימות של אתרים לא בטוחים. אם אתר מסוים מנסה לגנוב סיסמה או אם המערכת מזהה הורדה של קובץ מזיק, Chrome עשוי גם לשלוח כתובות URL לבדיקה באמצעות 'גלישה בטוחה'. הנתונים שנשלחים לבדיקה כוללים ביטים מהתוכן של הדף.</translation> <translation id="6412931879992742813">חלון חדש של גלישה בסתר</translation> +<translation id="6413591858632097328">הפעולה הזו תמחק את כל הנתונים וקובצי ה-cookie שאוחסנו על-ידי <ph name="ORIGIN_NAME" /> ועל-ידי האפליקציות שהותקנו ממקור זה.</translation> <translation id="641469293210305670">התקנת עדכונים ואפליקציות</translation> <translation id="6414888972213066896">שאלת אחד מהוריך אם אתה יכול לבקר באתר הזה</translation> <translation id="6415900369006735853">חיבור לאינטרנט דרך הטלפון</translation> @@ -5275,7 +5299,7 @@ <translation id="8107015733319732394">מתקין את חנות Google Play במכשיר <ph name="DEVICE_TYPE" />. ייתכן שההתקנה תימשך כמה דקות.</translation> <translation id="8108526232944491552">{COUNT,plural, =0{אין קובצי cookie של צד שלישי}=1{קובץ cookie אחד של צד שלישי נחסם}two{# קובצי cookie של צד שלישי נחסמו}many{# קובצי cookie של צד שלישי נחסמו}other{# קובצי cookie של צד שלישי נחסמו}}</translation> <translation id="810875025413331850">לא נמצאו מכשירים קרובים.</translation> -<translation id="8114199541033039755">במצב טאבלט אפשר להשתמש בלחצנים כדי לעבור אל דף הבית, לחזור לדף הקודם ולעבור בין אפליקציות. האפשרות מופעלת כשמפעילים את ChromeVox או את 'קליקים אוטומטיים'.</translation> +<translation id="8114199541033039755">במצב טאבלט אפשר להשתמש בלחצנים כדי לעבור אל דף הבית, לחזור לדף הקודם ולעבור בין אפליקציות. האפשרות מופעלת כשמפעילים את ChromeVox או את 'לחיצות אוטומטיות'.</translation> <translation id="8114875720387900039">פיצול אופקי</translation> <translation id="8116972784401310538">&מנהל הסימניות</translation> <translation id="8117620576188476503">מגש הסטטוס מאפשר לך לנהל חיבורים, עדכונים והגדרות. כדי להגיע לכאן בעזרת המקלדת יש להקיש Alt + Shift + S.</translation> @@ -5923,6 +5947,7 @@ <translation id="8951256747718668828">אירעה שגיאה ולא ניתן להשלים את השחזור</translation> <translation id="8951465597020890363">לצאת בכל זאת ממצב אורח?</translation> <translation id="8952831374766033534">אפשרות ההגדרה לא נתמכת: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">בזמן טעינה</translation> <translation id="895347679606913382">מתחיל...</translation> <translation id="8957762313041272117">כתוביות מיידיות</translation> <translation id="895944840846194039">זיכרון JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index c0bdac5..bb423dc 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -3941,7 +3941,7 @@ <translation id="6298962879096096191">Google Play を使用して Android アプリをインストールします</translation> <translation id="630065524203833229">終了(&X)</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> を自動的に設定できませんでした。プリンタの詳細設定を指定してください。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation> -<translation id="630292539633944562">個人情報の候補表示</translation> +<translation id="630292539633944562">個人情報の候補</translation> <translation id="6305607932814307878">グローバル ポリシー:</translation> <translation id="6307990684951724544">システムがビジー状態です</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> によるログイン</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 3e8e0207..643347b 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1506,7 +1506,7 @@ <translation id="2987620471460279764">Басқа құрылғылардан келген мәтін</translation> <translation id="2989474696604907455">тіркелмеген</translation> <translation id="2989786307324390836">DER кодталған бинарлы, бір сертификат</translation> -<translation id="2992931425024192067">Барлық хабарландырулар мазмұнын көрсету</translation> +<translation id="2992931425024192067">Хабарландыруды толық көрсету</translation> <translation id="2993517869960930405">Қолданба ақпараты</translation> <translation id="2996286169319737844">Деректер өзіңіздің синхрондау құпия фразаңызбен шифрланады. Google Pay қызметіндегі төлеу әдістері мен мекенжайлар құпия фразамен шифрланбайды.</translation> <translation id="2996722619877761919">Екі бетіне басып шығару (кітап)</translation> @@ -2431,7 +2431,7 @@ <translation id="4194595472342532425">Конфигурациядағы қатеге байланысты Plugin VM реттелмеді. Ұйымыңыздың құрылғы әкімшісіне хабарласыңыз. Қате коды: <ph name="ERROR_CODE" />.</translation> <translation id="4195643157523330669">Жаңа қойындыда ашу</translation> <translation id="4195814663415092787">Тоқтаған жерден жалғастыру</translation> -<translation id="4198146608511578238">Google Assistant қолданбасына команда беру үшін жай ғана "Launcher" белгішесін басып ұстап тұрыңыз.</translation> +<translation id="4198146608511578238">Google Assistant қолданбасына пәрмен беру үшін іске қосу құралының белгішесін басып ұстап тұрыңыз.</translation> <translation id="4200689466366162458">Арнаулы сөздер</translation> <translation id="4200983522494130825">Жаңа &қойынды</translation> <translation id="4201546031411513170">Синхрондалатын мазмұнды кез келген уақытта "Параметрлер" бөлімінде таңдай аласыз.</translation> @@ -5975,7 +5975,7 @@ <translation id="9009369504041480176">Жүктелуде (<ph name="PROGRESS_PERCENT" />%)…</translation> <translation id="9011163749350026987">Белгішені әрқашан көрсету</translation> <translation id="9013707997379828817">Әкімші құрылғыны қалпына келтірді. Маңызды файлдарды сақтап, қайта қосыңыз. Құрылғыдағы барлық деректер жоғалады.</translation> -<translation id="901668144954885282">Google Drive жадында сақтық көшірме жасау</translation> +<translation id="901668144954885282">Google Drive-та сақтық көшірме жасау</translation> <translation id="9018218886431812662">Орнату аяқталды</translation> <translation id="901834265349196618">электрондық пошта</translation> <translation id="9019062154811256702">Автотолтыру параметрлерін оқып, өзгерту</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index d382c45a..bd9ff6b 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -830,7 +830,7 @@ <translation id="2114326799768592691">프레임 새로고침(&F)</translation> <translation id="2114896190328250491">사진 제공: <ph name="NAME" /></translation> <translation id="2119349053129246860"><ph name="APP" />에서 열기</translation> -<translation id="2119461801241504254">세이프 브라우징이 사용 중이며 유해한 사이트와 다운로드를 차단하고 있습니다.</translation> +<translation id="2119461801241504254">세이프 브라우징을 사용 중이며 유해한 사이트와 다운로드를 차단하고 있습니다.</translation> <translation id="2120297377148151361">활동 및 상호작용</translation> <translation id="2120639962942052471"><ph name="PERMISSION" /> 권한이 차단됨</translation> <translation id="2121055421682309734">{COUNT,plural, =0{쿠키가 차단됨}=1{쿠키가 차단됨, 예외 1개}other{쿠키가 차단됨, 예외 {COUNT}개}}</translation> @@ -4018,7 +4018,7 @@ <translation id="641081527798843608">주제 일치</translation> <translation id="6412673304250309937">Chrome에 저장된 안전하지 않은 사이트 목록을 사용하여 URL을 검사합니다. 사이트에서 사용자의 비밀번호를 도용하려고 하거나 사용자가 유해한 파일을 다운로드하는 경우, Chrome에서 페이지 콘텐츠 일부를 비롯한 URL을 세이프 브라우징 서비스에 보낼 수 있습니다.</translation> <translation id="6412931879992742813">새 시크릿 창</translation> -<translation id="6413591858632097328"><ph name="ORIGIN_NAME" />과(와) 이를 통해 설치된 앱에서 저장한 모든 데이터와 쿠키가 삭제됩니다.</translation> +<translation id="6413591858632097328"><ph name="ORIGIN_NAME" /> 및 설치된 앱에서 저장한 모든 데이터와 쿠키가 삭제됩니다.</translation> <translation id="641469293210305670">업데이트 및 앱 설치</translation> <translation id="6414888972213066896">이 사이트를 방문해도 괜찮은지 부모님께 문의했습니다.</translation> <translation id="6415900369006735853">휴대전화를 통해 인터넷에 연결합니다.</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 79d73747..ea62db0 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -610,6 +610,11 @@ <translation id="1805888043020974594">ເຊີບເວີການພິມ</translation> <translation id="1805967612549112634">ຢືນຢັນ PIN</translation> <translation id="1806335016774576568">ສະຫຼັບເປັນແອັບອື່ນທີ່ເປີດຢູ່</translation> +<translation id="1809483812148634490">ແອັບທີ່ທ່ານດາວໂຫຼດຈາກ Google Play ຈະຖືກລຶບອອກຈາກ Chromebook ນີ້. + <ph name="LINE_BREAKS1" /> + ເນື້ອຫາທີ່ທ່ານໄດ້ຊື້ ເຊັ່ນ: ໜັງ, ລາຍການໂທລະພາບ, ເພງ, ປຶ້ມ ຫຼື ການຊື້ໃນແອັບອື່ນໆ ອາດຈະຖືກລຶບອອກເຊັ່ນກັນ. + <ph name="LINE_BREAKS2" /> + ນີ້ບໍ່ມີຜົນຕໍ່ກັບແອັບ ຫຼື ເນື້ອຫາຢູ່ໃນອຸປະກອນອື່ນ.</translation> <translation id="1809734401532861917">ເພີ່ມບຸກມາກ, ປະຫວັດ, ລະຫັດຜ່ານ ແລະ ການຕັ້ງຄ່າອື່ນຂອງຂ້ອຍໃສ່ <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">ການບໍລິການ</translation> <translation id="18139523105317219">ຊື່ຝ່າຍ EDI</translation> @@ -1391,6 +1396,7 @@ <translation id="2825848369316359348">ຊອກຊື່ທີ່ພິມໄວ້ຢູ່ດ້ານຫຼັງຂອງກະແຈຄວາມປອດໄພຂອງທ່ານ</translation> <translation id="2828650939514476812">ເຊື່ອມຕໍ່ກັບເຄືອຂ່າຍ Wi-Fi</translation> <translation id="2835294513443818940">ບໍ່ສາມາດດາວໂຫຼດໄຟລ໌ນີ້ໄດ້ຢ່າງປອດໄພ.</translation> +<translation id="2835547721736623118">ການບໍລິການຈຳແນກສຽງເວົ້າ</translation> <translation id="2836269494620652131">ການຂັດຂ້ອງ</translation> <translation id="2836635946302913370">ການລົງຊື່ເຂົ້າໃຊ້ດ້ວຍຊື່ຜູ້ໃຊ້ນີ້ຖືກປິດໃຊ້ງານໂດຍຜູ້ຄວບຄຸມຂອງທ່ານ.</translation> <translation id="283669119850230892">ເພື່ອໃຊ້ເຄືອຂ່າຍ <ph name="NETWORK_ID" />, ກ່ອນອື່ນໝົດຕ້ອງເຮັດການເຊື່ອມຕໍ່ກັບອິນເຕີເນັດຢູ່ລຸ່ມນີ້.</translation> @@ -1535,6 +1541,7 @@ <translation id="3019285239893817657">ປຸ່ມໜ້າຍ່ອຍ</translation> <translation id="3020183492814296499">ທາງລັດ</translation> <translation id="3020990233660977256">ເລກລໍາດັບ: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">ໃນເວລາໃຊ້ແບັດເຕີຣີ</translation> <translation id="3021066826692793094">ແມງກະເບື້ອ</translation> <translation id="3021678814754966447">ເບິ່ງແຫຼ່ງທີ່ມາຂອບ</translation> <translation id="3022978424994383087">ບໍ່ເຂົ້າໃຈສິ່ງນັ້ນ.</translation> @@ -2731,6 +2738,7 @@ <translation id="4633757335284074492">ສຳຮອງຂໍ້ມູນໄວ້ໃນ Google Drive ກູ້ຄືນຂໍ້ມູນໄດ້ຢ່າງງ່າຍດາຍ ຫຼື ປ່ຽນອຸປະກອນໄດ້ທຸກເວລາ. ການສຳຮອງຂໍ້ມູນີ້ຮວມເອົາຂໍ້ມູນແອັບ. ຂໍ້ມູນທີ່ສຳຮອງໄວ້ຂອງທ່ານຖືກອັບໂຫຼດໄວ້ໃນ Google ແລະ ເຂົ້າລະຫັດໄວ້ໂດຍໃຊ້ລະຫັດຜ່ານບັນຊີ Google ຂອງລູກທ່ານ.</translation> <translation id="4634771451598206121">ລົງຊື່ເຂົ້າໃຊ້ອີກ...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> ບໍ່ສາມາດໃຊ້ໄດ້ຕໍ່ກັບຜູ້ໃຊ້ທີ່ເປັນແຂກ.</translation> +<translation id="4635444580397524003">ກູ້ຄືນການສຳຮອງຂໍ້ມູນ Linux ສຳເລັດແລ້ວ.</translation> <translation id="4636930964841734540">ຂໍ້ມູນ</translation> <translation id="4637083375689622795">ການດຳເນີນການເພີ່ມເຕີມ, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">ເປີດນຳໃຊ້ການດີບັກ ADB</translation> @@ -2906,6 +2914,7 @@ <translation id="4890773143211625964">ສະແດງຕົວເລືອກເຄື່ອງພິມຂັ້ນສູງ</translation> <translation id="4891089016822695758">ເວທີເບຕ້າ</translation> <translation id="4892229439761351791">ເວັບໄຊສາມາດໃຊ້ Bluetooth ໄດ້</translation> +<translation id="489258173289528622">ການດຳເນີນການທີ່ບໍ່ເຄື່ອນໄຫວໃນຂະນະທີ່ໃຊ້ແບັດເຕີຣີ</translation> <translation id="4893336867552636863">ອັນນີ້ຈະລຶບຂໍ້ມູນການທ່ອງເນັດຂອງທ່ານໄປຈາກອຸປະກອນນີ້ຖາວອນ.</translation> <translation id="4893522937062257019">ໃນໜ້າຈໍລັອກ</translation> <translation id="489454699928748701">ອະນຸຍາດໃຫ້ເວັບໄຊໃຊ້ເຊັນເຊີກວດຈັບການເຄື່ອນໄຫວ</translation> @@ -3612,6 +3621,7 @@ <translation id="5863445608433396414">ເປີດໃຊ້ງານຄຸນສົມບັດແກ້ໄຂບັນຫາ</translation> <translation id="5864195618110239517">ໃຊ້ການເຊື່ອມຕໍ່ແບບວັດແທກປະລິມານອິນເຕີເນັດ</translation> <translation id="5864471791310927901">ຊອກຫາ DHCP ບໍ່ສໍາເລັດ</translation> +<translation id="5864754048328252126">ການດຳເນີນການເວລາບໍ່ນຳໃຊ້ເຄື່ອງໃນຂະນະທີ່ສາກ</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> ຈະຢຸດຊົ່ວຄາວໃນໄວໆນີ້</translation> <translation id="586567932979200359">ທ່ານກໍາລັງແລ່ນ <ph name="PRODUCT_NAME" /> ຈາກຮູບແຜ່ນດິສກ໌ຂອງມັນ. ການຕິດຕັ້ງມັນຢູ່ໃນຄອມພິວເຕີຂອງທ່ານເຮັດໃຫ້ແລ່ນມັນໄດ້ໂດຍບໍ່ຕ້ອງມີຮູບແຜ່ນດິສກ໌ໄດ້, ແລະຮັບປະກັນໃຫ້ມັນອັບເດດຢູ່.</translation> <translation id="5865733239029070421">ສົ່ງສະຖິຕິການໃຊ້ ແລະ ລາຍງານການຂັດຂ້ອງໃຫ້ Google ໂດຍອັດຕະໂນມັດ</translation> @@ -3811,6 +3821,7 @@ <translation id="6120205520491252677">ປັກໝຸດຫນ້ານີ້ເພື່ອເລີ່ມຕົ້ນຫນ້າຈໍ...</translation> <translation id="6122081475643980456">ການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານກໍາລັງຖືກຄວບຄຸມ</translation> <translation id="6122095009389448667">ສືບຕໍ່ບລັອກບໍ່ໃຫ້ເວັບໄຊເຫັນຄລິບບອດ</translation> +<translation id="6122831415929794347">ປິດ Safe Browsing ບໍ?</translation> <translation id="6122875415561139701">ການດຳເນີນການ ຂຽນ ບໍ່ໄດ້ຮັບອະນຸຍາດໃນ: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">ສ່ວນຂະຫຍາຍຕໍ່ໄປນີ້ຂຶ້ນກັບສ່ວນຂະຫຍາຍນີ້:</translation> <translation id="6124698108608891449">ເວັບໄຊນີ້ຕ້ອງການມີການອະນຸຍາດເພີ່ມເຕີມ.</translation> @@ -4014,6 +4025,7 @@ <translation id="6408118934673775994">ອ່ານ ແລະປ່ຽນແປງຂໍ້ມູນຂອງທ່ານຢູ່ເທິງ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, ແລະ <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">ໄຟລ໌ຮູບ</translation> <translation id="6410328738210026208">ປ່ຽນຊ່ອງ ແລະ Powerwash</translation> +<translation id="6410390304316730527">Safe Browsing ປົກປ້ອງທ່ານຈາກຜູ້ໂຈມຕີທີ່ອາດຈະຫຼອກໃຫ້ທ່ານເຮັດບາງຢ່າງທີ່ອັນຕະລາຍ ເຊັ່ນ: ຕິດຕັ້ງຊອບແວອັນຕະລາຍ ຫຼື ເປີດເຜີຍຂໍ້ມູນສ່ວນຕົວ ເຊັ່ນ: ລະຫັດຜ່ານ, ເບີໂທລະສັບ ຫຼື ບັດເຄຣດິດ. ຖ້າທ່ານປິດມັນ, ກະລຸນາລະມັດລະວັງໃນເວລາເຂົ້າເບິ່ງເວັບໄຊທີ່ບໍ່ຄຸ້ນເຄີຍ ຫຼື ບໍ່ເປັນທີ່ຮູ້ຈັກ.</translation> <translation id="6410668567036790476">ເພີ່ມໂປຣແກຣມຊອກຫາ</translation> <translation id="641081527798843608">ຫົວຂໍ້ກົງກັນ</translation> <translation id="6412673304250309937">ກວດສອບ URL ກັບລາຍການເວັບໄຊທີ່ບໍ່ປອດໄພທີ່ເກັບໄວ້ໃນ Chrome. ຖ້າເວັບໄຊພະຍາຍາມລັກເອົາລະຫັດຜ່ານຂອງທ່ານ ຫຼື ເມື່ອທ່ານດາວໂຫຼດໄຟລ໌ອັນຕະລາຍ, Chrome ອາດຈະສົ່ງ URL, ຮວມທັງເນື້ອຫາບາງສ່ວນໃນໜ້າໄປໃຫ້ Safe Browsing.</translation> @@ -5932,6 +5944,7 @@ <translation id="8951256747718668828">ການກູ້ຄືນຂໍ້ມູນບໍ່ສຳເລັດເນື່ອງຈາກຂໍ້ຜິດພາດ</translation> <translation id="8951465597020890363">ແນວໃດກໍອອກຈາກໂໝດແຂກບໍ?</translation> <translation id="8952831374766033534">ບໍ່ຮອງຮັບຕົວເລືອກການກຳນົດຄ່າ: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">ໃນຂະນະທີ່ສາກຢູ່</translation> <translation id="895347679606913382">ກໍາລັງເລີ່ມຕົ້ນ...</translation> <translation id="8957762313041272117">ຄຳບັນຍາຍສົດ</translation> <translation id="895944840846194039">ຄວາມຈໍາ JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 789f28a9..8fc673ce 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Drukas serveris</translation> <translation id="1805967612549112634">Apstipriniet PIN</translation> <translation id="1806335016774576568">Pāriešana uz citu atvērtu lietotni</translation> +<translation id="1809483812148634490">Pakalpojumā Google Play lejupielādētās lietotnes tiks izdzēstas no šī Chromebook datora. + <ph name="LINE_BREAKS1" /> + Var tikt izdzēsts arī jūsu iegādātais saturs, piemēram, filmas, TV pārraides, mūzika, grāmatas vai citi lietotnē veiktie pirkumi. + <ph name="LINE_BREAKS2" /> + Citās ierīcēs saglabātās lietotnes un saturs netiks ietekmēts.</translation> <translation id="1809734401532861917">Pievienot manas grāmatzīmes, vēsturi, paroles un citus iestatījumus kontam <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Pakalpojumi</translation> <translation id="18139523105317219">EDI puses nosaukums</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Atrodiet nosaukumu drošības atslēgas aizmugurē</translation> <translation id="2828650939514476812">Izveidojiet savienojumu ar Wi-Fi tīklu</translation> <translation id="2835294513443818940">Šo failu nevar droši lejupielādēt.</translation> +<translation id="2835547721736623118">Runas atpazīšanas pakalpojums</translation> <translation id="2836269494620652131">Avārija</translation> <translation id="2836635946302913370">Administrators ir atspējojis iespēju pierakstīties, izmantojot šo lietotājvārdu.</translation> <translation id="283669119850230892">Lai izmantotu tīklu <ph name="NETWORK_ID" />, vispirms pabeidziet savienojuma izveidi ar internetu tālāk.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Apakšlapas poga</translation> <translation id="3020183492814296499">Īsinājumtaustiņi</translation> <translation id="3020990233660977256">Sērijas numurs: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Izmantojot akumulatoru</translation> <translation id="3021066826692793094">Tauriņš</translation> <translation id="3021678814754966447">Skatīt rāmja a&votu</translation> <translation id="3022978424994383087">Nesapratu.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Datu dublēšana Google diskā. Varēsiet jebkurā laikā ērti atjaunot datus vai mainīt ierīci. Dublējumā ir ietverti arī lietotņu dati. Dublējumi tiek augšupielādēti Google serveros un tiek šifrēti, izmantojot jūsu bērna Google konta paroli.</translation> <translation id="4634771451598206121">Pierakstīties vēlreiz...</translation> <translation id="4635398712689569051">Lapa “<ph name="PAGE_NAME" />” nav pieejama viesa režīma lietotājiem.</translation> +<translation id="4635444580397524003">Linux dublējums ir sekmīgi atjaunots.</translation> <translation id="4636930964841734540">Informācija</translation> <translation id="4637083375689622795">Citas darbības (<ph name="EMAIL" />)</translation> <translation id="4638930039313743000">Vai iespējot ADB atkļūdošanu</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Rādīt printera papildiespējas</translation> <translation id="4891089016822695758">Beta versijas forums</translation> <translation id="4892229439761351791">Vietne var izmantot Bluetooth savienojumu</translation> +<translation id="489258173289528622">Darbība neaktivitātes dēļ, izmantojot akumulatoru</translation> <translation id="4893336867552636863">Veicot šo darbību, no šīs ierīces tiks neatgriezeniski izdzēsti jūsu pārlūkošanas dati.</translation> <translation id="4893522937062257019">Bloķēšanas ekrānā</translation> <translation id="489454699928748701">Ļaut vietnēm izmantot kustību sensorus</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Iespējot atkļūdošanas funkcijas</translation> <translation id="5864195618110239517">Izmantot maksas savienojumu</translation> <translation id="5864471791310927901">DHCP uzmeklēšana neizdevās</translation> +<translation id="5864754048328252126">Darbība neaktivitātes dēļ uzlādes laikā</translation> <translation id="5865508026715185451">Lietotnes <ph name="APP_NAME" /> darbība drīz tiks apturēta.</translation> <translation id="586567932979200359">Jūs izpildāt <ph name="PRODUCT_NAME" /> no diska attēla. Instalējot datorā, varēsiet to izpildīt bez diska attēla, un tiks nodrošināta tā atjaunināšana.</translation> <translation id="5865733239029070421">Automātiski sūtīt lietojuma statistiku un avāriju pārskatus Google serveriem</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Piespraust šo lapu sākuma ekrānam...</translation> <translation id="6122081475643980456">Jūsu interneta savienojums tiek pārvaldīts</translation> <translation id="6122095009389448667">Turpināt bloķēt šīs vietnes piekļuvi starpliktuves satura skatīšanai</translation> +<translation id="6122831415929794347">Vai vēlaties izslēgt drošu pārlūkošanu?</translation> <translation id="6122875415561139701">Rakstīšanas darbība nav atļauta šajā ierīcē: “<ph name="DEVICE_NAME" />”.</translation> <translation id="6124650939968185064">Tālāk norādītie paplašinājumi ir atkarīgi no šī paplašinājuma:</translation> <translation id="6124698108608891449">Šai vietnei ir nepieciešamas citas atļaujas.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Lasīt un mainīt jūsu datus vietnēs <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> un <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Attēlu faili</translation> <translation id="6410328738210026208">Mainīt kanālu un Powerwash</translation> +<translation id="6410390304316730527">Izmantojot drošu pārlūkošanu, jūs iegūstat aizsardzību pret uzbrucējiem, kuri varētu mudināt jūs veikt bīstamas darbības, piemēram, instalēt ļaunprātīgu programmatūru vai atklāt personas informāciju — paroles, tālruņa numurus, kredītkaršu datus u.tml. Ja izslēgsiet drošu pārlūkošanu, ievērojiet piesardzību, pārlūkojot nepazīstamas vietnes vai vietnes ar sliktu reputāciju.</translation> <translation id="6410668567036790476">Meklētājprogrammas pievienošana</translation> <translation id="641081527798843608">Temata atbilstība</translation> <translation id="6412673304250309937">Vietrāži URL tiek pārbaudīti, salīdzinot ar nedrošu vietņu sarakstu, kas glabājas pārlūkprogrammā Chrome. Ja kādā vietnē tiek mēģināts nozagt jūsu paroli vai ja jūs lejupielādējat kaitīgu failu, Chrome var nosūtīt attiecīgo URL un lapas satura fragmentus uz funkciju Droša pārlūkošana.</translation> @@ -5935,6 +5947,7 @@ <translation id="8951256747718668828">Kļūdas dēļ neizdevās veikt atjaunošanu</translation> <translation id="8951465597020890363">Vai tik un tā iziet no viesa režīma?</translation> <translation id="8952831374766033534">Konfigurācijas opcija netiek atbalstīta: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Uzlādes laikā</translation> <translation id="895347679606913382">Sākums...</translation> <translation id="8957762313041272117">Subtitri reāllaikā</translation> <translation id="895944840846194039">JavaScript atmiņa</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 7fdf85dff..5fffebe 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -1986,7 +1986,7 @@ <translation id="3629631988386925734">Внесете ја вашата лозинка за да овозможите Smart Lock. Следниот пат, телефонот ќе го отклучи вашиот <ph name="DEVICE_TYPE" />. Smart Lock може да се исклучи во „Поставки“.</translation> <translation id="3630132874740063857">Вашиот телефон</translation> <translation id="3630995161997703415">За да го користите во секое време, додајте го сајтов на полицата</translation> -<translation id="3633309367764744750">Однапред чита податоци од страниците, вклучително и од страници што сѐ уште не сте ги посетиле. Вчитаните податоци може да опфаќаат и колачиња ако дозволувате колачиња.</translation> +<translation id="3633309367764744750">Однапред чита податоци од страниците, вклучително и од страници што сѐ уште не сте ги посетиле. Вчитаните податоци може да опфаќаат и колачиња ако сте ги дозволиле.</translation> <translation id="3634507049637220048">Мрежа <ph name="NETWORK_INDEX" /> од <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, управувана од администраторот, детали</translation> <translation id="3635241501480133979">Овие податоци ги прекршуваат безбедносните правила на вашата организација и не може да се пуштат.</translation> <translation id="3635353578505343390">Испратете повратни информации до Google</translation> @@ -4020,7 +4020,7 @@ <translation id="641081527798843608">Совпаѓање на предмети</translation> <translation id="6412673304250309937">Ги проверува URL-адресите во список со небезбедни сајтови меморирани во Chrome. Ако некој сајт се обиде да ви ја украде лозинката или кога ќе преземете штетна датотека, Chrome може да испрати и URL-адреси, вклучувајќи и делови од содржините на страницата, во „Безбедно прелистување“.</translation> <translation id="6412931879992742813">Нов инкогнито прозорец</translation> -<translation id="6413591858632097328">Ова ќе ги избрише сите податоци и колачиња складирани од <ph name="ORIGIN_NAME" /> и инсталираните апликации.</translation> +<translation id="6413591858632097328">Ова ќе ги избрише сите податоци и колачиња складирани од <ph name="ORIGIN_NAME" /> и нејзините инсталирани апликации.</translation> <translation id="641469293210305670">Инсталирајте ажурирања и апликации</translation> <translation id="6414888972213066896">Го прашавте родителот дали е во ред да го посетите сајтов</translation> <translation id="6415900369006735853">Поврзете се на интернет преку телефонот</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index ecec3a3..91b80fb 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -810,7 +810,7 @@ <translation id="2090165459409185032">അക്കൗണ്ട് വിവരങ്ങൾ വീണ്ടെടുക്കാൻ, ഇതിലേക്ക് പോകുക: google.com/accounts/recovery</translation> <translation id="2090876986345970080">സിസ്റ്റം സുരക്ഷ ക്രമീകരണങ്ങള്</translation> <translation id="2091887806945687916">ശബ്ദം</translation> -<translation id="2096478741073211388">ചില നിർദ്ദിഷ്ട പദങ്ങൾ ടൈപ്പ് ചെയ്യുമ്പോൾ നിങ്ങളുടെ പേരോ വിലാസമോ ഫോൺ നമ്പറോ നിർദ്ദേശിച്ച് വേഗത്തിൽ എഴുതാൻ വ്യക്തിപര വിവര നിർദ്ദേശങ്ങൾ നിങ്ങളെ സഹായിക്കുന്നു. നിങ്ങളുടെ അക്കൗണ്ടിനുള്ള സ്വകാര്യവും വ്യക്തിപരമാക്കിയതുമായ നിർദ്ദേശങ്ങൾ നിങ്ങൾ മാത്രം കാണുന്നു.</translation> +<translation id="2096478741073211388">ചില നിർദ്ദിഷ്ട പദങ്ങൾ ടൈപ്പ് ചെയ്യുമ്പോൾ നിങ്ങളുടെ പേരോ വിലാസമോ ഫോൺ നമ്പറോ നിർദ്ദേശിച്ച് വേഗത്തിൽ എഴുതാൻ വ്യക്തിപര വിവര നിർദ്ദേശങ്ങൾ നിങ്ങളെ സഹായിക്കുന്നു. നിങ്ങളുടെ അക്കൗണ്ടിനുള്ള സ്വകാര്യവും വ്യക്തിപരമാക്കിയതുമായ നിർദ്ദേശങ്ങൾ നിങ്ങൾക്ക് മാത്രമെ കാണാനാകൂ.</translation> <translation id="2096715839409389970">മൂന്നാം കക്ഷി കുക്കികൾ മായ്ക്കുക</translation> <translation id="2097372108957554726">പുതിയ ഉപകരണങ്ങൾ രജിസ്റ്റർ ചെയ്യാൻ നിങ്ങൾ Chrome-ൽ സൈൻ ഇൻ ചെയ്യണം</translation> <translation id="2099172618127234427">sshd daemon സജ്ജീകരിക്കുന്നതും USB ഡ്രൈവുകളിൽ നിന്ന് ബൂട്ട് ചെയ്യൽ പ്രവർത്തനക്ഷമമാക്കുന്നതുമായ Chrome OS ഡീബഗ് ചെയ്യൽ ഫീച്ചറുകൾ നിങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുന്നു.</translation> @@ -1983,7 +1983,7 @@ <translation id="3629631988386925734">Smart Lock പ്രവർത്തനക്ഷമമാക്കാൻ നിങ്ങളുടെ പാസ്വേഡ് നൽകുക. അടുത്ത തവണ നിങ്ങളുടെ ഫോൺ <ph name="DEVICE_TYPE" /> അൺലോക്ക് ചെയ്യും. ക്രമീകരണത്തിൽ Smart Lock ഓഫാക്കാം.</translation> <translation id="3630132874740063857">നിങ്ങളുടെ ഫോൺ</translation> <translation id="3630995161997703415">എപ്പോൾ വേണമെങ്കിലും ഉപയോഗിക്കാൻ ഈ സൈറ്റിനെ നിങ്ങളുടെ ഷെൽഫിൽ ചേർക്കുക</translation> -<translation id="3633309367764744750">നിങ്ങൾ ഇതുവരെ സന്ദർശിച്ചിട്ടില്ലാത്ത പേജുകൾ ഉൾപ്പെടെയുള്ള പേജുകളിൽ നിന്ന് വിവരങ്ങൾ മുൻകൂട്ടി ലഭ്യമാക്കുന്നു. നിങ്ങൾ കുക്കികൾ അനുവദിക്കുകയാണെങ്കിൽ, ലഭിച്ച വിവരങ്ങളിൽ കുക്കികൾ ഉൾപ്പെട്ടേക്കാം.</translation> +<translation id="3633309367764744750">നിങ്ങൾ ഇതുവരെ സന്ദർശിച്ചിട്ടില്ലാത്ത പേജുകൾ ഉൾപ്പെടെയുള്ളവയിൽ നിന്ന് വിവരങ്ങൾ മുൻകൂട്ടി ലഭ്യമാക്കുന്നു. നിങ്ങൾ കുക്കികൾ അനുവദിക്കുകയാണെങ്കിൽ, ലഭിച്ച വിവരങ്ങളിൽ കുക്കികൾ ഉൾപ്പെട്ടേക്കാം.</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />-ൽ <ph name="NETWORK_INDEX" /> നെറ്റ്വർക്ക്, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, നിങ്ങളുടെ അഡ്മിൻ മാനേജ് ചെയ്യുന്നത്, വിശദാംശങ്ങൾ</translation> <translation id="3635241501480133979">ഈ ഡാറ്റ നിങ്ങളുടെ ഓർഗനൈസേഷന്റെ സുരക്ഷാ നയങ്ങൾ ലംഘിക്കുന്നതിനാൽ ഇത് വലിച്ചിടാനാവില്ല.</translation> <translation id="3635353578505343390">Google-ലേക്ക് ഫീഡ്ബാക്ക് അയയ്ക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index b021c58..20c402c 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -611,6 +611,11 @@ <translation id="1805888043020974594">प्रिंट सर्व्हर</translation> <translation id="1805967612549112634">पिन निश्चित करा</translation> <translation id="1806335016774576568">दुसर्या उघड्या अॅपवर स्विच करा</translation> +<translation id="1809483812148634490">तुम्ही Google Play वरून डाउनलोड केलेली अॅप्स या Chromebook वरून हटवली जातील. + <ph name="LINE_BREAKS1" /> + चित्रपट, टीव्ही शो, संगीत, पुस्तके यांसारखा तुम्ही खरेदी केलेला आशय किंवा इतर अॅपमधील खरेदीदेखील हटवली जाऊ शकते. + <ph name="LINE_BREAKS2" /> + यामुळे इतर डिव्हाइसवरील अॅप्स किंवा आशयावर परिणाम होत नाही.</translation> <translation id="1809734401532861917">माझे बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_EMAIL_ADDRESS" /> मध्ये जोडा</translation> <translation id="1813278315230285598">सेवा</translation> <translation id="18139523105317219">EDI पार्टी नाव</translation> @@ -1392,6 +1397,7 @@ <translation id="2825848369316359348">तुमच्या सिक्युरिटी कीच्या मागील बाजूस प्रिंट केलेले नाव पाहा</translation> <translation id="2828650939514476812">वाय-फाय नेटवर्कवर कनेक्ट करा</translation> <translation id="2835294513443818940">ही फाइल सुरक्षितपणे डाउनलोड केली जाऊ शकत नाही.</translation> +<translation id="2835547721736623118">स्पीच रेकग्निशन सेवा</translation> <translation id="2836269494620652131">क्रॅश</translation> <translation id="2836635946302913370">या वापरकर्तानावासह साइन इन करणे तुमच्या ॲडमिनिस्ट्रेटरद्वारे अक्षम केले गेले आहे.</translation> <translation id="283669119850230892">नेटवर्क <ph name="NETWORK_ID" /> वापरण्यासाठी, प्रथम खालील इंटरनेटचे तुमचे कनेक्शन पूर्ण करा.</translation> @@ -1536,6 +1542,7 @@ <translation id="3019285239893817657">सबपेज बटण</translation> <translation id="3020183492814296499">शॉर्टकट</translation> <translation id="3020990233660977256">सिरिअल नंबर: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">बॅटरीवर असताना</translation> <translation id="3021066826692793094">फुलपाखरू</translation> <translation id="3021678814754966447">फ्रेम स्रोत &पहा</translation> <translation id="3022978424994383087">ते समजू शकले नाही.</translation> @@ -2730,6 +2737,7 @@ <translation id="4633757335284074492">Google Drive वर बॅकअप घ्या. डेटा कधीही सहजपणे रिस्टोअर करा किंवा डिव्हाइस स्विच करा. या बॅकअपमध्ये अॅप डेटा समाविष्ट आहे. बॅकअप Google वर अपलोड केले जातात आणि तुमच्या मुलाचा Google खाते पासवर्ड वापरून एंक्रिप्ट केले जातात.</translation> <translation id="4634771451598206121">पुन्हा साइन इन करा...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> हे अतिथी वापरकर्त्यांसाठी उपलब्ध नाही.</translation> +<translation id="4635444580397524003">Linux बॅकअप यशस्वीरीत्या रिस्टोअर केला गेला.</translation> <translation id="4636930964841734540">माहिती</translation> <translation id="4637083375689622795"><ph name="EMAIL" /> मधील आणखी क्रिया</translation> <translation id="4638930039313743000">ADB डीबगिंग सुरू करा</translation> @@ -2905,6 +2913,7 @@ <translation id="4890773143211625964">प्रगत प्रिंटर पर्याय दर्शवा</translation> <translation id="4891089016822695758">बीटा फोरम</translation> <translation id="4892229439761351791">साइट ब्लूटूथ वापरू शकते</translation> +<translation id="489258173289528622">बॅटरीवर असताना निष्क्रिय कृती</translation> <translation id="4893336867552636863">हे या डिव्हाइस वरून तुमचा ब्राउझिंग डेटा कायमचा हटवेल.</translation> <translation id="4893522937062257019">लॉक स्क्रीनवर</translation> <translation id="489454699928748701">साइटना तुमचे मोशन सेन्सर वापरण्याची अनुमती द्या</translation> @@ -3611,6 +3620,7 @@ <translation id="5863445608433396414">डीबगिंग वैशिष्ट्ये सुरू करा</translation> <translation id="5864195618110239517">मर्यादित कनेक्शन वापरा</translation> <translation id="5864471791310927901">DHCP लुकअप अयशस्वी</translation> +<translation id="5864754048328252126">चार्ज होत असताना निष्क्रिय कृती</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> लवकरच थांबेल</translation> <translation id="586567932979200359">तुम्ही <ph name="PRODUCT_NAME" /> त्याच्या डिस्क प्रतिमेवरून चालवत आहात. तुमच्या कॉंप्युटरवर ते इंस्टॉल केल्यामुळे तुम्हाला ते डिस्क प्रतिमेशिवाय चालवू देते आणि ते अपडेट ठेवले जाईल हे निश्चित करते.</translation> <translation id="5865733239029070421">Google ला वापर आकडेवारी आणि क्रॅश अहवाल आपोआप पाठवते</translation> @@ -3811,6 +3821,7 @@ <translation id="6120205520491252677">या पृष्ठास प्रारंभ स्क्रीनवर पिन करा...</translation> <translation id="6122081475643980456">तुमचे इंटरनेट कनेक्शन नियंत्रित केले जात आहे</translation> <translation id="6122095009389448667">क्लिपबोर्ड पाहण्यापासून या साइटला ब्लॉक करणे सुरू ठेवा</translation> +<translation id="6122831415929794347">सुरक्षित ब्राउझिंग बंद करायचे का?</translation> <translation id="6122875415561139701">लिहा ऑपरेशनला यावर परवानगी नाही: " <ph name="DEVICE_NAME" /> ".</translation> <translation id="6124650939968185064">या एक्स्टेंशनवर अवलंबून असलेले खालील एक्स्टेंशन:</translation> <translation id="6124698108608891449">या साइटला आणखी परवानग्यांची आवश्यकता आहे.</translation> @@ -4014,6 +4025,7 @@ <translation id="6408118934673775994"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, आणि <ph name="WEBSITE_3" /> वर तुमचा डेटा वाचा आणि बदला</translation> <translation id="6410257289063177456">इमेज फायली</translation> <translation id="6410328738210026208">चॅनेल बदला आणि Powerwash करा</translation> +<translation id="6410390304316730527">तुम्हाला फसवून द्वेषयुक्त सॉफ्टवेअर इंस्टॉल करणे किंवा पासवर्ड, फोन नंबर किंवा क्रेडिट कार्डसारखी वैयक्तिक माहिती उघड करणे यांसारखी एखादी धोकादायक गोष्ट करायला लावणार्या हल्लेखोरांपासून सुरक्षित ब्राउझिंग तुमचे संरक्षण करते. तुम्ही ते बंद केल्यास, अनोळखी किंवा अप्रतिष्ठित साइट ब्राउझ करताना सावध रहा.</translation> <translation id="6410668567036790476">शोध इंजिन जोडा</translation> <translation id="641081527798843608">जुळणारा विषय</translation> <translation id="6412673304250309937">Chrome मध्ये स्टोअर केलेल्या असुरक्षित साइटच्या सूचीमध्ये URL तपासतो. साइटने तुमचा पासवर्ड चोरण्याचा प्रयत्न केल्यास किंवा तुम्ही हानीकारक फाइल डाउनलोड केल्यावर, Chrome, पेज आशयाच्या भागांसह, URL सुरक्षित ब्राउझिंग कडे पाठवू शकतो.</translation> @@ -5933,6 +5945,7 @@ <translation id="8951256747718668828">एररमुळे रिस्टोअर करणे पूर्ण करता आले नाही</translation> <translation id="8951465597020890363">अतिथी मोडमधून बाहेर पडायचे आहे का?</translation> <translation id="8952831374766033534">कॉन्फिगरेशन पर्याय सपोर्ट करत नाही: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">चार्ज होत असताना</translation> <translation id="895347679606913382">प्रारंभ करीत आहे...</translation> <translation id="8957762313041272117">लाइव्ह कॅप्शन</translation> <translation id="895944840846194039">JavaScript मेमरी</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 09f7e02..d53eb4f 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Pelayan cetak</translation> <translation id="1805967612549112634">Sahkan PIN</translation> <translation id="1806335016774576568">Tukar kepada apl terbuka yang lain</translation> +<translation id="1809483812148634490">Apl yang telah anda muat turun daripada Google Play akan dipadamkan daripada Chromebook ini. + <ph name="LINE_BREAKS1" /> + Kandungan yang telah anda beli, seperti filem, rancangan TV, muzik, buku atau pembelian dalam apl lain juga mungkin akan dipadamkan. + <ph name="LINE_BREAKS2" /> + Hal ini tidak melibatkan apl atau kandungan pada peranti lain.</translation> <translation id="1809734401532861917">Tambahkan penanda halaman, sejarah, kata laluan dan tetapan saya yang lain pada <ph name="USER_EMAIL_ADDRESS" />.</translation> <translation id="1813278315230285598">Perkhidmatan</translation> <translation id="18139523105317219">Nama Pihak EDI</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Cari nama yang dicetak pada bahagian belakang kunci keselamatan anda</translation> <translation id="2828650939514476812">Sambung ke rangkaian Wi-Fi</translation> <translation id="2835294513443818940">Fail ini tidak dapat dimuat turun dengan selamat.</translation> +<translation id="2835547721736623118">Perkhidmatan pengecaman pertuturan</translation> <translation id="2836269494620652131">Ranap</translation> <translation id="2836635946302913370">Log masuk dengan nama pengguna ini telah dilumpuhkan oleh pentadbir anda.</translation> <translation id="283669119850230892">Untuk menggunakan rangkaian <ph name="NETWORK_ID" />, mula-mula lengkapkan sambungan anda ke Internet di bawah.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Butang subhalaman</translation> <translation id="3020183492814296499">Pintasan</translation> <translation id="3020990233660977256">Nombor Siri: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Semasa menggunakan bateri</translation> <translation id="3021066826692793094">Rama-rama</translation> <translation id="3021678814754966447">&Lihat Sumber Bingkai</translation> <translation id="3022978424994383087">Tidak faham.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Sandarkan pada Google Drive. Pulihkan data atau tukar peranti dengan mudah pada bila-bila masa. Sandaran ini merangkumi data apl. Sandaran dimuat naik pada Google dan disulitkan dengan menggunakan kata laluan Akaun Google anak anda.</translation> <translation id="4634771451598206121">Log masuk semula...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> tidak tersedia untuk pengguna Tetamu.</translation> +<translation id="4635444580397524003">Sandaran Linux telah berjaya dipulihkan.</translation> <translation id="4636930964841734540">Maklumat</translation> <translation id="4637083375689622795">Lagi tindakan, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Dayakan penyahpepijatan ADB</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Tunjukkan pilihan terperinci pencetak</translation> <translation id="4891089016822695758">Forum beta</translation> <translation id="4892229439761351791">Tapak boleh menggunakan Bluetooth</translation> +<translation id="489258173289528622">Tindakan melahu semasa menggunakan bateri</translation> <translation id="4893336867552636863">Tindakan ini akan memadamkan data penyemakan imbas anda daripada peranti ini selama-lamanya.</translation> <translation id="4893522937062257019">Pada skrin kunci</translation> <translation id="489454699928748701">Benarkan tapak menggunakan penderia gerakan</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Dayakan ciri penyahpepijatan</translation> <translation id="5864195618110239517">Gunakan sambungan bermeter</translation> <translation id="5864471791310927901">Carian DHCP gagal</translation> +<translation id="5864754048328252126">Tindakan melahu semasa mengecas</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> akan dijeda tidak lama lagi</translation> <translation id="586567932979200359">Anda menjalankan <ph name="PRODUCT_NAME" /> daripada imej cakeranya. Pemasangannya pada komputer anda membolehkan anda menjalankannya tanpa imej cakera, dan memastikannya adalah yang terkini.</translation> <translation id="5865733239029070421">Menghantar perangkaan penggunaan dan laporan ranap sistem secara automatik kepada Google</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Pin halaman ini pada skrin Mula...</translation> <translation id="6122081475643980456">Sambungan Internet anda sedang dikawal</translation> <translation id="6122095009389448667">Teruskan menyekat tapak ini daripada melihat papan keratan</translation> +<translation id="6122831415929794347">Matikan Penyemakan Imbas Selamat?</translation> <translation id="6122875415561139701">Pengendalian tulis tidak dibenarkan pada: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">Sambungan berikut bergantung kepada sambungan ini:</translation> <translation id="6124698108608891449">Tapak ini memerlukan kebenaran lagi.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Baca dan tukar data anda di <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> dan <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Fail Imej</translation> <translation id="6410328738210026208">Tukar saluran dan Powerwash</translation> +<translation id="6410390304316730527">Penyemakan Imbas Selamat melindungi anda daripada penyerang yang mungkin memperdaya anda agar melakukan sesuatu yang berbahaya seperti memasang perisian hasad atau mendedahkan maklumat peribadi, seperti kata laluan, nombor telefon atau kad kredit. Jika anda mematikan ciri ini, sila berhati-hati semasa menyemak imbas tapak web yang tidak biasa dilawati atau tidak bereputasi baik.</translation> <translation id="6410668567036790476">Tambah enjin carian</translation> <translation id="641081527798843608">Padanan subjek</translation> <translation id="6412673304250309937">Semak URL melalui perbandingan dengan senarai tapak tidak selamat yang disimpan dalam Chrome. Jika tapak cuba mencuri kata laluan anda atau apabila anda memuat turun fail yang berbahaya, Chrome juga mungkin menghantar URL, termasuk sedikit kandungan halaman, kepada Penyemakan Imbas Selamat.</translation> @@ -5937,6 +5949,7 @@ <translation id="8951256747718668828">Pemulihan tidak dapat diselesaikan kerana berlaku ralat</translation> <translation id="8951465597020890363">Keluar daripada mod tetamu juga?</translation> <translation id="8952831374766033534">Pilihan konfigurasi tidak disokong: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Semasa mengecas</translation> <translation id="895347679606913382">Memulakan...</translation> <translation id="8957762313041272117">Sari kata langsung</translation> <translation id="895944840846194039">Memori JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index 3c59b37..3af3c69 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -613,6 +613,11 @@ <translation id="1805888043020974594">ပုံနှိပ်စက်ဆာဗာ</translation> <translation id="1805967612549112634">ပင်နံပါတ် အတည်ပြုပါ</translation> <translation id="1806335016774576568">ဖွင့်ထားသည့် အခြားအက်ပ်တစ်ခုသို့ ပြောင်းရန်</translation> +<translation id="1809483812148634490">Google Play မှ သင်ဒေါင်းလုဒ်လုပ်ထားသည့် အက်ပ်များကို ဤ Chromebook မှ ဖျက်လိုက်ပါမည်။ + <ph name="LINE_BREAKS1" /> + ရုပ်ရှင်၊ တီဗီရှိုး၊ တေးဂီတ၊ စာအုပ် သို့မဟုတ် အခြားအက်ပ်အတွင်း ဝယ်ယူမှုများကဲ့သို့ သင်ဝယ်ယူထားသည့် အကြောင်းအရာများကိုလည်း ဖျက်လိုက်ပါမည်။ + <ph name="LINE_BREAKS2" /> + ၎င်းသည် အခြားစက်ပစ္စည်းပေါ်ရှိ အက်ပ် သို့မဟုတ် အကြောင်းအရာများကို အကျိုးသက်ရောက်မှု မရှိပါ။</translation> <translation id="1809734401532861917"><ph name="USER_EMAIL_ADDRESS" /> သို့ ကျွန်ုပ်၏ ဝဘ်လိပ်စာများ၊ မှတ်တမ်း၊ စကားဝှက်များနှင့် အခြားဆက်တင်များကို ထည့်သွင်းပါ</translation> <translation id="1813278315230285598">ဝန်ဆောင်မှုများ</translation> <translation id="18139523105317219">EDI ပါတီ အမည်</translation> @@ -1394,6 +1399,7 @@ <translation id="2825848369316359348">သင့်လုံခြုံရေးကီး၏ ကျောဘက်တွင် ပုံနှိပ်ထားသော အမည်ကို ရှာပါ</translation> <translation id="2828650939514476812">ဝိုင်ဖိုင်ကွန်ယက်သို့ ချိတ်ဆက်ရန်</translation> <translation id="2835294513443818940">ဤဖိုင်ကို လုံခြုံစွာ ဒေါင်းလုဒ်လုပ်၍မရပါ။</translation> +<translation id="2835547721736623118">စကားသံ အသိအမှတ်ပြုခြင်း ဝန်ဆောင်မှု</translation> <translation id="2836269494620652131">ပျက်စီးမှု</translation> <translation id="2836635946302913370">သင့်ကြီးကြပ်သူမှ ဤအသုံးပြုသူအမည်ဖြင့် ဝင်ရောက်ခြင်းကို ပိတ်လိုက်ပါပြီ။</translation> <translation id="283669119850230892">ကွန်ရက် <ph name="NETWORK_ID" /> အသုံးပြုရန်၊ အောက်ပါ အင်တာနက်သို့ ချိတ်ဆက်ခြင်း ပြီးမြောက်စေပါ။</translation> @@ -1538,6 +1544,7 @@ <translation id="3019285239893817657">အတွင်းပိုင်းစာမျက်နှာ ခလုတ်</translation> <translation id="3020183492814296499">ဖြတ်လမ်းလင့်ခ်များ</translation> <translation id="3020990233660977256">နံပါတ်စဉ်: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">ဘက်ထရီဖြင့်ဖွင့်ထားစဉ်</translation> <translation id="3021066826692793094">လိပ်ပြာ</translation> <translation id="3021678814754966447">ဖရိန် အရင်းမြစ် ကြည့်မည်</translation> <translation id="3022978424994383087">နားမလည်လိုက်ပါ။</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Google Drive သို့ မိတ္တူကူးရန်။ ဒေတာများကို အလွယ်တကူ ပြန်ယူပါ သို့မဟုတ် စက်ပစ္စည်းကို အချိန်မရွေး ပြောင်းပါ။ ဤမိတ္တူတွင် အက်ပ်ဒေတာများ ပါဝင်သည်။ မိတ္တူများကို Google သို့ အပ်လုဒ်လုပ်ပြီး သင့်ကလေး၏ Google အကောင့်စကားဝှက်သုံး၍ အသွင်ဝှက်ထားပါသည်။</translation> <translation id="4634771451598206121">ထပ်မံ ဝင်ရောက်ပါ...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> သည် 'ဧည့်သည်' အသုံးပြုသူများအတွက် မရနိုင်ပါ။</translation> +<translation id="4635444580397524003">Linux မိတ္တူကို ပြန်လည်ရယူပြီးပါပြီ။</translation> <translation id="4636930964841734540">အချက်အလက်</translation> <translation id="4637083375689622795">နောက်ထပ် လုပ်ဆောင်ချက်များ၊ <ph name="EMAIL" /></translation> <translation id="4638930039313743000">ADB အမှားရှာပြင်ကိရိယာကို ဖွင့်ပါ</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">ပုံနှိပ်စက်ဆိုင်ရာ အသေးစိတ် ရွေးစရာများကို ပြရန်</translation> <translation id="4891089016822695758">စမ်းသပ်ဆော့ဖ်ဝဲဖိုရမ်</translation> <translation id="4892229439761351791">ဝဘ်ဆိုက်က ဘလူးတုသ်ကို အသုံးပြုနိုင်သည်</translation> +<translation id="489258173289528622">ဘက်ထရီဖြင့်ဖွင့်ထားစဉ် လုပ်ဆောင်ချက်ကို ဆိုင်းငံ့ထားပါ</translation> <translation id="4893336867552636863">သင်၏ ရှာဖွေမှု ဒေတာကို ဤကိရိယာထဲမှ ထာဝရ ဖျက်ပစ်ပါမည်။</translation> <translation id="4893522937062257019">လော့ခ်ချထားသည့်မျက်နှာပြင်ပေါ်တွင်</translation> <translation id="489454699928748701">လှုပ်ရှားမှု အာရုံခံစနစ်များ အသုံးပြုရန် ဝဘ်ဆိုက်များကို ခွင့်ပြုသည်</translation> @@ -3615,6 +3624,7 @@ <translation id="5863445608433396414">ချို့ယွင်းချက်ရှာဖွေပြုပြင်သော အင်္ဂါရပ်များကို လုပ်ဆောင်ပါ</translation> <translation id="5864195618110239517">အခမဲ့ မဟုတ်သော ချိတ်ဆက်မှု အသုံးပြုရန်</translation> <translation id="5864471791310927901">DHCP ရှာဖွေမှု မအောင်မြင်ခဲ့</translation> +<translation id="5864754048328252126">အားသွင်းနေစဉ် လုပ်ဆောင်ချက်ကို ဆိုင်းငံ့ထားပါ</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> သည် မကြာမီ ခဏရပ်ပါမည်</translation> <translation id="586567932979200359">သင်သည်<ph name="PRODUCT_NAME" />ကို ၎င်း၏ ဒီစ်က် ုရပ်ပုံမှ ဖွင့်သုံးနေသည်။ ၎င်းကို သင်၏ ကွန်ပျူတာမှာ တပ်ဆင်ထားခြင်းဖြင့် သင်သည် ဒီစ်က် ုရပ်ပုံ မပါဘဲ ၎င်းကို ဖွင့်နိုင်မှာဖြစ်ပြီး၊ ၎င်းသည် ခေတ်မီလျက် ရှိနေမှာကို စိတ်ချနိုင်ပါသည်။</translation> <translation id="5865733239029070421">သုံးစွဲမှုဆိုင်ရာ အချက်အလက် ကိန်းဂဏန်းများနှင့် ပျက်စီးမှု အစီရင်ခံစာများကို Google သို့ အလိုအလျောက် ပို့သည်</translation> @@ -3812,6 +3822,7 @@ <translation id="6120205520491252677">မျက်နှာပြင်ကို စတင်ရန် ဒီစာမျက်နှာကို ပင်ထိုးထားရန်...</translation> <translation id="6122081475643980456">သင်၏ အင်တာနက် ချိတ်ဆက်မှုကို ထိန်းချုပ်ထား</translation> <translation id="6122095009389448667">ကလစ်ဘုတ်အား ကြည့်ရှုခွင့်ကို ဤဝဘ်ဆိုက်အတွက် ဆက်လက်ပိတ်ထားရန်</translation> +<translation id="6122831415929794347">'ဘေးကင်းစွာ အသုံးပြုခြင်း' ကို ပိတ်လိုသလား။</translation> <translation id="6122875415561139701">"<ph name="DEVICE_NAME" />" တွင်တည်းဖြတ်ခွင့်အား ခွင့်မပြုထားပါ။</translation> <translation id="6124650939968185064">အောက်ပါ တိုးချဲ့မှုများသည် ဒီတိုးချဲ့မှု အပေါ်မှာ မူတည်နေ:</translation> <translation id="6124698108608891449">ဤဝဘ်ဆိုက်အတွက် နောက်ထပ်ခွင့်ပြုချက်များ လိုအပ်သည်။</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">သင်၏ ဒေတာကို<ph name="WEBSITE_1" />၊ <ph name="WEBSITE_2" />၊ နှင့် <ph name="WEBSITE_3" />မှာ ဖတ်ပါ ပြောင်းလဲပါ</translation> <translation id="6410257289063177456">ပုံ ဖိုင်များ</translation> <translation id="6410328738210026208">ချာနယ် နှင့် တအားဆေးကြောမှု ပြောင်းလဲရန်</translation> +<translation id="6410390304316730527">တိုက်ခိုက်သူများက သင့်ကို လှည့်စား၍ အန္တရာယ်ရှိသည့် ဆော့ဖ်ဝဲကို ထည့်သွင်းစေခြင်း သို့မဟုတ် စကားဝှက်၊ ဖုန်းနံပါတ် သို့မဟုတ် ခရက်ဒစ်ကတ်ကဲ့သို့သော ကိုယ်ရေးကိုယ်တာအချက်အလက်များကို ဖော်ပြစေခြင်းကဲ့သို့သော အန္တရာယ်ရှိသည့်အရာများ လုပ်ဆောင်စေခြင်းမှ 'ဘေးကင်းစွာ အသုံးပြုခြင်း' က ကာကွယ်ပေးသည်။ ၎င်းကို ပိတ်ထားလျှင် မရင်းနှီးသည့် သို့မဟုတ် မယုံကြည်ရသည့် ဝဘ်ဆိုက်များကို ဖွင့်သည့်အခါ သတိပြုပါ။</translation> <translation id="6410668567036790476">ရှာဖွေမှုအင်ဂျင် ထည့်ရန်</translation> <translation id="641081527798843608">တိုက်ဆိုင်သည့် အကြောင်းအရာ</translation> <translation id="6412673304250309937">Chrome တွင် သိမ်းဆည်းထားသော လုံခြုံမှုမရှိသည့် ဝဘ်ဆိုက်များ၏ URL များကို စစ်ဆေးပေးသည်။ ဝဘ်ဆိုက်တစ်ခုက သင့်စကားဝှက်ကို ခိုးယူရန် ကြိုးပမ်းလာပါက သို့မဟုတ် အန္တရာယ်ရှိသည့်ဖိုင်တစ်ခုကို သင်ဒေါင်းလုဒ်လုပ်သည့်အခါ Chrome သည် Safe Browsing သို့ URL များအပြင် ဝဘ်ဆိုက်ပါ အကြောင်းအရာအချို့ကို ပို့နိုင်သည်။</translation> @@ -5933,6 +5945,7 @@ <translation id="8951256747718668828">အမှားအယွင်းတစ်ခုကြောင့် ပြန်ယူခြင်းကို အပြီးသတ်၍မရပါ</translation> <translation id="8951465597020890363">မည်သို့ပင်ဖြစ်စေ ဧည့်သည်မုဒ်မှ ထွက်လိုပါသလား။</translation> <translation id="8952831374766033534">စီစဉ်သတ်မှတ်ခြင်း ရွေးချယ်စရာကို ပံ့ပိုးမထားပါ- <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">အားသွင်းနေစဉ်</translation> <translation id="895347679606913382">စတင်နေ...</translation> <translation id="8957762313041272117">တိုက်ရိုက်စာတန်း</translation> <translation id="895944840846194039">JavaScript မှတ်ဉာဏ်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index cbdb732..1afd032 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -566,7 +566,7 @@ <translation id="1763808908432309942">यसले नयाँ ट्याबमा खोल्छ</translation> <translation id="1764226536771329714">बेटा</translation> <translation id="176587472219019965">&नयाँ विन्डो</translation> -<translation id="1766575458646819543">पूर्ण स्क्रिन मोड छाडियो</translation> +<translation id="1766575458646819543">फुल स्क्रिन मोड छाडियो</translation> <translation id="1766957085594317166">आफ्नो Google खातामा सुरक्षित रूपमा पासवर्ड सुरक्षित गर्नुहोस् अनि तपाईंले कहिल्यै पनि ती पासवर्ड फेरि टाइप गरिरहनु पर्दैन</translation> <translation id="1768278914020124551">हत्तेरिका! लगअनको सर्भरलाई सम्पर्क गर्दा एउटा समस्या भयो। कृपया आफ्नो नेटवर्क जडान र डोमेनको नाम जाँच्नुहोस्, त्यसपछि फेरि प्रयास गर्नुहोस्।</translation> <translation id="1769104665586091481">लिङ्कलाई नयाँ &विन्डोमा खोल्नुहोस्</translation> @@ -855,7 +855,7 @@ <translation id="2156294658807918600">सेवातर्फका कर्मचारी: <ph name="SCRIPT_URL" /></translation> <translation id="2157474325782140681">अतिरिक्त सुविधाहरू प्राप्त गर्न यो Chromebook का लागि उपयुक्त हुने गरी डिजाइन गरिएको Dell डकिङ स्टेसन प्रयोग गर्नुहोस्।</translation> <translation id="215753907730220065">पूरा स्क्रिन मोडबाट निस्कनुहोस्</translation> -<translation id="2157875535253991059">यो पृष्ठ अभ पूर्ण स्क्रिन छ।</translation> +<translation id="2157875535253991059">यो पृष्ठ अभ फुल स्क्रिन छ।</translation> <translation id="216169395504480358">Wi-Fi थप्नुहोस्...</translation> <translation id="2162155940152307086">तपाईंले सिंकसम्बन्धी सेटिङहरूको पृष्ठ छोडेपछि सिंक सुरु हुने छ</translation> <translation id="2163470535490402084">तपाईँको <ph name="DEVICE_TYPE" /> मा साइन इन गर्न कृपया इन्टरनेट जडान गर्नुहोस्।</translation> @@ -2523,7 +2523,7 @@ <translation id="4378551569595875038">जडान गर्दै...</translation> <translation id="4378556263712303865">यन्त्रसम्बन्धी माग</translation> <translation id="4379281552162875326">"<ph name="APP_NAME" />" को स्थापना रद्द गर्ने हो?</translation> -<translation id="4380648069038809855">पूर्ण स्क्रिन मोडमा प्रविष्टि गरियो</translation> +<translation id="4380648069038809855">फुल स्क्रिन मोडमा प्रविष्टि गरियो</translation> <translation id="4382131447572146376">{COUNT,plural, =0{<ph name="EMAIL" />}=1{<ph name="EMAIL" />, +१ थप खाता}other{<ph name="EMAIL" />, +<ph name="EXTRA_ACCOUNTS" /> थप खाताहरू}}</translation> <translation id="4384312707950789900">रुचाइएकोमा थप्नुहोस्</translation> <translation id="4384652540891215547">विस्तार सक्रिय गर्नुहोस्</translation> @@ -5372,7 +5372,7 @@ <translation id="8263336784344783289">यो समूहको नाम राख्नुहोस्</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ले तपाइँको माउस कर्सरलाई असक्षम गरेको छ।</translation> <translation id="8264024885325823677">तपाईंका प्रशासक यो सेटिङ मिलाउनुहुन्छ।</translation> -<translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" ले पूर्ण स्क्रिन ट्रिगर गर्यो।</translation> +<translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" ले फुल स्क्रिन ट्रिगर गर्यो।</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />यो जानकारी यस यन्त्र र यसको प्रयोग (जस्तै ब्याट्रीको स्तर, प्रणाली तथा अनुप्रयोगका क्रियाकलाप र त्रुटिहरू) सम्बन्धी सामान्य जानकारी हो। यो डेटालाई Android मा सुधार गर्ने प्रयोजनका लागि प्रयोग गरिने छ र केही एकत्रित जानकारीले Google का अनुप्रयोग तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई तिनका अनुप्रयोग र उत्पादनहरू अझ राम्रो बनाउन पनि मद्दत गर्ने छ।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />यो सुविधा निष्क्रिय पार्नुले प्रणालीका अद्यावधिक र सुरक्षा जस्ता अत्यावश्यक सेवाहरूलाई आवश्यक पर्ने जानकारी पठाउने यस यन्त्रको क्षमतामा भने कुनै असर पर्दैन।<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />यस यन्त्रका मालिक सेटिङहरू > उन्नत > निदान तथा प्रयोगसम्बन्धी डेटा Google मा स्वतः पठाउनुहोस् नामक विकल्पमा गई यो सुविधा नियन्त्रण गर्न सक्नुहुन्छ।<ph name="END_PARAGRAPH3" /> @@ -5568,7 +5568,7 @@ <translation id="8546541260734613940">[*।] xample.com</translation> <translation id="854655314928502177">वेब प्रोक्सी स्वतः खोजको URL</translation> <translation id="8546930481464505581">टच बारलाई आफू अनुकूल पार्नुहोस्</translation> -<translation id="8547013269961688403">पूर्ण स्क्रिन म्याग्निफायर सक्षम पार्नुहोस्</translation> +<translation id="8547013269961688403">फुल स्क्रिन म्याग्निफायर सक्षम पार्नुहोस्</translation> <translation id="85486688517848470">शीर्ष-पङ्क्तिका कुञ्जीहरूको व्यवहार बदल्न खोज कुञ्जीलाई थिचिराख्नुहोस्</translation> <translation id="8551388862522347954">लाइसेन्सहरू</translation> <translation id="8553342806078037065">अन्य व्यक्तिहरूलाई व्यवस्थापन गर्नुहोस्</translation> @@ -5660,7 +5660,7 @@ <translation id="8665180165765946056">ब्याकअप सम्पन्न भयो</translation> <translation id="866611985033792019">इमेल प्रयोगकर्ताहरूको पहिचान गर्न यो प्रमाणपत्रमाथि विश्वास गर्नुहोस्</translation> <translation id="8666584013686199826">कुनै साइटले USB यन्त्रहरूमाथि पहुँच राख्न खोज्दा सोध्नुहोस्</translation> -<translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> अहिले पूर्ण स्क्रिन छ र तपाईंको माउस कर्सरलाई अक्षम गराएको छ।</translation> +<translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> अहिले फुल स्क्रिन छ र तपाईंको माउस कर्सरलाई अक्षम गराएको छ।</translation> <translation id="8669284339312441707">अझै न्यानो</translation> <translation id="867085395664725367">सर्भरसम्बन्धी अस्थायी त्रुटि भयो।</translation> <translation id="8673026256276578048">वेबमा खोज्नुहोस्...</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index 754ae53..b975b56 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Afdrukserver</translation> <translation id="1805967612549112634">Pincode bevestigen</translation> <translation id="1806335016774576568">Overschakelen naar een andere geopende app</translation> +<translation id="1809483812148634490">Apps die je hebt gedownload via Google Play, worden van deze Chromebook verwijderd. + <ph name="LINE_BREAKS1" /> + De content die je hebt gekocht, zoals films, tv-programma's, muziek, boeken of andere in-app-aankopen, worden mogelijk ook verwijderd. + <ph name="LINE_BREAKS2" /> + Dit is niet van invloed op apps of content op andere apparaten.</translation> <translation id="1809734401532861917">Mijn bladwijzers, geschiedenis, wachtwoorden en andere instellingen toevoegen aan <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Services</translation> <translation id="18139523105317219">EDI Partynaam</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Je vindt de naam op de achterkant van je beveiligingssleutel</translation> <translation id="2828650939514476812">Verbinding maken met een wifi-netwerk</translation> <translation id="2835294513443818940">Dit bestand kan niet beveiligd worden gedownload.</translation> +<translation id="2835547721736623118">Spraakherkenningsservice</translation> <translation id="2836269494620652131">Crash</translation> <translation id="2836635946302913370">Inloggen met deze gebruikersnaam is uitgeschakeld door je beheerder.</translation> <translation id="283669119850230892">Als je het netwerk <ph name="NETWORK_ID" /> wilt gebruiken, moet je eerst hieronder verbinding maken met internet.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Knop voor subpagina</translation> <translation id="3020183492814296499">Snelkoppelingen</translation> <translation id="3020990233660977256">Serienummer: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Op batterij</translation> <translation id="3021066826692793094">Vlinder</translation> <translation id="3021678814754966447">&Framebron weergeven</translation> <translation id="3022978424994383087">Dat heb ik niet verstaan.</translation> @@ -2339,7 +2346,7 @@ <translation id="4056908315660577142">Je hebt de tijdslimiet bereikt die je ouder heeft ingesteld voor de <ph name="APP_NAME" />-app voor Chrome. Je kunt de app morgen <ph name="TIME_LIMIT" /> gebruiken.</translation> <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation> <translation id="4057896668975954729">Bekijken in de Web Store</translation> -<translation id="4058647953897694817">Verifiëren via Bluetooth</translation> +<translation id="4058647953897694817">Verifiëren via bluetooth</translation> <translation id="4058720513957747556">AppSocket (TCP/IP)</translation> <translation id="4058793769387728514">Controleer document nu</translation> <translation id="406070391919917862">Achtergrondapplicaties</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Maak een back-up op Google Drive. Zet gegevens eenvoudig terug of schakel wanneer je wilt tussen apparaten. Deze back-up omvat app-gegevens. Back-ups worden geüpload naar Google en versleuteld met het wachtwoord van het Google-account van je kind.</translation> <translation id="4634771451598206121">Opnieuw inloggen...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> is niet beschikbaar voor gastgebruikers.</translation> +<translation id="4635444580397524003">Back-up voor Linux is hersteld.</translation> <translation id="4636930964841734540">Info</translation> <translation id="4637083375689622795">Meer acties, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">ADB-foutopsporing inschakelen</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Geavanceerde printeropties weergeven</translation> <translation id="4891089016822695758">Bètaforum</translation> <translation id="4892229439761351791">Site kan Bluetooth gebruiken</translation> +<translation id="489258173289528622">Inactieve actie op batterij</translation> <translation id="4893336867552636863">Hiermee worden je browsegegevens op dit apparaat definitief verwijderd.</translation> <translation id="4893522937062257019">Op het vergrendelingsscherm</translation> <translation id="489454699928748701">Toestaan dat sites bewegingssensoren gebruiken</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Foutopsporingsfuncties inschakelen</translation> <translation id="5864195618110239517">Verbinding met datalimiet gebruiken</translation> <translation id="5864471791310927901">Opzoeken van DHCP mislukt</translation> +<translation id="5864754048328252126">Inactieve actie tijdens opladen</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> wordt straks onderbroken</translation> <translation id="586567932979200359">Je voert <ph name="PRODUCT_NAME" /> uit via de schijfkopie. Als je dit programma installeert op je computer, kun je dit uitvoeren zonder de schijfkopie te gebruiken en blijft het programma bijgewerkt.</translation> <translation id="5865733239029070421">Hiermee worden automatisch gebruiksstatistieken en crashrapporten naar Google verzonden</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Deze pagina vastzetten op het startscherm...</translation> <translation id="6122081475643980456">Je internetverbinding wordt beheerd</translation> <translation id="6122095009389448667">Bekijken van het klembord door deze site blijven blokkeren</translation> +<translation id="6122831415929794347">Safe Browsing uitschakelen?</translation> <translation id="6122875415561139701">Schrijfbewerking is niet toegestaan op: <ph name="DEVICE_NAME" />.</translation> <translation id="6124650939968185064">De volgende extensies zijn afhankelijk van deze extensie:</translation> <translation id="6124698108608891449">Deze site heeft meer rechten nodig.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Je gegevens lezen en wijzigen op <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> en <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Afbeeldingsbestanden</translation> <translation id="6410328738210026208">Kanaal wijzigen en Powerwash uitvoeren</translation> +<translation id="6410390304316730527">Safe Browsing beschermt je tegen aanvallers die je proberen te misleiden zodat je iets gevaarlijks doet, zoals schadelijke software installeren of persoonlijke informatie zoals wachtwoorden, telefoonnummers of creditcards openbaar maken. Als je deze functie uitschakelt, moet je voorzichtig zijn als je op onbekende of onbetrouwbare sites browst.</translation> <translation id="6410668567036790476">Zoekmachine toevoegen</translation> <translation id="641081527798843608">Overeenkomst van onderwerp</translation> <translation id="6412673304250309937">Controleert URL's aan de hand van een lijst met onveilige sites die is opgeslagen in Chrome. Als een site je wachtwoord probeert te stelen of als je een schadelijk bestand downloadt, kan Chrome ook URL's, inclusief delen van de paginacontent, naar Safe Browsing sturen.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">De herstelactie kan niet worden voltooid door een fout</translation> <translation id="8951465597020890363">Gastmodus toch sluiten?</translation> <translation id="8952831374766033534">Configuratie-optie niet ondersteund: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Tijdens het opladen</translation> <translation id="895347679606913382">Starten...</translation> <translation id="8957762313041272117">Live ondertiteling</translation> <translation id="895944840846194039">JavaScript-geheugen</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 34cce849..73b7b61 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -609,6 +609,11 @@ <translation id="1805888043020974594">Utskriftstjener</translation> <translation id="1805967612549112634">Bekreft PIN-koden</translation> <translation id="1806335016774576568">Bytt til en annen åpen app</translation> +<translation id="1809483812148634490">Apper du har lastet ned fra Google Play, blir slettet fra denne Chromebooken. + <ph name="LINE_BREAKS1" /> + Det kan hende at innhold du har kjøpt (for eksempel filmer, TV-serier, musikk, bøker eller andre kjøp i apper), også slettes. + <ph name="LINE_BREAKS2" /> + Dette har ikke innvirkning på apper eller innhold på andre enheter.</translation> <translation id="1809734401532861917">Legg til bokmerker, loggen, passord og andre innstillinger i <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Tjenester</translation> <translation id="18139523105317219">Navn på EDI-enhet</translation> @@ -810,7 +815,7 @@ <translation id="2090165459409185032">For å gjenopprette kontoinformasjonen din, gå til: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Systemets sikkerhetsinnstillinger</translation> <translation id="2091887806945687916">Lyd</translation> -<translation id="2096478741073211388">Forslag til personopplysninger hjelper deg å skrive raskere ved å foreslå navnet ditt, adressen din eller telefonnummeret ditt når du skriver inn visse spesifikke ord. Det er bare du som kan se dine egne private, personlige forslag for kontoen din.</translation> +<translation id="2096478741073211388">Forslag til personopplysninger hjelper deg med å skrive raskere ved å foreslå navnet ditt, adressen din eller telefonnummeret ditt når du skriver inn visse spesifikke ord. Det er bare du som kan se dine egne private, personlige forslag for kontoen din.</translation> <translation id="2096715839409389970">Slett informasjonskapsler fra tredjeparter</translation> <translation id="2097372108957554726">Du må logge på Chrome for å registrere nye enheter</translation> <translation id="2099172618127234427">Du er i ferd med å slå på Chrome OS-feilsøkingsfunksjoner som kommer til å konfigurere sshd daemon og muliggjøre oppstart fra USB-stasjoner.</translation> @@ -1390,6 +1395,7 @@ <translation id="2825848369316359348">Finn navnet som er trykket på baksiden av sikkerhetsnøkkelen din</translation> <translation id="2828650939514476812">Koble til Wi-Fi-nettverk</translation> <translation id="2835294513443818940">Denne filen kan ikke lastes ned sikkert.</translation> +<translation id="2835547721736623118">Tjeneste for talegjenkjenning</translation> <translation id="2836269494620652131">Programstopp</translation> <translation id="2836635946302913370">Pålogging med dette brukernavnet er deaktivert av administratoren din.</translation> <translation id="283669119850230892">Fullfør tilkoblingen til Internett nedenfor for å bruke nettverket <ph name="NETWORK_ID" />.</translation> @@ -1534,6 +1540,7 @@ <translation id="3019285239893817657">knapp til underordnet side</translation> <translation id="3020183492814296499">Snarveier</translation> <translation id="3020990233660977256">Serienummer: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Ved batteridrift</translation> <translation id="3021066826692793094">Sommerfugl</translation> <translation id="3021678814754966447">&Vis rammekilde</translation> <translation id="3022978424994383087">Det skjønte jeg ikke.</translation> @@ -2728,6 +2735,7 @@ <translation id="4633757335284074492">Sikkerhetskopiér til Google Disk. Gjenopprett data enkelt eller bytt enhet når som helst. Denne sikkerhetskopien inkluderer appdata. Sikkerhetskopier lastes opp til Google og krypteres med passordet for Google-kontoen til barnet ditt.</translation> <translation id="4634771451598206121">Logg på igjen</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> er ikke tilgjengelig for gjestebrukere.</translation> +<translation id="4635444580397524003">Linux-sikkerhetskopien er gjenopprettet.</translation> <translation id="4636930964841734540">Info</translation> <translation id="4637083375689622795">Flere handlinger, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Slå på ADB-feilsøking</translation> @@ -2903,6 +2911,7 @@ <translation id="4890773143211625964">Vis avanserte skriveralternativer</translation> <translation id="4891089016822695758">Forumet for betaversjoner</translation> <translation id="4892229439761351791">Nettstedet kan bruke Bluetooth</translation> +<translation id="489258173289528622">Inaktivitetshandling ved batteridrift</translation> <translation id="4893336867552636863">Dette sletter nettlesingsdataene dine permanent fra denne enheten.</translation> <translation id="4893522937062257019">På låseskjermen</translation> <translation id="489454699928748701">Gi nettsteder tilgang til bevegelsessensorer</translation> @@ -3609,6 +3618,7 @@ <translation id="5863445608433396414">Slå på feilsøkingsfunksjoner</translation> <translation id="5864195618110239517">Bruk tilkobling med datamåling</translation> <translation id="5864471791310927901">DHCP-oppslag mislyktes</translation> +<translation id="5864754048328252126">Inaktivitetshandling når enheten lades</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> settes snart på pause</translation> <translation id="586567932979200359">Du kjører <ph name="PRODUCT_NAME" /> fra diskavbildningen. Hvis du installer produktet på datamaskinen, kan du kjøre det uten diskavbildningen og sikre at det holdes oppdatert.</translation> <translation id="5865733239029070421">Sender automatisk brukerstatistikk og programstopprapporter til Google</translation> @@ -3808,6 +3818,7 @@ <translation id="6120205520491252677">Fest denne siden til startsiden</translation> <translation id="6122081475643980456">Internett-tilkoblingen din kontrolleres</translation> <translation id="6122095009389448667">Fortsett å blokkere dette nettstedet fra å se utklippstavlen</translation> +<translation id="6122831415929794347">Vil du slå av Safe Browsing?</translation> <translation id="6122875415561139701">Skriveoperasjonen er ikke tillatt på: «<ph name="DEVICE_NAME" />».</translation> <translation id="6124650939968185064">Disse utvidelsene er avhengige av denne utvidelsen:</translation> <translation id="6124698108608891449">Dette nettstedet trenger flere tillatelser.</translation> @@ -4011,6 +4022,7 @@ <translation id="6408118934673775994">lese og endre opplysningene dine på <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> og <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Bildefiler</translation> <translation id="6410328738210026208">Bytt kanal og bruk Powerwash</translation> +<translation id="6410390304316730527">Safe Browsing beskytter deg mot angripere som kan prøve å lure deg til å gjøre farlige ting, som å installere skadelig programvare eller avsløre personopplysninger, for eksempel passord, telefonnumre eller kredittkortinformasjon. Hvis du slår det av, må du være forsiktig når du surfer på ukjente eller useriøse nettsteder.</translation> <translation id="6410668567036790476">Legg til søkemotor</translation> <translation id="641081527798843608">Emnetreff</translation> <translation id="6412673304250309937">Kontrollerer nettadresser opp mot en liste i Chrome over utrygge nettsteder. Hvis nettsteder prøver å stjele passordet ditt, eller når du laster ned skadelige filer, kan Chrome også sende nettadresser, inkludert deler av sideinnholdet, til Safe Browsing.</translation> @@ -5931,6 +5943,7 @@ <translation id="8951256747718668828">Kunne ikke fullføre gjenopprettingen på grunn av en feil</translation> <translation id="8951465597020890363">Vil du avslutte gjestemodus likevel?</translation> <translation id="8952831374766033534">Konfigurasjonsalternativet støttes ikke: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Når enheten lades</translation> <translation id="895347679606913382">Starter...</translation> <translation id="8957762313041272117">Direkteteksting</translation> <translation id="895944840846194039">JavaScript-minne</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index 6764fc17..f2d4c12b 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -1242,7 +1242,7 @@ <translation id="265390580714150011">ଫିଲ୍ଡ ମୂଲ୍ୟ</translation> <translation id="2654166010170466751">ପେମେଣ୍ଟ ହ୍ୟାଣ୍ଡଲର୍ ଇନ୍ଷ୍ଟଲ୍ କରିବାକୁ ସାଇଟ୍ଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation> <translation id="2654553774144920065">ଅନୁରୋଧ ପ୍ରିଣ୍ଟ କରନ୍ତୁ</translation> -<translation id="2659381484350128933"><ph name="FOOTNOTE_POINTER" /> ବୈଶିଷ୍ଟ୍ୟଗୁଡ଼ିକ ଡିଭାଇସ୍ ଅନୁସାରେ ଭିନ୍ନ ହୋଇପାରେ</translation> +<translation id="2659381484350128933"><ph name="FOOTNOTE_POINTER" /> ଫିଚରଗୁଡ଼ିକ ଡିଭାଇସ୍ ଅନୁସାରେ ଭିନ୍ନ ହୋଇପାରେ</translation> <translation id="2660779039299703961">ଇଭେଣ୍ଟ</translation> <translation id="266079277508604648">ପ୍ରିଣ୍ଟର୍ରେ ସଂଯୋଗ କରିପାରିବ ନାହିଁ। ଏହା ଯାଞ୍ଚ କରନ୍ତୁ ଯେ ପ୍ରିଣ୍ଟର୍ ଚାଲୁ ଅଛି ଏବଂ Wi-Fi କିମ୍ବା USB ଦ୍ୱାରା ଆପଣଙ୍କର Chromebookରେ ସଂଯୋଗ କରାଯାଇଛି।</translation> <translation id="2661714428027871023">ଲାଇଟ୍ ମୋଡ୍ରେ ଦ୍ରୁତତର ବ୍ରାଉଜ୍ କରନ୍ତୁ ଏବଂ କମ୍ ଡାଟା ବ୍ୟବହାର କରନ୍ତୁ। ଅଧିକ ଜାଣିବା ପାଇଁ କ୍ଲିକ୍ କରନ୍ତୁ।</translation> @@ -6078,7 +6078,7 @@ <translation id="9157096865782046368">0.8 ସେକେଣ୍ଡ</translation> <translation id="9157697743260533322">ସମସ୍ତ ଉପଯୋଗକର୍ତ୍ତାମାନଙ୍କ ପାଇଁ ସ୍ୱଚାଳିତ ଭାବେ ଅପ୍ଡେଟ୍ ସେଟ୍ ଅପ୍ ବିଫଳ (preflight ଲଞ୍ଚରେ ତ୍ରୁଟି: <ph name="ERROR_NUMBER" />)</translation> <translation id="9158715103698450907">ଓହୋଃ! ପ୍ରାମାଣିକତା ସମୟରେ ଏକ ନେଟ୍ୱର୍କ ଯୋଗାଯୋଗ ସମସ୍ୟା ହୋଇଛି। ଦୟାକରି ଆପଣଙ୍କ ନେଟ୍ୱର୍କ ସଂଯୋଗ ଯାଞ୍ଚ କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> -<translation id="916607977885256133">ଛବି ମଧ୍ୟରେ ଛବି</translation> +<translation id="916607977885256133">ପିକଚର୍ ଇନ୍ ପିକଚର୍</translation> <translation id="9168436347345867845">ଏହାକୁ ପରେ କରନ୍ତୁ</translation> <translation id="9169496697824289689">କୀବୋର୍ଡ ସର୍ଟକଟ୍ଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ</translation> <translation id="916964310188958970">ଏହି ମତାମତ କାହିଁ କି?</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 846820e7..2a5f7bb 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -94,7 +94,7 @@ <translation id="1122960773616686544">ਬੁੱਕਮਾਰਕ ਨਾਮ</translation> <translation id="1124772482545689468">ਵਰਤੋਂਕਾਰ</translation> <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ਵਰਗਾ ਲੱਗਦਾ ਹੈ (ਮੂਲ)</translation> -<translation id="1126809382673880764">ਤੁਹਾਨੂੰ ਖਤਰਨਾਕ ਵੈੱਬਸਾਈਟਾਂ, ਡਾਊਨਲੋਡਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਤੋਂ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਰੱਖਿਆ ਜਾਂਦਾ। ਹੋਰ Google ਸੇਵਾਵਾਂ ਜਿਵੇਂ ਕਿ Gmail ਅਤੇ 'ਖੋਜ' ਜਿੱਥੇ ਵੀ ਉਪਲਬਧ ਹੋਵੇ ਤੁਹਾਨੂੰ ਫਿਰ ਵੀ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਸੁਰੱਖਿਆ ਪ੍ਰਾਪਤ ਹੋਵੇਗੀ।</translation> +<translation id="1126809382673880764">ਤੁਹਾਨੂੰ ਖਤਰਨਾਕ ਵੈੱਬਸਾਈਟਾਂ, ਡਾਊਨਲੋਡਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਤੋਂ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਰੱਖਿਆ ਜਾਂਦਾ। ਹੋਰ Google ਸੇਵਾਵਾਂ ਜਿਵੇਂ ਕਿ Gmail ਅਤੇ Search ਵਿੱਚ ਜਿੱਥੇ ਵੀ ਉਪਲਬਧ ਹੋਵੇ ਤੁਹਾਨੂੰ ਫਿਰ ਵੀ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਸੁਰੱਖਿਆ ਪ੍ਰਾਪਤ ਹੋਵੇਗੀ।</translation> <translation id="1128109161498068552">ਕਿਸੇ ਵੀ ਸਾਈਟ ਨੂੰ MIDI ਡਿਵਾਈਸਾਂ ਤੇ ਪਹੁੰਚਣ ਲਈ ਸਿਸਟਮ ਐਕਸਕਲੂਸਿਵ ਸੁਨੇਹੇ ਵਰਤਣ ਦੀ ਆਗਿਆ ਨਾ ਦਿਓ</translation> <translation id="1128128132059598906">EAP-TTLS</translation> <translation id="1128591060186966949">ਖੋਜ ਇੰਜਣ ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index d26351a..0f87eba15 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -612,6 +612,7 @@ <translation id="1805888043020974594">Serwer druku</translation> <translation id="1805967612549112634">Potwierdź kod PIN</translation> <translation id="1806335016774576568">Przełącz na inną otwartą aplikację</translation> +<translation id="1809483812148634490">Aplikacje pobrane z Google Play zostaną usunięte z tego Chromebooka.<ph name="LINE_BREAKS1" />Kupione treści, np. filmy, seriale, muzyka, książki i inne zakupy w aplikacjach, również mogą zostać usunięte.<ph name="LINE_BREAKS2" />Nie ma to wpływu na aplikacje ani treści na innych urządzeniach.</translation> <translation id="1809734401532861917">Dodaj moje zakładki, historię, hasła i inne ustawienia do profilu <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Usługi</translation> <translation id="18139523105317219">Nazwa strony EDI</translation> @@ -1393,6 +1394,7 @@ <translation id="2825848369316359348">Nazwę klucza bezpieczeństwa znajdziesz z tyłu jego obudowy</translation> <translation id="2828650939514476812">Połącz z siecią Wi-Fi</translation> <translation id="2835294513443818940">Nie można pobrać tego pliku w bezpieczny sposób.</translation> +<translation id="2835547721736623118">Usługa rozpoznawania mowy</translation> <translation id="2836269494620652131">Awaria</translation> <translation id="2836635946302913370">Możliwość logowania przy użyciu tej nazwy użytkownika została wyłączona przez administratora.</translation> <translation id="283669119850230892">Aby korzystać z sieci <ph name="NETWORK_ID" />, zakończ poniższe połączenie z internetem.</translation> @@ -1537,6 +1539,7 @@ <translation id="3019285239893817657">Przycisk podstrony</translation> <translation id="3020183492814296499">Skróty</translation> <translation id="3020990233660977256">Numer seryjny: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Na baterii</translation> <translation id="3021066826692793094">Motyl</translation> <translation id="3021678814754966447">&Wyświetl źródło ramki</translation> <translation id="3022978424994383087">Nie rozumiem.</translation> @@ -2733,6 +2736,7 @@ <translation id="4633757335284074492">Twórz kopie zapasowe na Dysku Google. W dowolnej chwili możesz w prosty sposób przywrócić dane lub używać ich na innym urządzeniu. Kopia zapasowa zawiera dane aplikacji. Kopie zapasowe są szyfrowane za pomocą hasła do konta Google Twojego dziecka i przesyłane do Google.</translation> <translation id="4634771451598206121">Zaloguj się ponownie</translation> <translation id="4635398712689569051">Strona <ph name="PAGE_NAME" /> jest niedostępna dla gości.</translation> +<translation id="4635444580397524003">Kopia zapasowa Linuxa została przywrócona.</translation> <translation id="4636930964841734540">Informacje</translation> <translation id="4637083375689622795">Więcej czynności, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Włącz debugowanie ADB</translation> @@ -2908,6 +2912,7 @@ <translation id="4890773143211625964">Pokaż zaawansowane opcje drukarki</translation> <translation id="4891089016822695758">Forum użytkowników wersji beta</translation> <translation id="4892229439761351791">Strona może używać Bluetootha</translation> +<translation id="489258173289528622">Bezczynność na baterii</translation> <translation id="4893336867552636863">Spowoduje to trwałe usunięcie danych przeglądania z tego urządzenia.</translation> <translation id="4893522937062257019">Na ekranie blokady</translation> <translation id="489454699928748701">Zezwalaj stronom na używanie czujników ruchu</translation> @@ -3614,6 +3619,7 @@ <translation id="5863445608433396414">Włącz funkcje debugowania</translation> <translation id="5864195618110239517">Użyj połączenia z pomiarem użycia danych</translation> <translation id="5864471791310927901">Wyszukiwanie DHCP nie powiodło się</translation> +<translation id="5864754048328252126">Bezczynność podczas ładowania</translation> <translation id="5865508026715185451">Aplikacja <ph name="APP_NAME" /> wkrótce zostanie wstrzymana</translation> <translation id="586567932979200359">Produkt <ph name="PRODUCT_NAME" /> został uruchomiony z obrazu dysku. Zainstalowanie go na komputerze umożliwi uruchamianie bez użycia obrazu dysku i bieżące aktualizowanie.</translation> <translation id="5865733239029070421">Automatycznie przesyła do Google statystyki użytkowania i raporty o awariach</translation> @@ -3813,6 +3819,7 @@ <translation id="6120205520491252677">Przypnij tę stronę do ekranu startowego...</translation> <translation id="6122081475643980456">Twoje połączenie internetowe jest kontrolowane</translation> <translation id="6122095009389448667">Nadal blokuj tej stronie dostęp do schowka</translation> +<translation id="6122831415929794347">Wyłączyć Bezpieczne przeglądanie?</translation> <translation id="6122875415561139701">Nie jest dozwolona operacja zapisu na: „<ph name="DEVICE_NAME" />”.</translation> <translation id="6124650939968185064">To rozszerzenie jest wymagane przez następujące rozszerzenia:</translation> <translation id="6124698108608891449">Ta strona potrzebuje większych uprawnień.</translation> @@ -4016,6 +4023,7 @@ <translation id="6408118934673775994">Odczytywanie i modyfikowanie Twoich danych na: <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> i <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Pliki graficzne</translation> <translation id="6410328738210026208">Zmień kanał i wykonaj Powerwash</translation> +<translation id="6410390304316730527">Bezpieczne przeglądanie chroni Cię przed osobami przeprowadzającymi ataki, które mogą podstępem nakłonić Cię do wykonania niebezpiecznych czynności, takich jak zainstalowanie oprogramowania czy ujawnienie danych osobowych (na przykład haseł, numerów telefonów lub danych kart kredytowych). Gdy wyłączasz tę funkcję, zachowaj ostrożność, przeglądając nieznane lub cieszące się złą sławą strony.</translation> <translation id="6410668567036790476">Dodaj wyszukiwarkę</translation> <translation id="641081527798843608">Dopasowanie do tematu</translation> <translation id="6412673304250309937">Sprawdza, czy URL jest na liście potencjalnie niebezpiecznych stron zapisanej w Chrome. Jeśli strona próbuje wykraść Twoje hasło lub pobierasz szkodliwy plik, Chrome może też wysłać URL wraz z fragmentami zawartości strony do usługi Bezpieczne przeglądanie.</translation> @@ -5936,6 +5944,7 @@ <translation id="8951256747718668828">Przywracanie nie powiodło się z powodu błędu</translation> <translation id="8951465597020890363">Zamknąć tryb gościa mimo to?</translation> <translation id="8952831374766033534">Nieobsługiwana opcja konfiguracyjna: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Podczas ładowania</translation> <translation id="895347679606913382">Zaczynam...</translation> <translation id="8957762313041272117">Napisy na żywo</translation> <translation id="895944840846194039">Pamięć JavaScript</translation> @@ -5976,7 +5985,7 @@ <translation id="9003940392834790328">Sieć <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, siła sygnału: <ph name="SIGNAL_STRENGTH" />%, zarządzana przez administratora, szczegóły</translation> <translation id="9004952710076978168">Odebrano powiadomienie dla nieznanej drukarki.</translation> <translation id="9008201768610948239">Ignoruj</translation> -<translation id="9009369504041480176">Przesyłanie (<ph name="PROGRESS_PERCENT" />%)...</translation> +<translation id="9009369504041480176">Przesyłam (<ph name="PROGRESS_PERCENT" />%)...</translation> <translation id="9011163749350026987">Zawsze pokazuj ikonę</translation> <translation id="9013707997379828817">Administrator przywrócił wcześniejszą wersję oprogramowania na tym urządzeniu. Zapisz ważne pliki, a następnie uruchom ponownie urządzenie. Wszystkie dane zostaną usunięte z pamięci.</translation> <translation id="901668144954885282">Tworzenie kopii zapasowej na Dysku Google</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 1e4ec892..1581163 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Servidor de impressão</translation> <translation id="1805967612549112634">Confirmar PIN</translation> <translation id="1806335016774576568">Alternar para outro app aberto</translation> +<translation id="1809483812148634490">Os apps transferidos por download do Google Play serão excluídos deste Chromebook. + <ph name="LINE_BREAKS1" /> + O conteúdo comprado, como filmes, programas de TV, músicas, livros ou outras compras em aplicativos, também poderá ser excluído. + <ph name="LINE_BREAKS2" /> + Isso não afetará apps ou conteúdo em outros dispositivos.</translation> <translation id="1809734401532861917">Adicionar meus favoritos, histórico, senhas e outras configurações a <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Serviços</translation> <translation id="18139523105317219">Nome da Parte EDI</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Localize o nome impresso na parte de trás da sua chave de segurança</translation> <translation id="2828650939514476812">Conectar à rede Wi-Fi</translation> <translation id="2835294513443818940">Não foi possível fazer o download do arquivo por motivos de segurança.</translation> +<translation id="2835547721736623118">Serviço de reconhecimento de fala</translation> <translation id="2836269494620652131">Falha</translation> <translation id="2836635946302913370">O login com este nome foi desativado pelo administrador.</translation> <translation id="283669119850230892">Para usar a rede <ph name="NETWORK_ID" />, conclua primeiro sua conexão com a Internet abaixo.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Botão de subpágina</translation> <translation id="3020183492814296499">Atalhos</translation> <translation id="3020990233660977256">Número de série: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Enquanto estiver na bateria</translation> <translation id="3021066826692793094">Borboleta</translation> <translation id="3021678814754966447">&Exibir código fonte do frame</translation> <translation id="3022978424994383087">Não entendi.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Fazer backup no Google Drive Restaure dados ou troque de dispositivo a qualquer momento com facilidade. O backup inclui dados do app. Os backups são enviados ao Google e criptografados usando a senha da Conta do Google da criança.</translation> <translation id="4634771451598206121">Fazer login novamente...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> não está disponível para usuários visitantes.</translation> +<translation id="4635444580397524003">O backup do Linux foi restaurado.</translation> <translation id="4636930964841734540">Informações</translation> <translation id="4637083375689622795">Mais ações, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Ativar depuração do adb</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Mostrar opções avançadas de impressora</translation> <translation id="4891089016822695758">Fórum do Beta</translation> <translation id="4892229439761351791">O site pode usar o Bluetooth</translation> +<translation id="489258173289528622">Ação de inatividade enquanto estiver na bateria</translation> <translation id="4893336867552636863">Isso excluirá permanentemente os dados de navegação deste dispositivo.</translation> <translation id="4893522937062257019">Na tela de bloqueio</translation> <translation id="489454699928748701">Permitir que sites usem os sensores de movimento</translation> @@ -3615,6 +3624,7 @@ <translation id="5863445608433396414">Ativar recursos de depuração</translation> <translation id="5864195618110239517">Usar conexão limitada</translation> <translation id="5864471791310927901">Falha ao procurar DHCP</translation> +<translation id="5864754048328252126">Ação de inatividade ao carregar</translation> <translation id="5865508026715185451">O app <ph name="APP_NAME" /> será pausado em breve</translation> <translation id="586567932979200359">Você está executando o <ph name="PRODUCT_NAME" /> a partir de uma imagem de disco. Instalá-lo no computador permite executá-lo sem a imagem de disco e garante que ele se manterá atualizado.</translation> <translation id="5865733239029070421">Envia estatísticas de uso e relatórios de erros automaticamente para o Google</translation> @@ -3814,6 +3824,7 @@ <translation id="6120205520491252677">Fixar esta página na tela inicial...</translation> <translation id="6122081475643980456">Sua conexão com a Internet está sendo controlada</translation> <translation id="6122095009389448667">Continuar impedindo que esse site veja a área de transferência</translation> +<translation id="6122831415929794347">Desativar "Navegação segura"?</translation> <translation id="6122875415561139701">A operação de escrita não é permitida em: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">As extensões a seguir dependem desta extensão:</translation> <translation id="6124698108608891449">Este site precisa de outras permissões.</translation> @@ -4018,6 +4029,7 @@ <translation id="6408118934673775994">Ler e alterar seus dados em <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Arquivos de imagem</translation> <translation id="6410328738210026208">Mudar de canal e executar PowerWash</translation> +<translation id="6410390304316730527">O "Navegação segura" protege contra invasores que podem levar você a fazer algo perigoso, como instalar um software malicioso ou revelar informações pessoais como senhas, números de telefone ou cartões de crédito. Se desativá-lo, tenha cuidado ao navegar em sites desconhecidos ou com má reputação.</translation> <translation id="6410668567036790476">Adicionar mecanismo de pesquisa</translation> <translation id="641081527798843608">Correspondência de assunto</translation> <translation id="6412673304250309937">Verifica se os URLs estão em uma lista de sites não seguros armazenada no Chrome. Se um site tentar roubar sua senha ou se você fizer o download de um arquivo nocivo, o Chrome também poderá enviar URLs, incluindo partes do conteúdo da página, para o "Navegação segura".</translation> @@ -5938,6 +5950,7 @@ <translation id="8951256747718668828">Ocorreu um erro e não foi possível concluir a restauração</translation> <translation id="8951465597020890363">Sair do modo visitante mesmo assim?</translation> <translation id="8952831374766033534">Opção de configuração indisponível: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Ao carregar</translation> <translation id="895347679606913382">Iniciando...</translation> <translation id="8957762313041272117">Legendas em tempo real</translation> <translation id="895944840846194039">Memória JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 0a2c111b..bd18a735 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Servidor de impressão</translation> <translation id="1805967612549112634">Confirmar PIN</translation> <translation id="1806335016774576568">Mudar para outra app aberta</translation> +<translation id="1809483812148634490">As apps que transferiu do Google Play serão eliminadas deste Chromebook. + <ph name="LINE_BREAKS1" /> + O conteúdo que comprou, como filmes, programas de TV, música, livros ou outras compras na app, também pode ser eliminado. + <ph name="LINE_BREAKS2" /> + Isto não afeta as apps ou o conteúdo noutros dispositivos.</translation> <translation id="1809734401532861917">Adicionar os marcadores, o histórico, as palavras-passe e outras definições a <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Serviços</translation> <translation id="18139523105317219">Nome da parte EDI</translation> @@ -1392,6 +1397,7 @@ <translation id="2825848369316359348">Procure o nome impresso na parte posterior da chave de segurança.</translation> <translation id="2828650939514476812">Estabelecer ligação à rede Wi-Fi</translation> <translation id="2835294513443818940">Não é possível transferir este ficheiro em segurança.</translation> +<translation id="2835547721736623118">Serviço de reconhecimento de voz</translation> <translation id="2836269494620652131">Falha</translation> <translation id="2836635946302913370">O início de sessão com este nome de utilizador foi desativado pelo seu gestor.</translation> <translation id="283669119850230892">Para utilizar a rede <ph name="NETWORK_ID" />, conclua primeiro a sua ligação à internet abaixo.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Botão da subpágina</translation> <translation id="3020183492814296499">Atalhos</translation> <translation id="3020990233660977256">Número de série: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Enquanto estiver com bateria</translation> <translation id="3021066826692793094">Borboleta</translation> <translation id="3021678814754966447">&Ver Origem da Moldura</translation> <translation id="3022978424994383087">Não entendido.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Faça uma cópia de segurança para o Google Drive. Restaure facilmente os dados ou troque de dispositivo em qualquer altura. Esta cópia de segurança inclui dados de apps. As cópias de segurança são carregadas para a Google e encriptadas com a palavra-passe da Conta Google da criança.</translation> <translation id="4634771451598206121">Iniciar sessão novamente...</translation> <translation id="4635398712689569051">A página <ph name="PAGE_NAME" /> não está disponível para os utilizadores convidados.</translation> +<translation id="4635444580397524003">A cópia de segurança do Linux foi restaurada com êxito.</translation> <translation id="4636930964841734540">Informações</translation> <translation id="4637083375689622795">Mais ações, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Ativar a depuração do adb</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Mostrar opções avançadas da impressora</translation> <translation id="4891089016822695758">Fórum da versão beta</translation> <translation id="4892229439761351791">O site pode utilizar Bluetooth.</translation> +<translation id="489258173289528622">Ação de inatividade enquanto estiver com bateria</translation> <translation id="4893336867552636863">Esta ação elimina permanentemente os dados de navegação deste dispositivo.</translation> <translation id="4893522937062257019">No ecrã de bloqueio</translation> <translation id="489454699928748701">Permitir que os sites utilizem os sensores de movimentos</translation> @@ -3615,6 +3624,7 @@ <translation id="5863445608433396414">Ativar funcionalidades de depuração</translation> <translation id="5864195618110239517">Utilizar ligação com acesso limitado</translation> <translation id="5864471791310927901">A procura DHCP falhou</translation> +<translation id="5864754048328252126">Ação de inatividade ao carregar</translation> <translation id="5865508026715185451">A app <ph name="APP_NAME" /> será colocada em pausa em breve</translation> <translation id="586567932979200359">Está a executar o <ph name="PRODUCT_NAME" /> a partir da respectiva imagem de disco. Instalá-lo no computador permite executá-lo sem a imagem de disco e assegura que o mesmo é mantido atualizado.</translation> <translation id="5865733239029070421">Envia automaticamente estatísticas de utilização e relatórios de falhas para a Google.</translation> @@ -3814,6 +3824,7 @@ <translation id="6120205520491252677">Fixar esta página ao ecrã Inicial...</translation> <translation id="6122081475643980456">A sua ligação à Internet está a ser controlada</translation> <translation id="6122095009389448667">Continuar a impedir este site de ver a área de transferência</translation> +<translation id="6122831415929794347">Pretende desativar a Navegação segura?</translation> <translation id="6122875415561139701">A operação de escrita não é permitida em: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">As seguintes extensões dependem desta extensão:</translation> <translation id="6124698108608891449">Este site precisa de mais autorizações.</translation> @@ -4017,6 +4028,7 @@ <translation id="6408118934673775994">Ler e alterar os seus dados em <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Ficheiros de imagem</translation> <translation id="6410328738210026208">Alterar canal e Powerwash</translation> +<translation id="6410390304316730527">A Navegação segura permite-lhe proteger-se contra os atacantes que o podem enganar no sentido de fazer algo perigoso, como instalar software malicioso, ou revelar informações pessoais, como palavras-passe, números de telefone ou cartões de crédito. Se a desativar, tenha cuidado ao navegar em sites desconhecidos ou pouco credíveis.</translation> <translation id="6410668567036790476">Adicionar motor de pesquisa</translation> <translation id="641081527798843608">Correspondência de assunto</translation> <translation id="6412673304250309937">Verifica os URLs com listas de sites inseguros armazenados no Chrome. Se um site tentar roubar a sua palavra-passe, ou quando transferir um ficheiro prejudicial, o Chrome também pode enviar URLs, incluindo bits de conteúdo das páginas, para a Navegação segura.</translation> @@ -5268,7 +5280,7 @@ <translation id="8076835018653442223">O acesso a ficheiros locais no seu dispositivo foi desativado pelo seu administrador.</translation> <translation id="808089508890593134">Google</translation> <translation id="8081989000209387414">Pretende desativar a depuração do adb?</translation> -<translation id="8082106343289440791">Pretende sincronizar com o dispositivo "<ph name="DEVICE_NAME" />"?</translation> +<translation id="8082106343289440791">Sincronizar com o dispositivo "<ph name="DEVICE_NAME" />"?</translation> <translation id="8082390128630131497">A desativação da depuração do adb vai repor as definições de fábrica deste <ph name="DEVICE_TYPE" />. Todos os dados locais e contas de utilizador serão apagados.</translation> <translation id="8084114998886531721">Palavra-passe guardada</translation> <translation id="8086015605808120405">A configurar <ph name="PRINTER_NAME" />…</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Não foi possível concluir o restauro devido a um erro.</translation> <translation id="8951465597020890363">Pretende sair do modo convidado mesmo assim?</translation> <translation id="8952831374766033534">Opção de configuração não suportada: <ph name="ERROR_LINE" />.</translation> +<translation id="8953476467359856141">Ao carregar</translation> <translation id="895347679606913382">A iniciar...</translation> <translation id="8957762313041272117">Legendas instantâneas</translation> <translation id="895944840846194039">Memória JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index ae3c36d..94bf9c1 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Server de imprimare</translation> <translation id="1805967612549112634">Confirmă codul PIN</translation> <translation id="1806335016774576568">Comută la altă aplicație deschisă</translation> +<translation id="1809483812148634490">Aplicațiile pe care le-ai descărcat de pe Google Play vor fi șterse de pe acest Chromebook. + <ph name="LINE_BREAKS1" /> + Este posibil să se șteargă și conținutul achiziționat, cum ar fi filmele, serialele, cântecele, cărțile sau alte achiziții în aplicație. + <ph name="LINE_BREAKS2" /> + Nu sunt afectate aplicațiile sau conținutul de pe alte dispozitive.</translation> <translation id="1809734401532861917">Adaugă marcajele, istoricul, parolele și alte setări în <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Servicii</translation> <translation id="18139523105317219">Nume parte EDI</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Numele este scris pe partea din spate a cheii de securitate</translation> <translation id="2828650939514476812">Conectează-te la o rețea Wi-Fi</translation> <translation id="2835294513443818940">Fișierul nu se poate descărca în siguranță.</translation> +<translation id="2835547721736623118">Serviciul de recunoaștere vocală</translation> <translation id="2836269494620652131">Blocare</translation> <translation id="2836635946302913370">Conectarea cu acest nume de utilizator a fost dezactivată de către administratorul dvs.</translation> <translation id="283669119850230892">Pentru a utiliza rețeaua <ph name="NETWORK_ID" />, finalizați mai întâi conexiunea la internet mai jos.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Butonul Pagină secundară</translation> <translation id="3020183492814296499">Comenzi rapide</translation> <translation id="3020990233660977256">Numărul de serie: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">În timpul funcționării pe baterie</translation> <translation id="3021066826692793094">Fluture</translation> <translation id="3021678814754966447">&Afișează sursa cadrului</translation> <translation id="3022978424994383087">Nu am înțeles.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Fă backup în Google Drive. Restabilește datele sau schimbă dispozitivul cu ușurință, în orice moment. Acest backup include datele aplicațiilor. Backupurile sunt încărcate pe serverele Google și sunt criptate folosind parola pentru Contul Google al copilului tău.</translation> <translation id="4634771451598206121">Conectați-vă din nou...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> nu este disponibilă pentru utilizatorii invitați.</translation> +<translation id="4635444580397524003">Backupul Linux a fost restabilit.</translation> <translation id="4636930964841734540">Informații</translation> <translation id="4637083375689622795">Mai multe acțiuni, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Activează remedierea erorilor prin ADB</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Afișează opțiunile avansate pentru imprimantă</translation> <translation id="4891089016822695758">Forumul pentru versiunea beta</translation> <translation id="4892229439761351791">Site-ul poate folosi Bluetooth</translation> +<translation id="489258173289528622">Măsura pentru inactivitate în timpul funcționării pe baterie</translation> <translation id="4893336867552636863">Astfel, vor fi șterse definitiv datele de navigare de pe acest dispozitiv.</translation> <translation id="4893522937062257019">Pe ecranul de blocare</translation> <translation id="489454699928748701">Permite site-urilor să folosească senzorii de mișcare</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Activează funcțiile de remediere a erorilor</translation> <translation id="5864195618110239517">Folosește conexiunea contorizată</translation> <translation id="5864471791310927901">Căutarea DHCP nu a reușit</translation> +<translation id="5864754048328252126">Măsura pentru inactivitate în timpul încărcării</translation> <translation id="5865508026715185451">Aplicația <ph name="APP_NAME" /> se va întrerupe în curând</translation> <translation id="586567932979200359">Rulează <ph name="PRODUCT_NAME" /> din imaginea sa de pe disc. Instalarea sa pe computer îți permite să îl rulezi fără imaginea de pe disc și asigură actualizarea acestuia.</translation> <translation id="5865733239029070421">Trimite automat statistici de utilizare și rapoarte de blocare la Google</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Fixați această pagină pe ecranul de pornire...</translation> <translation id="6122081475643980456">Conexiunea la internet este controlată</translation> <translation id="6122095009389448667">Blochează în continuare accesul la clipboard pentru acest site</translation> +<translation id="6122831415929794347">Dezactivezi Navigarea sigură?</translation> <translation id="6122875415561139701">Operațiunea de scriere nu este permisă pe: „<ph name="DEVICE_NAME" />”.</translation> <translation id="6124650939968185064">De această extensie depind următoarele extensii:</translation> <translation id="6124698108608891449">Acest site are nevoie de mai multe permisiuni.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Citește și modifică datele de pe <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> și <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Fișiere imagine</translation> <translation id="6410328738210026208">Schimbați canalul și porniți Powerwash</translation> +<translation id="6410390304316730527">Navigarea sigură te protejează împotriva atacatorilor care ar putea să te păcălească să faci lucruri periculoase, cum ar fi să instalezi software rău intenționat sau să dezvălui informații cu caracter personal, cum ar fi parole, numere de telefon sau carduri de credit. Dacă o dezactivezi, ai grijă atunci când navighezi pe site-uri nefamiliare sau nelegitime.</translation> <translation id="6410668567036790476">Adaugă motorul de căutare</translation> <translation id="641081527798843608">Potrivirea subiectului</translation> <translation id="6412673304250309937">Verifică adresele URL folosind o listă de site-uri nesigure, stocată în Chrome. Dacă un site încearcă să îți fure parola sau descarci un fișier dăunător, Chrome poate să trimită adresele URL, inclusiv fragmente din conținutul paginilor, către funcția Navigare sigură.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Nu s-a putut finaliza restabilirea din cauza unei erori</translation> <translation id="8951465597020890363">Ieși oricum din modul pentru invitați?</translation> <translation id="8952831374766033534">Opțiunea de configurare nu este acceptată: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">În timpul încărcării</translation> <translation id="895347679606913382">Se începe...</translation> <translation id="8957762313041272117">Subtitrări live</translation> <translation id="895944840846194039">Memorie JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 24874ef7..566182f 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -611,6 +611,11 @@ <translation id="1805888043020974594">Сервер печати</translation> <translation id="1805967612549112634">Введите PIN-код ещё раз</translation> <translation id="1806335016774576568">Переключение на другое открытое приложение</translation> +<translation id="1809483812148634490">Приложения, скачанные в Google Play, будут удалены с этого устройства Chromebook. + <ph name="LINE_BREAKS1" /> + Возможно, будут удалены приобретенные вами фильмы, сериалы, треки и книги, а также контент, купленный в приложениях. + <ph name="LINE_BREAKS2" /> + Контент и приложения на других устройствах сохранятся.</translation> <translation id="1809734401532861917">Добавить мои закладки, историю, пароли и другие настройки в <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Службы</translation> <translation id="18139523105317219">Имя стороны EDI</translation> @@ -1391,6 +1396,7 @@ <translation id="2825848369316359348">Найдите на обратной стороне электронного ключа его название.</translation> <translation id="2828650939514476812">Подключитесь к сети Wi-Fi</translation> <translation id="2835294513443818940">Невозможно скачать безопасно этот файл.</translation> +<translation id="2835547721736623118">Сервис распознавания речи</translation> <translation id="2836269494620652131">Сбой</translation> <translation id="2836635946302913370">Вход с этим именем пользователя запрещен администратором.</translation> <translation id="283669119850230892">Для использования сети <ph name="NETWORK_ID" /> предварительно подключитесь к Интернету.</translation> @@ -1535,6 +1541,7 @@ <translation id="3019285239893817657">Кнопка для перехода к подстранице</translation> <translation id="3020183492814296499">Ярлыки</translation> <translation id="3020990233660977256">Серийный номер: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Если устройство не заряжается</translation> <translation id="3021066826692793094">Бабочка</translation> <translation id="3021678814754966447">Просмотр кода фрейма</translation> <translation id="3022978424994383087">Повторите ещё раз.</translation> @@ -2731,6 +2738,7 @@ <translation id="4633757335284074492">Сохранение резервных копий на Google Диске. Позволяет в любой момент восстанавливать данные (в том числе из приложений) или переносить их с одного устройства на другое. Резервные копии загружаются в Google и шифруются с помощью пароля аккаунта Google вашего ребенка.</translation> <translation id="4634771451598206121">Войти снова</translation> <translation id="4635398712689569051">Страница "<ph name="PAGE_NAME" />" недоступна в гостевом режиме</translation> +<translation id="4635444580397524003">Данные из резервной копии Linux восстановлены.</translation> <translation id="4636930964841734540">Информация</translation> <translation id="4637083375689622795">Другие действия в аккаунте <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Включить отладку с ADB</translation> @@ -2906,6 +2914,7 @@ <translation id="4890773143211625964">Показать дополнительные настройки принтера</translation> <translation id="4891089016822695758">Форум бета-версии</translation> <translation id="4892229439761351791">Сайт может использовать устройство Bluetooth</translation> +<translation id="489258173289528622">Что делать при переходе в режим бездействия, когда устройство не заряжается</translation> <translation id="4893336867552636863">Все данные о работе в браузере будут удалены с устройства.</translation> <translation id="4893522937062257019">Экран блокировки</translation> <translation id="489454699928748701">Разрешить сайтам использовать датчики движения</translation> @@ -3612,6 +3621,7 @@ <translation id="5863445608433396414">Включить функции отладки</translation> <translation id="5864195618110239517">Использовать подключение с тарификацией</translation> <translation id="5864471791310927901">Поиск DHCP завершен со сбоем</translation> +<translation id="5864754048328252126">Что делать при переходе в режим бездействия, когда устройство заряжается</translation> <translation id="5865508026715185451"><ph name="APP_NAME" />: работа скоро будет приостановлена</translation> <translation id="586567932979200359">Вы запускаете <ph name="PRODUCT_NAME" /> с образа на диске. Установка его на компьютере позволит запускать браузер без использования образа и обеспечит его регулярное обновление.</translation> <translation id="5865733239029070421">Автоматически отправлять в Google статистику использования и отчеты о сбоях</translation> @@ -3811,6 +3821,7 @@ <translation id="6120205520491252677">Прикрепить эту страницу к экрану запуска…</translation> <translation id="6122081475643980456">С вашим интернет-соединением все не так просто</translation> <translation id="6122095009389448667">Не открывать этому сайту доступ к буферу обмена</translation> +<translation id="6122831415929794347">Отключить Безопасный просмотр?</translation> <translation id="6122875415561139701">Запись данных на устройстве <ph name="DEVICE_NAME" /> запрещена.</translation> <translation id="6124650939968185064">От этих расширений зависят следующие:</translation> <translation id="6124698108608891449">Для работы этого сайта требуются дополнительные разрешения.</translation> @@ -4014,11 +4025,12 @@ <translation id="6408118934673775994">Просмотр и изменение данных на сайтах <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> и <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Файлы изображений</translation> <translation id="6410328738210026208">Выбрать другой канал и включить Powerwash</translation> +<translation id="6410390304316730527">Безопасный просмотр помогает предотвратить установку вредоносного ПО и защищает от злоумышленников, которые могут попытаться обманным путем завладеть вашей персональной информацией, например паролями, номерами телефонов и данными банковских карт. Если вы решите отключить эту функцию, будьте особенно осторожны при просмотре незнакомых сайтов.</translation> <translation id="6410668567036790476">Добавить поисковую систему</translation> <translation id="641081527798843608">Совпадение тем</translation> <translation id="6412673304250309937">Сверяет URL со списком небезопасных сайтов в Chrome. Кроме того, если вы скачаете вредоносный файл или сайт попытается похитить ваш пароль, Chrome может отправить URL с образцами контента на проверку с помощью Безопасного просмотра.</translation> <translation id="6412931879992742813">Новое окно в режиме инкогнито</translation> -<translation id="6413591858632097328">Будут удалены все данные и файлы cookie, которые сохранены сайтом <ph name="ORIGIN_NAME" /> и установленными им приложениями.</translation> +<translation id="6413591858632097328">Будут удалены все данные и файлы cookie, которые сохранены сайтом <ph name="ORIGIN_NAME" /> и установленными с него приложениями.</translation> <translation id="641469293210305670">Установка обновлений и приложений</translation> <translation id="6414888972213066896">Запрос на просмотр сайта отправлен вашему родителю</translation> <translation id="6415900369006735853">Подключайтесь к Интернету через телефон.</translation> @@ -5933,6 +5945,7 @@ <translation id="8951256747718668828">При восстановлении данных произошла ошибка.</translation> <translation id="8951465597020890363">Все равно выйти из гостевого режима?</translation> <translation id="8952831374766033534">Конфигурация не поддерживается: <ph name="ERROR_LINE" />.</translation> +<translation id="8953476467359856141">Если устройство заряжается</translation> <translation id="895347679606913382">Запуск...</translation> <translation id="8957762313041272117">Автоматические субтитры</translation> <translation id="895944840846194039">Память JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 8639f624..ff03fbe 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -609,6 +609,11 @@ <translation id="1805888043020974594">මුද්රණ සේවාදායකය</translation> <translation id="1805967612549112634">රහස් අංකය තහවුරු කරන්න</translation> <translation id="1806335016774576568">වෙනත් විවෘත යෙදුමකට මාරු වන්න</translation> +<translation id="1809483812148634490">ඔබ Google Play වෙතින් බාගෙන ඇති අන්තර්ගතය මෙම Chromebook වෙතින් මකනු ලැබේ. + <ph name="LINE_BREAKS1" /> + ඔබ මිලදී ගත් චිත්රපට, TV දර්ශන, සංගීතය, පොත්, හෝ වෙනත් යෙදුම-තුළ මිලදී ගැනීම් යනාදී අන්තර්ගතයද මැකීමට හැකිය. + <ph name="LINE_BREAKS2" /> + මෙය වෙනත් උපාංග මත යෙදුම් හෝ අන්තර්ගතය කෙරෙහි බලනොපායි.</translation> <translation id="1809734401532861917">මගේ පිටුසන්, ඉතිහාසය, මුරපද සහ වෙනත් සැකසීම් <ph name="USER_EMAIL_ADDRESS" /> වෙත එක් කරන්න</translation> <translation id="1813278315230285598">සේවා</translation> <translation id="18139523105317219">EDI සාද නාමය</translation> @@ -1390,6 +1395,7 @@ <translation id="2825848369316359348">ඔබේ ආරක්ෂක යතුරේ පිටුපස මුද්රණ කර ඇති නම සොයා ගන්න</translation> <translation id="2828650939514476812">Wi-Fi ජාලයකට සම්බන්ධ වන්න</translation> <translation id="2835294513443818940">මෙම ගොනුව සුරක්ෂිතව බාගත නොහැක.</translation> +<translation id="2835547721736623118">කථන හඳුනා ගැනීමේ සේවය</translation> <translation id="2836269494620652131">බිඳවැටීම</translation> <translation id="2836635946302913370">මෙම භාවිතනම සමඟ එවීම ඔබේ පරිපාලක විසින් අක්රිය කරන ලදි.</translation> <translation id="283669119850230892"><ph name="NETWORK_ID" /> ජාලය භාවිතා කිරීම සඳහා, ඔබේ අන්තර්ජාල සම්බන්ධතාවය පහතින් සම්පූර්ණ කරන්න.</translation> @@ -1534,6 +1540,7 @@ <translation id="3019285239893817657">උප පිටු බොත්තම</translation> <translation id="3020183492814296499">කෙටි මං</translation> <translation id="3020990233660977256">කාණ්ඩ අංකය: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">බැටරිය මත සිටින විට</translation> <translation id="3021066826692793094">සමනළයා</translation> <translation id="3021678814754966447">රාමු මූලය දර්ශනය (&V)</translation> <translation id="3022978424994383087">එය ලබා ගත්තේ නැත.</translation> @@ -2731,6 +2738,7 @@ <translation id="4633757335284074492">Google Drive වෙත උපස්ථ කරන්න. ඕනෑම වේලාවක දත්ත පහසුවෙන් නැවත සකසන්න හෝ උපාංග අතර මාරු වන්න. මෙම උපස්ථයට යෙදුම් දත්ත ඇතුළුයි. උපස්ථ Google වෙත උඩුගත කෙරෙන අතර ඔබේ දරුවාගේ Google ගිණුමේ මුරපදය භාවිත කර සංකේතන කෙරේ.</translation> <translation id="4634771451598206121">නැවත පිවිසෙන්න...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> ආගන්තුක පරිශීලකයින්ට නොමැත.</translation> +<translation id="4635444580397524003">ලිනක්ස් උපස්ථය සාර්ථකව ප්රතිසාධන කර ඇත.</translation> <translation id="4636930964841734540">තතු</translation> <translation id="4637083375689622795">තවත් ක්රියා, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">ADB නිදොස් කිරීම සබල කරන්න</translation> @@ -2906,6 +2914,7 @@ <translation id="4890773143211625964">උසස් මුද්රක විකල්ප පෙන්වන්න</translation> <translation id="4891089016822695758">බීටා සංසදය</translation> <translation id="4892229439761351791">වෙබ් අඩවියට බ්ලූටූත් භාවිත කළ හැක</translation> +<translation id="489258173289528622">බැටරිය මත සිටින විට අකර්මණ්ය ක්රියාව</translation> <translation id="4893336867552636863">මෙය මෙම උපාංගය වෙතින් ඔබේ බ්රවුස් කිරීමේ දත්ත ස්ථිරව මකනු ඇත.</translation> <translation id="4893522937062257019">අගුලු තිරය මත</translation> <translation id="489454699928748701">වෙබ් අඩවිවලට චලන සංවේදක භාවිත කිරීමට ඉඩ දෙන්න</translation> @@ -3613,6 +3622,7 @@ <translation id="5863445608433396414">දෝශ නිරාකරණ විශේෂාංග සක්රීය</translation> <translation id="5864195618110239517">මනුගත සම්බන්ධතාව භාවිත කරන්න</translation> <translation id="5864471791310927901">DHCP විමසුම අසාර්ථක විය</translation> +<translation id="5864754048328252126">ආරෝපණය අතුරතුර අකර්මණ්ය ක්රියාව</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> ඉක්මනින් විරාම වෙයි</translation> <translation id="586567932979200359">ඔබ <ph name="PRODUCT_NAME" /> ක්රියාත්මක කරන්නේ එහි තැටි අනුරූපයෙනි. එය ඔබේ පරිගණකය තුළ ස්ථාපිත කිරීම තැටි අනුරුවක් නොමැතිව ක්රියාකරවීමට ඉඩදෙයි, තවද එය යාවත්කාලීන බව තහවුරු කරයි.</translation> <translation id="5865733239029070421">භාවිතා සංඛ්යාල්ඛන සහ සහ බිඳ වැටීම් වාර්තා ස්වයංක්රියව Google වෙත යවයි</translation> @@ -3812,6 +3822,7 @@ <translation id="6120205520491252677">මෙම පිටුව ආරම්භක තිරයට අමුණන්න...</translation> <translation id="6122081475643980456">ඔබගේ අන්තර්ජාල සබැඳුම පාලනය කෙරෙමින් ඇත</translation> <translation id="6122095009389448667">පසුරු පුවරුව දැකීමෙන් මෙම අඩවිය දිගටම අවහිර කරන්න</translation> +<translation id="6122831415929794347">ආරක්ෂිත බ්රවුස් කිරීම අක්රිය කරන්නේද?</translation> <translation id="6122875415561139701">මෙය මත ලිවීම් මෙහෙයුමට අවසර නොදේ: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">පහත දිගු මෙම දිගුව මත රඳා පවතී:</translation> <translation id="6124698108608891449">මෙම වෙබ් අඩවියට තවත් අවසර අවශ්යයි.</translation> @@ -4015,6 +4026,7 @@ <translation id="6408118934673775994"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, සහ <ph name="WEBSITE_3" /> හි ඔබගේ දත්ත කියවා වෙනස් කරන්න</translation> <translation id="6410257289063177456">පින්තූර ගොනු</translation> <translation id="6410328738210026208">නාලිකාව සහ පවර්වොෂ් වෙනස් කරන්න</translation> +<translation id="6410390304316730527">ආරක්ෂිත බ්රවුස් කිරීම දුෂ්ට මෘදුකාංග ස්ථාපිත කිරීම හෝ මුරපද, දුරකථන අංක, හෝ ණය කාඩ්පත් අංක වැනි පුද්ගලික තොරතුරු හෙළි කිරීම වැනි යම් අනතුරුදායක දේ කිරීමට ඔබට උපාය කළ හැකි ප්රහාරකයින්ට එරෙහිව ඔබව ආරක්ෂා කරයි. ඔබ එය අක්රිය කරන්නේ නම්, නුපුරුදු හෝ අසම්භාවනීය වෙබ් අඩවි බ්රවුස් කරන විට පරීක්ෂාකාරී වන්න.</translation> <translation id="6410668567036790476">සෙවීම් යාන්ත්රණය එක් කරන්න</translation> <translation id="641081527798843608">විෂය ගැළපුම</translation> <translation id="6412673304250309937">Chrome තුළ ගබඩා කර ඇති අනාරක්ෂිත වෙබ් අඩවි ලැයිස්තුවක් සමඟ URL පරීක්ෂා කරයි. වෙබ් අඩවියක් ඔබේ මුරපදය සොරා ගැනීමට උත්සාහ කරන්නේ නම්, හෝ ඔබ හානිකර ගොනුවක් බාගන්නා විට, Chrome පිටු අන්තර්ගතයේ කැබැලි ඇතුළුව ආරක්ෂිත බ්රවුස් කිරීම වෙත URL යැවීමටද හැකිය.</translation> @@ -5931,6 +5943,7 @@ <translation id="8951256747718668828">දෝෂයක් හේතුවෙන් ප්රතිසාධනය සම්පූර්ණ කළ නොහැකි විය</translation> <translation id="8951465597020890363">කෙසේ වූවත් ආගන්තුක ප්රකාරයෙන් පිට වන්නේද?</translation> <translation id="8952831374766033534">වින්යාස විකල්පයට සහය නොදැක්වේ: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">ආරෝපණය වන අතරතුර</translation> <translation id="895347679606913382">ආරම්භ කරමින්...</translation> <translation id="8957762313041272117">සජීවී සිරස්තලය</translation> <translation id="895944840846194039">JavaScript මතකය</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 0c9ebb8f..ebc1cfb 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -94,7 +94,7 @@ <translation id="1122960773616686544">Názov záložky</translation> <translation id="1124772482545689468">Používateľ</translation> <translation id="1125550662859510761">Vyzerá ako <ph name="WIDTH" /> x <ph name="HEIGHT" /> (natívne)</translation> -<translation id="1126809382673880764">Nechráni vás pred nebezpečnými webmi, stiahnutým súbormi ani rozšíreniami. Ochrana Bezpečného prehliadania vám bude poskytovaná v náležitých prípadoch v ďalších službách Googlu, ako sú napríklad Gmail alebo Vyhľadávanie.</translation> +<translation id="1126809382673880764">Nechráni vás pred nebezpečnými webmi, stiahnutými súbormi ani rozšíreniami. Ochrana Bezpečného prehliadania vám bude poskytovaná v náležitých prípadoch v ďalších službách Googlu, ako sú napríklad Gmail alebo Vyhľadávanie.</translation> <translation id="1128109161498068552">Žadnym stránkam nepovoliť používanie exkluzívnych správ na prístup k zariadeniam MIDI</translation> <translation id="1128128132059598906">EAP-TTLS</translation> <translation id="1128591060186966949">Úprava vyhľadávača</translation> @@ -830,7 +830,7 @@ <translation id="2114326799768592691">Znova načítať prvok &Frame</translation> <translation id="2114896190328250491">Autor fotografie: <ph name="NAME" /></translation> <translation id="2119349053129246860">Otvoriť v aplikácii <ph name="APP" /></translation> -<translation id="2119461801241504254">Bezpečné prehliadanie je aktuálne a chráni vás pred škodlivými webmi a súbormi na stiahnutie</translation> +<translation id="2119461801241504254">Bezpečné prehliadanie je zapnuté a chráni vás pred škodlivými webmi a súbormi na stiahnutie</translation> <translation id="2120297377148151361">Aktivity a interakcie</translation> <translation id="2120639962942052471">Blokujete <ph name="PERMISSION" /></translation> <translation id="2121055421682309734">{COUNT,plural, =0{Súbory cookie sú blokované}=1{Súbory cookie sú blokované, 1 výnimka}few{Súbory cookie sú blokované, {COUNT} výnimky}many{Cookies are blocked, {COUNT} exceptions}other{Súbory cookie sú blokované, {COUNT} výnimiek}}</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 8bc5edd..70707c9a 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Tiskalni strežnik</translation> <translation id="1805967612549112634">Potrdite kodo PIN</translation> <translation id="1806335016774576568">Preklop na drugo odprto aplikacijo</translation> +<translation id="1809483812148634490">Aplikacije, ki ste jih prenesli iz Googla Play, bodo izbrisane iz tega Chromebooka. + <ph name="LINE_BREAKS1" /> + Kupljena vsebina, na primer filmi, TV-oddaje, glasba, knjige ali drugi nakupi v aplikacijah, bo morda tudi izbrisana. + <ph name="LINE_BREAKS2" /> + To ne vpliva na aplikacije ali vsebino v drugih napravah.</translation> <translation id="1809734401532861917">Dodaj moje zaznamke, zgodovino, gesla in druge nastavitve v profil <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Storitve</translation> <translation id="18139523105317219">Ime skupine EDI</translation> @@ -813,7 +818,7 @@ <translation id="2090165459409185032">Če želite obnoviti podatke računa, pojdite na: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Varnostna nastavitev sistema</translation> <translation id="2091887806945687916">Zvok</translation> -<translation id="2096478741073211388">Predlogi osebnih podatkov vam pomagajo hitreje vnašati, tako da vam predlagajo ime, naslov ali telefonsko število, ko vnesete nekatere določene besede. Ti zasebni, prilagojeni predlogi v vašem računu so prikazani samo vam.</translation> +<translation id="2096478741073211388">Predlogi osebnih podatkov vam pomagajo hitreje vnašati, tako da vam predlagajo ime, naslov ali telefonsko številko, ko vnesete nekatere določene besede. Ti zasebni, prilagojeni predlogi v vašem računu so prikazani samo vam.</translation> <translation id="2096715839409389970">Izbriši piškotke drugih spletnih mest</translation> <translation id="2097372108957554726">Za registracijo novih naprav se morate prijaviti v Chrome</translation> <translation id="2099172618127234427">Omogočili boste funkcije za odpravljanje napak sistema Chrome OS, tako da boste nastavili sshd daemon in omogočili zagon prek pogonov USB.</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Poiščite ime, natisnjeno na hrbtni strani varnostnega ključa</translation> <translation id="2828650939514476812">Povezava z omrežjem Wi-Fi</translation> <translation id="2835294513443818940">Te datoteke ni mogoče varno prenesti.</translation> +<translation id="2835547721736623118">Storitev prepoznavanja govora</translation> <translation id="2836269494620652131">Zrušitev</translation> <translation id="2836635946302913370">Skrbnik je onemogočil prijavo s tem uporabniškim imenom.</translation> <translation id="283669119850230892">Če želite uporabljati omrežje <ph name="NETWORK_ID" />, najprej spodaj vzpostavite povezavo z internetom.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Gumb za podstran</translation> <translation id="3020183492814296499">Bližnjice</translation> <translation id="3020990233660977256">Serijska številka: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Med napajanjem iz baterije</translation> <translation id="3021066826692793094">Metulj</translation> <translation id="3021678814754966447">&Prikaz izvorne kode okvirja</translation> <translation id="3022978424994383087">Ni bilo razumljivo.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Varnostno kopiranje v Google Drive. Kadar koli lahko preprosto obnovite podatke v napravi ali zamenjate napravo z drugo. Te varnostne kopije vključujejo podatke aplikacij. Varnostne kopije so naložene v Google in šifrirane z geslom za račun Google otroka.</translation> <translation id="4634771451598206121">Prijavite se znova ...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> ni na voljo gostom.</translation> +<translation id="4635444580397524003">Varnostna kopija Linuxa je uspešno obnovljena.</translation> <translation id="4636930964841734540">Informacije</translation> <translation id="4637083375689622795">Več dejanj, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Omogočanje mostu za odpravljanje težav s sistemom Android (ADB)</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Pokaži dodatne možnosti tiskalnika</translation> <translation id="4891089016822695758">Forum za beto</translation> <translation id="4892229439761351791">Spletno mesto lahko uporablja Bluetooth</translation> +<translation id="489258173289528622">Dejanje ob nedejavnosti med polnjenjem iz baterije</translation> <translation id="4893336867552636863">S tem boste iz te naprave trajno izbrisali podatke o brskanju.</translation> <translation id="4893522937062257019">Na zaklenjenem zaslonu</translation> <translation id="489454699928748701">Spletnim mestom dovoli uporabo tipal gibanja</translation> @@ -3616,6 +3625,7 @@ <translation id="5863445608433396414">Omogoči funkcije za odpravljanje napak</translation> <translation id="5864195618110239517">Uporaba povezave z omejenim prenosom podatkov</translation> <translation id="5864471791310927901">Iskanje DHCP-ja ni uspelo</translation> +<translation id="5864754048328252126">Dejanje ob nedejavnosti med polnjenjem</translation> <translation id="5865508026715185451">Aplikacija <ph name="APP_NAME" /> bo kmalu zaustavljena</translation> <translation id="586567932979200359"><ph name="PRODUCT_NAME" /> izvajate s posnetka diska. Če ga namestite v računalnik, ga lahko izvajate brez posnetka diska in s tem zagotovite, da bo vedno posodobljen.</translation> <translation id="5865733239029070421">Samodejno pošilja statistične podatke o uporabi in poročila o zrušitvah Googlu</translation> @@ -3815,6 +3825,7 @@ <translation id="6120205520491252677">Pripnite to stran na začetni zaslon ...</translation> <translation id="6122081475643980456">Vaša povezava z internetom je nadzorovana</translation> <translation id="6122095009389448667">Še naprej prepreči temu spletnemu mestu ogled odložišča</translation> +<translation id="6122831415929794347">Želite izklopiti varno brskanje?</translation> <translation id="6122875415561139701">V tej napravi ni dovoljeno dejanje pisanja: »<ph name="DEVICE_NAME" />«.</translation> <translation id="6124650939968185064">Od te razširitve so odvisne naslednje razširitve:</translation> <translation id="6124698108608891449">To spletno mesto potrebuje več dovoljenj.</translation> @@ -4018,6 +4029,7 @@ <translation id="6408118934673775994">Branje in spreminjanje vaših podatkov na spletnih mestih <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> in <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Slikovne datoteke</translation> <translation id="6410328738210026208">Sprememba različice in Powerwash</translation> +<translation id="6410390304316730527">Varno brskanje vas ščiti pred napadalci, ki vas lahko z zavajanjem morda pripravijo do tega, da storite kaj nevarnega – denimo, da namestite zlonamerno programsko opremo ali razkrijete osebne podatke, na primer gesla, telefonske številke ali podatke kreditnih kartic. Če ga izklopite, bodite previdni pri brskanju po neznanih ali razvpitih spletnih mestih.</translation> <translation id="6410668567036790476">Dodajanje iskalnika</translation> <translation id="641081527798843608">Ujemanje zadeve</translation> <translation id="6412673304250309937">Preveri URL-je, tako da jih primerja s seznamom spletnih mest, ki niso varna, shranjenim v Chromu. Če vam spletno mesto poskusi ukrasti geslo ali ko prenašate škodljivo datoteko, lahko Chrome prav tako pošlje URL-je, vključno z delčki vsebine strani, Varnemu brskanju.</translation> @@ -5938,6 +5950,7 @@ <translation id="8951256747718668828">Obnovitve ni bilo mogoče dokončati zaradi napake</translation> <translation id="8951465597020890363">Ali želite vseeno zapreti način za goste?</translation> <translation id="8952831374766033534">Možnost konfiguracije ni podprta: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Med polnjenjem</translation> <translation id="895347679606913382">Začetek ...</translation> <translation id="8957762313041272117">Samodejni podnapisi</translation> <translation id="895944840846194039">Pomnilnik za JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 07e15ca..758f4c8b 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -810,7 +810,7 @@ <translation id="2090165459409185032">Për të rikuperuar informacionet e llogarisë tënde, shko te: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Cilësimi i sigurisë së sistemit</translation> <translation id="2091887806945687916">Tingulli</translation> -<translation id="2096478741073211388">Sugjerimet e informacionit personal të ndihmojnë të shkruash më shpejt duke sugjeruar emrin, adresën ose numrin e telefonit kur shkruan disa fjalë specifike. Vetëm ti shikon sugjerimet e tua private dhe të personalizuara për llogarinë tënde.</translation> +<translation id="2096478741073211388">Sugjerimet e informacionit personal të ndihmojnë të shkruash më shpejt duke sugjeruar emrin, adresën ose numrin e telefonit kur shkruan disa fjalë specifike. Vetëm ti i shikon sugjerimet e tua private dhe të personalizuara për llogarinë tënde.</translation> <translation id="2096715839409389970">Pastro kukit e palëve të treta</translation> <translation id="2097372108957554726">Duhet të identifikohesh te Chrome për të regjistruar pajisjet e tua</translation> <translation id="2099172618127234427">Po aktivizon funksionet e korrigjimit të sistemit operativ Chrome që do të konfigurojnë sshd daemon dhe do të aktivizojnë fillimin nga disqet USB.</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index a81f3ae..44b864a 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1098,7 +1098,7 @@ <translation id="2462724976360937186">ID ključa autoriteta za izdavanje sertifikata</translation> <translation id="2462752602710430187">Dodato je: <ph name="PRINTER_NAME" /></translation> <translation id="2464089476039395325">HTTP proksi</translation> -<translation id="2465237718053447668"><ph name="DOMAIN" /> zahteva da se odmah povežete na Wi-Fi i da preuzmete ažuriranje. Ili preuzmite pomoću veze sa ograničenjem (možda se naplaćuju troškovi).</translation> +<translation id="2465237718053447668"><ph name="DOMAIN" /> zahteva da se odmah povežete na Wi-Fi i da preuzmete ažuriranje. Ili preuzmite pomoću veze sa ograničenjem (možda će se naplaćivati troškovi).</translation> <translation id="2467267713099745100">Mreža <ph name="NETWORK_TYPE" />, isključena je</translation> <translation id="2468205691404969808">Koristi kolačiće da bi se zapamtila podešavanja, čak i kada ne posećujete te stranice</translation> <translation id="2468402215065996499">Tamagoči</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index d82ef99..314c1d27 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1098,7 +1098,7 @@ <translation id="2462724976360937186">ИД кључа ауторитета за издавање сертификата</translation> <translation id="2462752602710430187">Додато је: <ph name="PRINTER_NAME" /></translation> <translation id="2464089476039395325">HTTP прокси</translation> -<translation id="2465237718053447668"><ph name="DOMAIN" /> захтева да се одмах повежете на Wi-Fi и да преузмете ажурирање. Или преузмите помоћу везе са ограничењем (можда се наплаћују трошкови).</translation> +<translation id="2465237718053447668"><ph name="DOMAIN" /> захтева да се одмах повежете на Wi-Fi и да преузмете ажурирање. Или преузмите помоћу везе са ограничењем (можда ће се наплаћивати трошкови).</translation> <translation id="2467267713099745100">Мрежа <ph name="NETWORK_TYPE" />, искључена је</translation> <translation id="2468205691404969808">Користи колачиће да би се запамтила подешавања, чак и када не посећујете те странице</translation> <translation id="2468402215065996499">Тамагочи</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index fc070bb..c3eb04b0 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Utskriftsserver</translation> <translation id="1805967612549112634">Bekräfta pinkod</translation> <translation id="1806335016774576568">Byt till en annan öppen app</translation> +<translation id="1809483812148634490">Appar som du har laddat ned från Google Play raderas från Chromebook. + <ph name="LINE_BREAKS1" /> + Innehåll du har köpt, t.ex. filmer, tv-program, musik, böcker eller andra köp i appar, kanske också raderas. + <ph name="LINE_BREAKS2" /> + Detta påverkar inte appar eller innehåll på andra enheter.</translation> <translation id="1809734401532861917">Lägg till bokmärken, historik, lösenord och andra inställningar i <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Tjänster</translation> <translation id="18139523105317219">EDI-partsnamn</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Leta reda på namnet som står på säkerhetsnyckelns baksida</translation> <translation id="2828650939514476812">Anslut till ett Wi-Fi-nätverk</translation> <translation id="2835294513443818940">Det går inte att ladda ned den här filen på ett säkert sätt.</translation> +<translation id="2835547721736623118">Tjänst för taligenkänning</translation> <translation id="2836269494620652131">Krasch</translation> <translation id="2836635946302913370">Inloggningar med detta användarnamn har inaktiverats av administratören.</translation> <translation id="283669119850230892">För att kunna använda nätverket <ph name="NETWORK_ID" /> måste du först ansluta till Internet nedan.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Knapp till undersida</translation> <translation id="3020183492814296499">Genvägar</translation> <translation id="3020990233660977256">Serienummer: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Vid batteridrift</translation> <translation id="3021066826692793094">Fjäril</translation> <translation id="3021678814754966447">&Visa ramkälla</translation> <translation id="3022978424994383087">Jag hörde inte.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Säkerhetskopiera på Google Drive. Återställ data eller byt enkelt enhet när du vill. Säkerhetskopian innehåller appdata. Säkerhetskopiorna krypteras med hjälp av lösenordet till barnets Google-konto och laddas upp på Google.</translation> <translation id="4634771451598206121">Logga in igen ...</translation> <translation id="4635398712689569051">Sidan <ph name="PAGE_NAME" /> är inte tillgänglig för gästanvändare.</translation> +<translation id="4635444580397524003">Linux-säkerhetskopian har återställts.</translation> <translation id="4636930964841734540">Info</translation> <translation id="4637083375689622795">Fler åtgärder, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Aktivera felsökning med ADB</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Visa avancerade utskriftsalternativ</translation> <translation id="4891089016822695758">Forum för betaversionen</translation> <translation id="4892229439761351791">Webbplatsen kan använda Bluetooth</translation> +<translation id="489258173289528622">Inaktivitetsåtgärd vid batteridrift</translation> <translation id="4893336867552636863">All webbinformation raderas permanent från den här enheten.</translation> <translation id="4893522937062257019">På låsskärmen</translation> <translation id="489454699928748701">Tillåt webbplatser att använda enhetens rörelsesensorer</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Aktivera felsökningsfunktioner</translation> <translation id="5864195618110239517">Använd anslutning med datapriser</translation> <translation id="5864471791310927901">DHCP-förfrågan misslyckades</translation> +<translation id="5864754048328252126">Inaktivitetsåtgärd vid laddning</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> pausas snart</translation> <translation id="586567932979200359">Du kör <ph name="PRODUCT_NAME" /> från diskavbildningen. Om du installerar programmet på din dator kan du köra det utan diskavbildningen och du kan vara säker på att det alltid är uppdaterat.</translation> <translation id="5865733239029070421">Skickar användningsstatistik och felrapporter till Google automatiskt</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Fäst den här sidan på startskärmen ...</translation> <translation id="6122081475643980456">Din internetanslutning kontrolleras</translation> <translation id="6122095009389448667">Fortsätt blockera tillgången till Urklipp för den här webbplatsen</translation> +<translation id="6122831415929794347">Vill du inaktivera Säker webbsökning?</translation> <translation id="6122875415561139701">Skrivbehörigheten för åtgärden saknas på: <ph name="DEVICE_NAME" />.</translation> <translation id="6124650939968185064">Följande tillägg är beroende av detta tillägg:</translation> <translation id="6124698108608891449">Fler behörigheter behövs för webbplatsen.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Läs och ändra dina uppgifter på <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> och <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Bildfiler</translation> <translation id="6410328738210026208">Byt kanal och Powerwash</translation> +<translation id="6410390304316730527">Säker webbsökning skyddar dig mot angripare som kan försöka lura dig att göra något riskfyllt, till exempel installera skadlig programvara eller avslöja personliga uppgifter som lösenord, telefonnummer eller kreditkortsuppgifter. Om du inaktiverar detta bör du vara försiktig när du besöker okända webbplatser.</translation> <translation id="6410668567036790476">Lägg till sökmotor</translation> <translation id="641081527798843608">Ämnesmatchning</translation> <translation id="6412673304250309937">Kontrollera webbadresser mot en lista över osäkra webbplatser i Chrome. Om du utsätts för försök att kapa ditt lösenord på en webbplats eller om du laddar ned en skadlig fil kan webbadresserna skickas från Chrome till Säker webbsökning tillsammans med delar av sidinnehållet.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Det gick inte att slutföra återställningen på grund av ett fel</translation> <translation id="8951465597020890363">Vill du avsluta gästläget ändå?</translation> <translation id="8952831374766033534">Konfigurationsalternativet stöds inte: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Vid laddning</translation> <translation id="895347679606913382">Startar...</translation> <translation id="8957762313041272117">Live Caption</translation> <translation id="895944840846194039">JavaScript-minne</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index e21d470..74a4dca 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -609,6 +609,11 @@ <translation id="1805888043020974594">Seva ya kuchapisha</translation> <translation id="1805967612549112634">Thibitisha PIN</translation> <translation id="1806335016774576568">Badilisha utumie programu nyingine iliyofunguliwa</translation> +<translation id="1809483812148634490">Programu ambazo umepakua kutoka Google Play zitafutwa kwenye Chromebook hii. + <ph name="LINE_BREAKS1" /> +Huenda pia ikafuta maudhui ambayo umenunua kama vile filamu, vipindi vya televisheni, muziki, vitabu au ununuzi mwingine wa ndani ya programu. + <ph name="LINE_BREAKS2" /> +Hatua hii haiathiri programu au maudhui kwenye vifaa vingine.</translation> <translation id="1809734401532861917">Ongeza alamisho, historia, manenosiri na mipangilio yangu mingine kwenye <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Huduma</translation> <translation id="18139523105317219">Jina la Sehemu ya EDI</translation> @@ -1324,7 +1329,7 @@ <translation id="2748061034695037846"><ph name="DOMAIN" /> imesitishwa</translation> <translation id="2749756011735116528">Ingia kwenye <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Kagua Sarufi Pamoja na Tahajia</translation> -<translation id="2751739896257479635">Uthibitishaji wa awamu ya pili wa EAP</translation> +<translation id="2751739896257479635">Uthibitisho wa EAP wa awamu ya pili</translation> <translation id="2753677631968972007">Dhibiti ruhusa za tovuti wewe mwenyewe.</translation> <translation id="2755367719610958252">Dhibiti vipengele vya zana za walio na matatizo ya kuona au kusikia</translation> <translation id="275662540872599901">skrini imezimwa</translation> @@ -1390,6 +1395,7 @@ <translation id="2825848369316359348">Pata jina lililochapishwa nyuma ya ufunguo wako wa usalama</translation> <translation id="2828650939514476812">Unganisha kwenye mtandao wa Wi-Fi</translation> <translation id="2835294513443818940">Faili hii haiwezi kupakuliwa kwa usalama.</translation> +<translation id="2835547721736623118">Huduma ya utambuzi wa matamshi</translation> <translation id="2836269494620652131">Imeacha kufanya kazi</translation> <translation id="2836635946302913370">Kuingia kwa jina hili la mtumiaji kumelemazwa na msimamizi wako.</translation> <translation id="283669119850230892">Ili kutumia mtandao <ph name="NETWORK_ID" />, kwanza kamilisha muunganisho wako katika Mtandao hapo chini.</translation> @@ -1534,6 +1540,7 @@ <translation id="3019285239893817657">Kitufe cha ukurasa mdogo</translation> <translation id="3020183492814296499">Njia za mkato</translation> <translation id="3020990233660977256">Nambari ya Kufuatilia: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Inapotumia betri</translation> <translation id="3021066826692793094">Kipepeo</translation> <translation id="3021678814754966447">&Ona Asili ya Fremu</translation> <translation id="3022978424994383087">Imeshindwa kutafsiri.</translation> @@ -2728,6 +2735,7 @@ <translation id="4633757335284074492">Hifadhi nakala kwenye Hifadhi ya Google. Rejesha data kwa urahisi au ubadilishe kifaa wakati wowote. Nakala inajumuisha data ya programu. Nakala hupakiwa kwenye Google na kusimbwa kwa njia fiche kwa kutumia nenosiri la Akaunti ya Google ya mtoto wako.</translation> <translation id="4634771451598206121">Ingia tena...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> haipatikani kwa watumiaji Wageni</translation> +<translation id="4635444580397524003">Nakala iliyohifadhiwa ya Linux imerejeshwa.</translation> <translation id="4636930964841734540">Maelezo</translation> <translation id="4637083375689622795">Vitendo zaidi, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Washa utatuzi wa ADB</translation> @@ -2903,6 +2911,7 @@ <translation id="4890773143211625964">Onyesha chaguo za kina za printa</translation> <translation id="4891089016822695758">Mfumo wa Beta</translation> <translation id="4892229439761351791">Tovuti inaweza kutumia Bluetooth</translation> +<translation id="489258173289528622">Kitendo kwenye kifaa ambacho hakifanyi kitu wakati kinatumia betri</translation> <translation id="4893336867552636863">Hii itafuta kabisa data yako ya kuvinjari kwenye kifaa hiki.</translation> <translation id="4893522937062257019">Kwenye skrini iliyofungwa</translation> <translation id="489454699928748701">Ruhusu tovuti itumie vitambuzi vya mwendo</translation> @@ -3609,6 +3618,7 @@ <translation id="5863445608433396414">Washa vipengele vya kutatua</translation> <translation id="5864195618110239517">Tumia muunganisho wa mtandao unaopima data</translation> <translation id="5864471791310927901">Mwonekano wa DHCP umeshindikana</translation> +<translation id="5864754048328252126">Kitendo kwenye kifaa ambacho hakifanyi kitu wakati kinachaji</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> itasimamishwa hivi karibuni</translation> <translation id="586567932979200359">Unaendesha <ph name="PRODUCT_NAME" /> kutoka kwenye picha yake ya diski. Kuisakinisha kwenye kompyuta yako kunakuruhusu kuendesha bila picha ya diski, na kunahakikisha itasasishwa.</translation> <translation id="5865733239029070421">Hutuma kiotomatiki takwimu za matumizi na ripoti za programu kuacha kufanya kazi kwa Google</translation> @@ -3808,6 +3818,7 @@ <translation id="6120205520491252677">Bana ukurasa huu kwenye skirini ya Kuanza...</translation> <translation id="6122081475643980456">Muunganisho wako wa Intaneti unadhibitiwa</translation> <translation id="6122095009389448667">Endelea kuzuia tovuti hii ili isione ubao wa kunakili</translation> +<translation id="6122831415929794347">Ungependa kuzima kipengele cha Kuvinjari Salama?</translation> <translation id="6122875415561139701">Shughuli za kuandika haziruhusiwi kwenye: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">Viendelezi vinavyofuata vinategemea kiendelezi hiki:</translation> <translation id="6124698108608891449">Tovuti hii inahitaji ruhusa zaidi.</translation> @@ -4011,6 +4022,7 @@ <translation id="6408118934673775994">Kusoma na kubadilisha data yako kwenye <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> na <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Faili za Picha</translation> <translation id="6410328738210026208">Badilisha kituo na Powerwash</translation> +<translation id="6410390304316730527">Kipengele cha Kuvinjari Salama hukulinda dhidi ya washambulizi ambao wanaweza kukulaghai ufanye kitu hatari kama vile kusakinisha programu hasidi au kufichua taarifa binafsi kama vile manenosiri, nambari za simu au kadi za mikopo. Ukikizima, kuwa makini unapovinjari tovuti zisizo za kawaida au zisizo na sifa nzuri.</translation> <translation id="6410668567036790476">Ongeza mtambo wa kutafuta</translation> <translation id="641081527798843608">Mada inalingana</translation> <translation id="6412673304250309937">Hukagua URL zilizo na orodha ya tovuti zisizo salama zinazohifadhiwa kwenye Chrome. Iwapo tovuti inajaribu kuiba nenosiri lako au unapopakua faili hatari, Chrome inaweza pia kutuma URL, ikiwa ni pamoja na sehemu za maudhui ya ukurasa, kwenye kipengele cha Kuvinjari Salama.</translation> @@ -5933,6 +5945,7 @@ <translation id="8951256747718668828">Imeshindwa kukamilisha urejeshaji kutokana na hitilafu</translation> <translation id="8951465597020890363">Ungependa kufunga matumizi ya wageni?</translation> <translation id="8952831374766033534">Chaguo la kuweka mipangilio halitumiki: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Inapochaji</translation> <translation id="895347679606913382">Inaanza...</translation> <translation id="8957762313041272117">Manukuu Papo Hapo</translation> <translation id="895944840846194039">Kumbukumbu ya JavaScipt</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index cee78cda..ea49ff93 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -94,6 +94,7 @@ <translation id="1122960773616686544">புத்தகக்குறியின் பெயர்</translation> <translation id="1124772482545689468">பயனர்</translation> <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (இயல்பு) போல் தெரிகிறது</translation> +<translation id="1126809382673880764">ஆபத்தான இணையதளங்கள், பதிவிறக்கங்கள், நீட்டிப்புகள் ஆகியவற்றிலிருந்து உங்களைப் பாதுகாக்காது. எனினும் Gmail, Search போன்ற பிற Google சேவைகளில் ’பாதுகாப்பு உலாவல்’ அம்சத்தின் (கிடைத்தால்) மூலம் பாதுகாப்பைப் பெறுவீர்கள்.</translation> <translation id="1128109161498068552">MIDI சாதனங்களை அணுக, சிஸ்டத்துக்கான பிரத்தியேகச் செய்திகளைப் பயன்படுத்துவதற்கு எந்தத் தளத்தையும் அனுமதிக்க வேண்டாம்</translation> <translation id="1128128132059598906">EAP-TTLS</translation> <translation id="1128591060186966949">தேடல் இன்ஜினை மாற்று</translation> @@ -185,6 +186,7 @@ <translation id="1235458158152011030">தெரிந்த நெட்வொர்க்குகள்autof</translation> <translation id="123578888592755962">வட்டு நிறைந்துவிட்டது</translation> <translation id="1238191093934674082">திறந்தநிலை VPN</translation> +<translation id="1239439601391236986">உள்ளிடும்போது தனிப்பட்ட தகவல் பரிந்துரைகளைக் காட்டு</translation> <translation id="1239594683407221485">சாதனத்தின் உள்ளடத்தை Files ஆப்ஸில் பாருங்கள்.</translation> <translation id="124116460088058876">மேலும் மொழிகள்</translation> <translation id="1241753985463165747">அனுமதித்தால், தற்போதைய இணையதளத்தில் உங்கள் எல்லாத் தரவையும் படிக்கும், மாற்றும்</translation> @@ -301,6 +303,7 @@ <translation id="140723521119632973">செல்லுலார் செயல்படுத்தல்</translation> <translation id="1407489512183974736">மையமாக வெட்டப்பட்டது</translation> <translation id="1408504635543854729">கோப்புகள் பயன்பாட்டில் சாதனத்தின் உள்ளடக்கத்தைத் தேடவும். உள்ளடக்கத்தை நிர்வாகி கட்டுப்படுத்துவதால் அதைத் திருத்த முடியாது.</translation> +<translation id="1408980562518920698">தனிப்பட்ட தகவல்களை நிர்வகி</translation> <translation id="1410197035576869800">ஆப்ஸின் ஐகான்</translation> <translation id="1410616244180625362">உங்கள் கேமராவை அணுக <ph name="HOST" /> ஐத் தொடர்ந்து அனுமதிக்கவும்</translation> <translation id="1414648216875402825">உருவாக்கப்பட்டு வரும் அம்சங்கள் உள்ள <ph name="PRODUCT_NAME" /> இன் நிலையற்ற பதிப்பிற்கு மேம்படுத்துகிறீர்கள். சிதைவுகள் மற்றும் எதிர்பாராத பிழைகள் ஏற்படும். கவனமாக தொடரவும்.</translation> @@ -434,6 +437,7 @@ <ph name="EXTENSION_NAME" /></translation> <translation id="1587275751631642843">&JavaScript கன்சோல்</translation> <translation id="1587907146729660231">விரலால் பவர் பட்டனைத் தொடவும்</translation> +<translation id="1588200577109872591">ஸ்மார்ட் உள்ளீடுகள்</translation> <translation id="1588438908519853928">இயல்பு</translation> <translation id="158849752021629804">உள்ளூர் நெட்வொர்க் தேவை</translation> <translation id="1588870296199743671">இதைக் கொண்டு இணைப்பைத் திற...</translation> @@ -669,6 +673,7 @@ <translation id="1879000426787380528">உள்நுழையும் கணக்கு</translation> <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" சான்றிதழை நீக்கவா?</translation> <translation id="1884013283844450420">நெட்வொர்க்: <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, இணை</translation> +<translation id="1884705339276589024">Linux டிஸ்க்கின் அளவை மாற்று</translation> <translation id="1886996562706621347">நெறிமுறைகளுக்கு இயல்புநிலை ஹேண்ட்லர்களாக இருக்கும்படி கேட்க தளங்களை அனுமதி (பரிந்துரைத்தது)</translation> <translation id="1887442540531652736">உள்நுழைவில் பிழை</translation> <translation id="1887597546629269384">மீண்டும் "Hey Google" எனக் கூறவும்</translation> @@ -738,6 +743,7 @@ <translation id="1979280758666859181"><ph name="PRODUCT_NAME" /> இன் பழைய பதிப்பிற்கு சேனலை மாற்றுகிறீர்கள். உங்கள் சாதனத்தில் நிறுவப்பட்ட பதிப்புடன் சேனல் பதிப்பு பொருந்தும்போது சேனலின் மாற்றமும் பயன்படுத்தப்படும்.</translation> <translation id="197989455406964291">என்க்ரிப்ஷன் வகையை KDC ஆதரிக்கவில்லை</translation> <translation id="1982354452682152483">விளக்கம் இல்லை.</translation> +<translation id="1984417487208496350">பாதுகாப்பற்ற பயன்முறை (பரிந்துரைக்கப்படவில்லை)</translation> <translation id="1987317783729300807">கணக்குகள்</translation> <translation id="1989112275319619282">உலாவு</translation> <translation id="1990512225220753005">இந்தப் பக்கத்தில் ஷார்ட்கட்களைக் காண்பிக்க வேண்டாம்</translation> @@ -807,6 +813,7 @@ <translation id="2090165459409185032">கணக்கு விவரங்களை மீட்டெடுக்க, இங்குச் செல்லவும்: google.com/accounts/recovery</translation> <translation id="2090876986345970080">முறைமை பாதுகாப்பு அமைப்பு</translation> <translation id="2091887806945687916">ஒலி</translation> +<translation id="2096478741073211388">தனிப்பட்ட தகவல் பரிந்துரைகள் அம்சம் நீங்கள் குறிப்பிட்ட சில சொற்களைத் தட்டச்சு செய்யும்போது உங்கள் பெயர், முகவரி, ஃபோன் எண் போன்றவற்றை பரிந்துரை செய்து நீங்கள் வேகமாக எழுத உதவும். உங்கள் கணக்கிற்கான தனிப்பட்ட, பிரத்தியேகப் பரிந்துரைகளை நீங்கள் மட்டுமே பார்க்க முடியும்.</translation> <translation id="2096715839409389970">மூன்றாம் தரப்பினரின் குக்கீகளை அழி</translation> <translation id="2097372108957554726">புதிய சாதனங்களைப் பதிவுசெய்ய நீங்கள் Chrome இல் உள்நுழைய வேண்டும்</translation> <translation id="2099172618127234427">sshd daemonனை அமைத்து, USB டிரைவ்களிலிருந்து தொடங்குவதை இயக்கும் Chrome OS பிழைத் திருத்த அம்சங்களை இயக்குகிறீர்கள்.</translation> @@ -823,6 +830,7 @@ <translation id="2114326799768592691">&ஃபிரேமை மீண்டும் ஏற்று</translation> <translation id="2114896190328250491">படம் எடுத்தவர்: <ph name="NAME" /></translation> <translation id="2119349053129246860"><ph name="APP" /> இல் திற</translation> +<translation id="2119461801241504254">’பாதுகாப்பு உலாவல்’ அம்சம் இயக்கப்பட்டுள்ளது, அது தீங்கிழைக்கும் தளங்கள் மற்றும் பதிவிறக்கங்களிலிருந்து உங்களைப் பாதுகாக்கிறது</translation> <translation id="2120297377148151361">செயல்பாடும் தகவல் பரிமாற்றங்களும்</translation> <translation id="2120639962942052471"><ph name="PERMISSION" /> தடுக்கப்பட்டது</translation> <translation id="2121055421682309734">{COUNT,plural, =0{குக்கீகள் தடுக்கப்பட்டுள்ளன}=1{குக்கீகள் தடுக்கப்பட்டுள்ளன, 1 விதிவிலக்கு}other{குக்கீகள் தடுக்கப்பட்டுள்ளன, {COUNT} விதிவிலக்குகள்}}</translation> @@ -1889,6 +1897,7 @@ <translation id="3515983984924808886">மீட்டமைப்பதை உறுதிசெய்ய பாதுகாப்பு விசையை மீண்டும் தொடவும். பின் உட்பட பாதுகாப்பு விசையில் சேமிக்கப்பட்ட அனைத்து விவரங்களும் நீக்கப்படும்.</translation> <translation id="3518985090088779359">ஏற்று, தொடரவும்</translation> <translation id="351952459507671940">புதிய குழுவில் சேர்</translation> +<translation id="3521606918211282604">டிஸ்க்கின் அளவை மாற்றும்</translation> <translation id="3523642406908660543">ஒரு தளம் எனது கம்ப்யூட்டரை அணுக செருகுநிரலைப் பயன்படுத்த விரும்பும்போது கேள் (பரிந்துரைக்கப்படுகிறது)</translation> <translation id="3524965460886318643">செயல்பாடுகளைப் பதிவேற்று</translation> <translation id="3526034519184079374">தளத்தின் தரவைப் படிக்கவோ மாற்றவோ முடியாது</translation> @@ -1974,6 +1983,7 @@ <translation id="3629631988386925734">Smart Lockகை இயக்க, கடவுச்சொல்லை உள்ளிடவும். அடுத்த முறை <ph name="DEVICE_TYPE" />ஐ உங்கள் மொபைல் திறக்கும். அமைப்புகளில் Smart Lockகை முடக்கலாம்.</translation> <translation id="3630132874740063857">உங்கள் ஃபோன்</translation> <translation id="3630995161997703415">இந்தத் தளத்தை எந்த நேரத்திலும் பயன்படுத்த அதனை உங்கள் ஷெல்ஃபில் சேர்க்கவும்</translation> +<translation id="3633309367764744750">நீங்கள் இன்னமும் பார்த்திராத பக்கங்கள் உட்பட பல பக்கங்களிலிருந்து தகவல்களை முன்னெடுத்துக் கொடுக்கும். நீங்கள் குக்கீகளை அனுமதித்திருந்தால், பெறப்படும் தகவல்களில் குக்கீக்கள் இருக்கலாம்.</translation> <translation id="3634507049637220048">நெட்வொர்க்: <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, உங்கள் நிர்வாகி நிர்வகிக்கிறார், விவரங்கள்</translation> <translation id="3635241501480133979">இந்தத் தரவு உங்கள் நிறுவனத்தின் பாதுகாப்புக் கொள்கைகளை மீறுகின்ற காரணத்தால் இதை டிராப் செய்ய இயலாது.</translation> <translation id="3635353578505343390">உங்கள் கருத்தை Googleளுக்கு அனுப்புங்கள்</translation> @@ -3928,6 +3938,7 @@ <translation id="6298962879096096191">Android ஆப்ஸை நிறுவ, Google Playவைப் பயன்படுத்தவும்</translation> <translation id="630065524203833229">வெளி&யேறு</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> ஐத் தானாக உள்ளமைக்க இயலவில்லை. மேம்பட்ட பிரிண்டர் விவரங்களைக் குறிப்பிடுங்கள். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation> +<translation id="630292539633944562">தனிப்பட்ட தகவல் பரிந்துரைகள்</translation> <translation id="6305607932814307878">ஒட்டுமொத்தக் கொள்கை:</translation> <translation id="6307990684951724544">கணினி பணிமிகுதியில் உள்ளது</translation> <translation id="6308493641021088955">உள்நுழைவை வழங்குவது: <ph name="EXTENSION_NAME" /></translation> @@ -4006,6 +4017,7 @@ <translation id="641081527798843608">சப்ஜெக்ட் மேட்ச்</translation> <translation id="6412673304250309937">Chromeமில் சேமிக்கப்பட்டுள்ள பாதுகாப்பில்லாத தளங்களின் பட்டியலைப் பயன்படுத்தி URLகளைச் சரிபார்க்கும். தளம் உங்கள் கடவுச்சொல்லைத் திருட முயன்றலோ தீங்குவிளைவிக்கும் கோப்பை நீங்கள் பதிவிறக்கினாலோ Chromeமானது பக்க உள்ளடக்கத்தின் சிறிய பகுதிகள் உட்பட URLகளையும் பாதுகாப்பு உலாவலுக்கு அனுப்பக்கூடும்.</translation> <translation id="6412931879992742813">புதிய மறைநிலைச் சாளரம்</translation> +<translation id="6413591858632097328">இது <ph name="ORIGIN_NAME" /> & அதன் நிறுவப்பட்ட ஆப்ஸால் சேமிக்கப்பட்ட அனைத்து தரவையும் குக்கீகளையும் அழிக்கும்.</translation> <translation id="641469293210305670">புதுப்பிப்புகளையும் ஆப்ஸையும் நிறுவுதல்</translation> <translation id="6414888972213066896">இந்தத் தளத்தைப் பார்வையிடலாமா என, நீங்கள் பெற்றோரிடம் கேட்டுள்ளீர்கள்</translation> <translation id="6415900369006735853">உங்கள் ஃபோனைப் பயன்படுத்தி இணையத்துடன் இணைக்கலாம்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 8ac3441..e02f3c13 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -4020,7 +4020,7 @@ <translation id="641081527798843608">విషయ సరిపోలిక</translation> <translation id="6412673304250309937">Chromeలో స్టోర్ చేసిన సురక్షితం కాని సైట్ల జాబితాతో కూడిన URLలను చెక్ చేస్తుంది. ఏదైనా సైట్ మీ పాస్వర్డ్ను దొంగిలించే ప్రయత్నం చేసినా, లేదంటే ఏదైనా హానికరమైన ఫైల్ను మీరు డౌన్లోడ్ చేసినా, సదరు URLలను, ఆయా పేజీల కంటెంట్లోని కొన్ని భాగాలను కూడా Chrome, 'సురక్షిత బ్రౌజింగ్'కు పంపవచ్చు.</translation> <translation id="6412931879992742813">కొత్త అజ్ఞాత విండో</translation> -<translation id="6413591858632097328"><ph name="ORIGIN_NAME" /> ద్వారా మరియు దాని ఇన్స్టాల్ చేసిన యాప్ల ద్వారా స్టోర్ అయిన డేటా మరియు కుక్కీలను ఇది తొలగిస్తుంది.</translation> +<translation id="6413591858632097328"><ph name="ORIGIN_NAME" /> ద్వారా, అలాగే అది ఇన్స్టాల్ చేసిన యాప్ల ద్వారా స్టోర్ అయిన డేటాను, కుక్కీలను ఇది తొలగిస్తుంది.</translation> <translation id="641469293210305670">అప్డేట్లు, యాప్లు ఇన్స్టాల్ చేయండి</translation> <translation id="6414888972213066896">మీరు ఈ సైట్ను సందర్శించడానికి అనుమతించమని కోరుతూ మీ తల్లి/తండ్రికి అభ్యర్థన పంపారు</translation> <translation id="6415900369006735853">మీ ఫోన్ ద్వారా ఇంటర్నెట్కు కనెక్ట్ అవ్వండి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index cb96af8..53edb01 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">เซิร์ฟเวอร์การพิมพ์</translation> <translation id="1805967612549112634">ยืนยัน PIN</translation> <translation id="1806335016774576568">เปลี่ยนไปใช้อีกแอปหนึ่งที่เปิดอยู่</translation> +<translation id="1809483812148634490">ระบบจะลบแอปที่คุณดาวน์โหลดจาก Google Play ออกจาก Chromebook นี้ + <ph name="LINE_BREAKS1" /> + และอาจลบเนื้อหาที่คุณเคยซื้อ เช่น ภาพยนตร์ รายการทีวี เพลง หนังสือ หรือการซื้อในแอปอื่นๆ อีกด้วย + <ph name="LINE_BREAKS2" /> + การลบนี้จะไม่ส่งผลต่อแอปหรือเนื้อหาบนอุปกรณ์เครื่องอื่น</translation> <translation id="1809734401532861917">เพิ่มบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ ของฉันไปยัง <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">บริการ</translation> <translation id="18139523105317219">ชื่อหน่วย EDI</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">ค้นหาชื่อที่พิมพ์ไว้ด้านหลังคีย์ความปลอดภัย</translation> <translation id="2828650939514476812">เชื่อมต่อเครือข่าย Wi-Fi</translation> <translation id="2835294513443818940">ดาวน์โหลดไฟล์นี้อย่างปลอดภัยไม่ได้</translation> +<translation id="2835547721736623118">บริการการรู้จำคำพูด</translation> <translation id="2836269494620652131">ขัดข้อง</translation> <translation id="2836635946302913370">ผู้ดูแลระบบของคุณปิดใช้งานการลงชื่อเข้าใช้ด้วยชื่อผู้ใช้นี้</translation> <translation id="283669119850230892">หากต้องการใช้เครือข่าย <ph name="NETWORK_ID" /> ก่อนอื่น ให้เชื่อมต่ออินเทอร์เน็ตตามด้านล่างนี้</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">ปุ่มหน้าย่อย</translation> <translation id="3020183492814296499">ทางลัด</translation> <translation id="3020990233660977256">หมายเลขซีเรียล: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">ขณะใช้แบตเตอรี่</translation> <translation id="3021066826692793094">ผีเสื้อ</translation> <translation id="3021678814754966447">&ดูแหล่งที่มาของเฟรม</translation> <translation id="3022978424994383087">ฟังไม่เข้าใจ</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">สำรองข้อมูลไปที่ Google ไดรฟ์ กู้คืนข้อมูลหรือเปลี่ยนอุปกรณ์ได้ง่ายๆ ทุกเมื่อ ข้อมูลสำรองนี้มีข้อมูลแอปอยู่ด้วย ข้อมูลสำรองจะอัปโหลดขึ้น Google และเข้ารหัสโดยใช้รหัสผ่านบัญชี Google ของบุตรหลาน</translation> <translation id="4634771451598206121">ลงชื่อเข้าใช้อีกครั้ง...</translation> <translation id="4635398712689569051">ผู้ใช้ที่เป็นผู้มาเยือนไม่สามารถใช้ <ph name="PAGE_NAME" /></translation> +<translation id="4635444580397524003">กู้คืนการสำรองข้อมูล Linux สำเร็จแล้ว</translation> <translation id="4636930964841734540">ข้อมูล</translation> <translation id="4637083375689622795">การทำงานเพิ่มเติม <ph name="EMAIL" /></translation> <translation id="4638930039313743000">เปิดใช้การแก้ไขข้อบกพร่อง ADB</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">แสดงตัวเลือกเครื่องพิมพ์ขั้นสูง</translation> <translation id="4891089016822695758">ฟอรัมเบต้า</translation> <translation id="4892229439761351791">เว็บไซต์ใช้บลูทูธได้</translation> +<translation id="489258173289528622">การทำงานสำหรับการไม่ใช้งานขณะใช้แบตเตอรี่</translation> <translation id="4893336867552636863">การดำเนินการนี้จะลบข้อมูลการท่องเว็บของคุณจากอุปกรณ์นี้อย่างถาวร</translation> <translation id="4893522937062257019">ในหน้าจอล็อก</translation> <translation id="489454699928748701">อนุญาตให้เว็บไซต์ใช้เซ็นเซอร์ตรวจจับความเคลื่อนไหว</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">เปิดใช้ฟีเจอร์การแก้ไขข้อบกพร่อง</translation> <translation id="5864195618110239517">ใช้การเชื่อมต่อที่มีการวัดปริมาณอินเทอร์เน็ต</translation> <translation id="5864471791310927901">การค้นหา DHCP ล้มเหลว</translation> +<translation id="5864754048328252126">การทำงานสำหรับการไม่ใช้งานขณะที่ชาร์จ</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> จะหยุดชั่วคราวเร็วๆ นี้</translation> <translation id="586567932979200359">คุณกำลังเรียกใช้ <ph name="PRODUCT_NAME" /> จากดิสก์อิมเมจ การติดตั้งผลิตภัณฑ์นี้บนคอมพิวเตอร์จะทำให้คุณเรียกใช้ได้โดยไม่ต้องใช้ดิสก์อิมเมจและคุณมั่นใจได้ว่าผลิตภัณฑ์จะอัปเดตตลอดเวลา</translation> <translation id="5865733239029070421">ส่งสถิติการใช้งานและรายงานข้อขัดข้องให้กับ Google โดยอัตโนมัติ</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">ตรึงหน้าเว็บนี้ไว้ที่หน้าจอเริ่ม...</translation> <translation id="6122081475643980456">กำลังมีการควบคุมการเชื่อมต่ออินเทอร์เน็ตของคุณ</translation> <translation id="6122095009389448667">บล็อกเว็บไซต์ไม่ให้เห็นคลิปบอร์ดต่อไป</translation> +<translation id="6122831415929794347">ปิด Google Safe Browsing ใช่ไหม</translation> <translation id="6122875415561139701">ไม่อนุญาตให้เขียนใน "<ph name="DEVICE_NAME" />"</translation> <translation id="6124650939968185064">ส่วนขยายต่อไปนี้ต้องพึ่งพาส่วนขยายนี้:</translation> <translation id="6124698108608891449">เว็บไซต์นี้ต้องการสิทธิ์เพิ่มเติม</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">อ่านและเปลี่ยนแปลงข้อมูลของคุณใน <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> และ <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">ไฟล์ภาพ</translation> <translation id="6410328738210026208">เปลี่ยนช่องและ Powerwash</translation> +<translation id="6410390304316730527">Google Safe Browsing ปกป้องคุณจากผู้โจมตีที่อาจหลอกล่อให้คุณทำบางสิ่งที่อันตราย เช่น การติดตั้งซอฟต์แวร์ที่ประสงค์ร้ายหรือเปิดเผยข้อมูลส่วนบุคคล เช่น รหัสผ่าน หมายเลขโทรศัพท์ หรือบัตรเครดิต หากคุณปิดใช้ โปรดระวังขณะเรียกดูเว็บไซต์ที่ไม่คุ้นเคยหรือไม่เป็นที่รู้จัก</translation> <translation id="6410668567036790476">เพิ่มเครื่องมือค้นหา</translation> <translation id="641081527798843608">หัวเรื่องที่ตรงกัน</translation> <translation id="6412673304250309937">ตรวจสอบ URL กับรายการเว็บไซต์ที่ไม่ปลอดภัยซึ่งจัดเก็บไว้ใน Chrome หากเว็บไซต์พยายามขโมยรหัสผ่าน หรือคุณดาวน์โหลดไฟล์ที่เป็นอันตราย Chrome อาจส่ง URL รวมถึงเนื้อหาบางส่วนในหน้าไปยัง Google Safe Browsing ด้วย</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">คืนค่าให้เสร็จสมบูรณ์ไม่ได้เนื่องจากเกิดข้อผิดพลาด</translation> <translation id="8951465597020890363">ออกจากโหมดผู้มาเยือนใช่ไหม</translation> <translation id="8952831374766033534">ตัวเลือกการกำหนดค่าที่ไม่รองรับ: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">ขณะที่ชาร์จ</translation> <translation id="895347679606913382">กำลังเริ่มต้น...</translation> <translation id="8957762313041272117">คำบรรยายสด</translation> <translation id="895944840846194039">หน่วยความจำ JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index b2b7a00..5a50eabf 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Yazdırma sunucusu</translation> <translation id="1805967612549112634">PIN'i doğrulayın</translation> <translation id="1806335016774576568">Başka bir açık uygulamaya geçiş yap</translation> +<translation id="1809483812148634490">Google Play'den indirdiğiniz uygulamalar bu Chromebook'tan silinecek. +<ph name="LINE_BREAKS1" /> + Satın aldığınız film, TV dizisi, müzik, kitap gibi içerikler veya diğer uygulama içi satın almalar da silinebilir. +<ph name="LINE_BREAKS2" /> + Bu durum, diğer cihazlardaki uygulamaları veya içerikleri etkilemez.</translation> <translation id="1809734401532861917">Yer işaretlerimi, geçmişimi ve diğer ayarlarımı <ph name="USER_EMAIL_ADDRESS" /> adresine ekle</translation> <translation id="1813278315230285598">Hizmetler</translation> <translation id="18139523105317219">EDI Grup Adı</translation> @@ -673,7 +678,7 @@ <translation id="1879000426787380528">Farklı kullanıcı olarak oturum açın</translation> <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" sertifikası silinsin mi?</translation> <translation id="1884013283844450420">Ağ <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, Bağlan</translation> -<translation id="1884705339276589024">Linux Disk'i yeniden boyutlandırın</translation> +<translation id="1884705339276589024">Linux Disk'i yeniden yeniden boyutlandırma</translation> <translation id="1886996562706621347">Sitelerin, protokoller için varsayılan işleyiciler olmasını sormasına izin ver (önerilir)</translation> <translation id="1887442540531652736">Oturum açma hatası</translation> <translation id="1887597546629269384">Tekrar "Hey Google" deyin</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Güvenlik anahtarınızın arkasında yazılı olan adı bulun</translation> <translation id="2828650939514476812">Kablosuz ağa bağlan</translation> <translation id="2835294513443818940">Bu dosya güvenli bir şekilde indirilemiyor.</translation> +<translation id="2835547721736623118">Konuşma tanıma hizmeti</translation> <translation id="2836269494620652131">Kilitlenme</translation> <translation id="2836635946302913370">Yöneticiniz bu kullanıcı adıyla oturum açmayı devre dışı bırakmış durumda.</translation> <translation id="283669119850230892"><ph name="NETWORK_ID" /> ağını kullanmak için önce aşağıdan İnternet bağlantınızı yapın.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Alt sayfa düğmesi</translation> <translation id="3020183492814296499">Kısayollar</translation> <translation id="3020990233660977256">Seri Numarası: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Pil kullanılırken</translation> <translation id="3021066826692793094">Kelebek</translation> <translation id="3021678814754966447">Çerçeve Kaynağını &Görüntüle</translation> <translation id="3022978424994383087">Anlaşılmadı.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Google Drive'a yedekle. Verileri istediğiniz zaman kolayca geri yükleyin veya cihazlar arasında geçiş yapın. Bu yedekleme, uygulama verilerini içerir. Yedek veriler Google'a yüklenir ve çocuğunuzun Google Hesabının şifresi kullanılarak şifrelenir.</translation> <translation id="4634771451598206121">Tekrar oturum açın...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" />, Davetli kullanıcılar için geçerli değildir.</translation> +<translation id="4635444580397524003">Linux yedeklemesi başarıyla geri yüklendi.</translation> <translation id="4636930964841734540">Bilgi</translation> <translation id="4637083375689622795">Diğer işlemler, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">ADB hata ayıklama işlevini etkinleştir</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Gelişmiş yazıcı seçeneklerini göster</translation> <translation id="4891089016822695758">Beta forumu</translation> <translation id="4892229439761351791">Site Bluetooth bağlantısı kullanabilir</translation> +<translation id="489258173289528622">Pil kullanılırken boşta kalma işlemi</translation> <translation id="4893336867552636863">Bu işlem, tarama verilerinizi bu cihazdan kalıcı olarak silecektir.</translation> <translation id="4893522937062257019">Kilit ekranında</translation> <translation id="489454699928748701">Sitelerin hareket sensörlerini kullanmasına izin ver</translation> @@ -3615,6 +3624,7 @@ <translation id="5863445608433396414">Hata ayıklama özelliklerini etkinleştir</translation> <translation id="5864195618110239517">Sayaçlı bağlantıyı kullan</translation> <translation id="5864471791310927901">DHCP araması başarısız oldu</translation> +<translation id="5864754048328252126">Şarj olurken boşta kalma işlemi</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> yakında duraklatılacak</translation> <translation id="586567932979200359"><ph name="PRODUCT_NAME" /> programını disk görüntüsünden çalıştırıyorsunuz. Bu ürünü bilgisayarınıza kurduğunuzda, disk görüntüsü olmadan çalıştırabilir ve her zaman güncel olacağından emin olabilirsiniz.</translation> <translation id="5865733239029070421">Kullanım istatistiklerini ve kilitlenme raporlarını Google'a otomatik olarak gönderir</translation> @@ -3814,6 +3824,7 @@ <translation id="6120205520491252677">Bu sayfayı Başlangıç ekranına sabitle...</translation> <translation id="6122081475643980456">İnternet bağlantınız kontrol ediliyor</translation> <translation id="6122095009389448667">Bu sitenin panoyu görmesini engellemeye devam et</translation> +<translation id="6122831415929794347">Güvenli Tarama kapatılsın mı?</translation> <translation id="6122875415561139701">Şu cihazda yazma işlemine izin verilmiyor: "<ph name="DEVICE_NAME" />".</translation> <translation id="6124650939968185064">Aşağıdaki uzantılar bu uzantıya bağımlıdır:</translation> <translation id="6124698108608891449">Bu site, daha fazla izne ihtiyaç duyuyor.</translation> @@ -4017,6 +4028,7 @@ <translation id="6408118934673775994"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> ve <ph name="WEBSITE_3" /> web sitelerinde verilerinizi okuma ve değiştirme</translation> <translation id="6410257289063177456">Resim Dosyaları</translation> <translation id="6410328738210026208">Kanal değiştir ve Powerwash işlemini yap</translation> +<translation id="6410390304316730527">Güvenli Tarama, sizi yanıltarak kötü amaçlı yazılım yüklemek veya kişisel bilgilerinizi (örneğin, şifreler, telefon numaraları veya kredi kartları) ifşa etmek gibi tehlikeli bir şey yapmanıza neden olabilecek saldırganlara karşı korur. Bu özelliği kapatırsanız tanıdık olmayan veya saygınlığı şüpheli sitelere göz atarken dikkatli olun.</translation> <translation id="6410668567036790476">Arama motoru ekleyin</translation> <translation id="641081527798843608">Konu eşleştirmesi</translation> <translation id="6412673304250309937">URL'leri, Chrome'da kayıtlı güvenli olmayan siteler listesine göre kontrol eder. Chrome, bir sitenin şifrenizi çalmaya çalışması veya zararlı bir dosya indirmeniz halinde de Güvenli Tarama'ya sayfa içeriğinden parçalarla birlikte URL'ler gönderebilir.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Bir hata nedeniyle geri yükleme işlemi tamamlanamadı</translation> <translation id="8951465597020890363">Yine de misafir modundan çıkılsın mı?</translation> <translation id="8952831374766033534">Yapılandırma seçeneği desteklenmiyor: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Şarj olurken</translation> <translation id="895347679606913382">Başlatılıyor...</translation> <translation id="8957762313041272117">Canlı altyazı</translation> <translation id="895944840846194039">JavaScript Belleği</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index aab87877..6ae82ed 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">Сервер для друку</translation> <translation id="1805967612549112634">Підтвердьте PIN-код</translation> <translation id="1806335016774576568">Перейти в інший відкритий додаток</translation> +<translation id="1809483812148634490">Додатки, які ви завантажили з Google Play, буде видалено з цього пристрою Chromebook. + <ph name="LINE_BREAKS1" /> + Придбаний контент, як-от фільми, серіали, музика, книги чи інші покупки в додатках, також може бути видалено. + <ph name="LINE_BREAKS2" /> + Це не стосується додатків і контенту на інших пристроях.</translation> <translation id="1809734401532861917">Додати закладки, історію, паролі й інші налаштування в обліковий запис <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Служби</translation> <translation id="18139523105317219">Ім'я сторони EDI</translation> @@ -1393,6 +1398,7 @@ <translation id="2825848369316359348">Знайдіть назву на звороті ключа безпеки</translation> <translation id="2828650939514476812">З’єднання з мережею Wi-Fi</translation> <translation id="2835294513443818940">Не вдається безпечно завантажити файл.</translation> +<translation id="2835547721736623118">Сервіс розпізнавання мовлення</translation> <translation id="2836269494620652131">Аварійне завершення роботи</translation> <translation id="2836635946302913370">Вхід із використанням цього імені користувача вимкнено адміністратором.</translation> <translation id="283669119850230892">Щоб використовувати мережу <ph name="NETWORK_ID" />, спершу завершіть під’єднання до Інтернету нижче.</translation> @@ -1537,6 +1543,7 @@ <translation id="3019285239893817657">Кнопка підсторінки</translation> <translation id="3020183492814296499">Ярлики</translation> <translation id="3020990233660977256">Серійний номер: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Під час роботи від акумулятора</translation> <translation id="3021066826692793094">Метелик</translation> <translation id="3021678814754966447">&Переглянути джерело фрейму</translation> <translation id="3022978424994383087">Незрозуміло.</translation> @@ -2733,6 +2740,7 @@ <translation id="4633757335284074492">Створювати резервні копії на Google Диску. Легко відновлюйте дані чи переносьте їх на інші пристрої. Ця резервна копія містить дані додатків. Резервні копії завантажуються в Google і шифруються за допомогою пароля облікового запису Google вашої дитини.</translation> <translation id="4634771451598206121">Увійти знову...</translation> <translation id="4635398712689569051">Сторінка "<ph name="PAGE_NAME" />" недоступна гостям.</translation> +<translation id="4635444580397524003">Резервну копію Linux відновлено.</translation> <translation id="4636930964841734540">Інформація</translation> <translation id="4637083375689622795">Інші дії, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">Увімкнути налагодження ADB</translation> @@ -2908,6 +2916,7 @@ <translation id="4890773143211625964">Показати розширені налаштування принтера</translation> <translation id="4891089016822695758">Форум бета-версії</translation> <translation id="4892229439761351791">Сайт може використовувати Bluetooth</translation> +<translation id="489258173289528622">Дія, коли пристрій неактивний під час роботи від акумулятора</translation> <translation id="4893336867552636863">Дані веб-перегляду буде видалено з цього пристрою назавжди.</translation> <translation id="4893522937062257019">На екрані блокування</translation> <translation id="489454699928748701">Дозволити сайтам використовувати датчики руху</translation> @@ -3614,6 +3623,7 @@ <translation id="5863445608433396414">Увімкнути функції налагодження</translation> <translation id="5864195618110239517">Використовувати підключення з тарифікацією трафіку</translation> <translation id="5864471791310927901">Помилка пошуку DHCP</translation> +<translation id="5864754048328252126">Дія, коли пристрій неактивний під час заряджання</translation> <translation id="5865508026715185451">Додаток <ph name="APP_NAME" /> невдовзі буде призупинено</translation> <translation id="586567932979200359"><ph name="PRODUCT_NAME" /> працює, використовуючи своє зображення диска. Встановлення веб-переглядача на комп'ютер дозволить працювати без використання зображення диска та гарантуватиме його постійне оновлення.</translation> <translation id="5865733239029070421">Автоматично надсилає статистику використання та звіти про аварійне завершення роботи в Google</translation> @@ -3813,6 +3823,7 @@ <translation id="6120205520491252677">Закріпити цю сторінку на екрані запуску...</translation> <translation id="6122081475643980456">Ваше з’єднання з Інтернетом контролюється</translation> <translation id="6122095009389448667">Забороняти цьому сайту переглядати буфер обміну</translation> +<translation id="6122831415929794347">Вимкнути Безпечний перегляд?</translation> <translation id="6122875415561139701">Операцію внесення змін заборонено на пристрої <ph name="DEVICE_NAME" />.</translation> <translation id="6124650939968185064">Від цього розширення залежать такі розширення:</translation> <translation id="6124698108608891449">Цьому сайту потрібні додаткові дозволи.</translation> @@ -4016,6 +4027,7 @@ <translation id="6408118934673775994">Читати та змінювати свої дані на веб-сайтах <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> і <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Файли зображень</translation> <translation id="6410328738210026208">Змінити версію й виконати Powerwash</translation> +<translation id="6410390304316730527">Безпечний перегляд захищає вас від зловмисників, які можуть обманом змусити вас виконати небезпечну дію, наприклад установити шкідливе програмне забезпечення або розкрити особисту інформацію, як-от пароль, номер телефону чи дані кредитної картки. Якщо ви вимкнете цю функцію, будьте обережні на незнайомих і сумнівних сайтах.</translation> <translation id="6410668567036790476">Додати пошукову систему</translation> <translation id="641081527798843608">Збіг суб’єкта</translation> <translation id="6412673304250309937">Перевіряє URL-адреси за списком шкідливих сайтів, що зберігається в Chrome. Якщо сайт намагається викрасти ваш пароль або ви завантажуєте шкідливий файл, Chrome також може надсилати Безпечному перегляду URL-адреси, зокрема уривки вмісту сторінки.</translation> @@ -5936,6 +5948,7 @@ <translation id="8951256747718668828">Не вдалося відновити через помилку</translation> <translation id="8951465597020890363">Усе одно вийти з режиму гостя?</translation> <translation id="8952831374766033534">Параметр конфігурації не підтримується: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Під час заряджання</translation> <translation id="895347679606913382">Запуск...</translation> <translation id="8957762313041272117">Живі субтитри</translation> <translation id="895944840846194039">Пам’ять JavaScript</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 090ce01..41cb842 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1292,7 +1292,7 @@ <translation id="271033894570825754">نیا</translation> <translation id="2712173769900027643">اجازت طلب کریں</translation> <translation id="2713444072780614174">سفید</translation> -<translation id="2714393097308983682">Google Play اسٹور</translation> +<translation id="2714393097308983682">Google Play اسٹور</translation> <translation id="2715751256863167692">یہ اپ گریڈ آپ کے Chromebook کو ری سیٹ کرتا ہے اور موجودہ صارف ڈیٹا کو ہٹاتا ہے۔</translation> <translation id="2716986496990888774">یہ ترتیب والد/والدہ کے زیر انتظام ہے۔</translation> <translation id="2718395828230677721">نائٹ لائٹ</translation> @@ -1900,7 +1900,7 @@ <translation id="3515983984924808886">دوبارہ ترتیب دینے کی تصدیق کرنے کے لیے اپنی سیکیورٹی کلید کو دوبارہ ٹچ کریں۔ سیکیورٹی کلید کے PIN سمیت اس میں اسٹور کردہ سبھی معلومات کو حذف کر دیا جائے گا۔</translation> <translation id="3518985090088779359">قبول کرکے جاری رکھیں</translation> <translation id="351952459507671940">نئے گروپ میں شامل کریں</translation> -<translation id="3521606918211282604">ڈسک کی سائز تبدیل کریں</translation> +<translation id="3521606918211282604">ڈسک کا سائز تبدیل کریں</translation> <translation id="3523642406908660543">جب کوئی سائٹ آپ کے کمپیوٹر تک رسائی حاصل کرنے کیلئے ایک پلگ ان استعمال کرنا چاہتی ہو تو پوچھیں (تجویز کردہ)</translation> <translation id="3524965460886318643">سرگرمیاں برآمد کریں</translation> <translation id="3526034519184079374">سائٹ کا ڈیٹا پڑھا یا تبدیل نہیں کیا جا سکتا</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 3f71598..abebec7 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -610,6 +610,11 @@ <translation id="1805888043020974594">Bosma server</translation> <translation id="1805967612549112634">PIN kodni tasdiqlang</translation> <translation id="1806335016774576568">Boshqa ochiq ilovaga oʻtish</translation> +<translation id="1809483812148634490">Siz yuklab olgan Google Play ilovalari ushbu Chromebook qurilmasidan o‘chirib yuboriladi. + <ph name="LINE_BREAKS1" /> + Siz xarid qilgan kinolar, TV seriallar, musiqa, kitoblar yoki boshqa ichki ilova xaridlari o‘chib ketishi mumkin. + <ph name="LINE_BREAKS2" /> + Bu amal boshqa qurilmadagi ilova yoki ma’lumotlaringizga ta’sir qilmaydi.</translation> <translation id="1809734401532861917">Xatcho‘plar, tarix, parollar va boshqa sozlamalarim <ph name="USER_EMAIL_ADDRESS" /> hisobida saqlansin.</translation> <translation id="1813278315230285598">Xizmatlar</translation> <translation id="18139523105317219">EDI tarafi nomi</translation> @@ -1391,6 +1396,7 @@ <translation id="2825848369316359348">Elektron kalitning orqasidagi printer nomini toping</translation> <translation id="2828650939514476812">Wi-Fi tarmog‘iga ulanish</translation> <translation id="2835294513443818940">Bu faylni xavfsiz yuklab olish imkonsiz.</translation> +<translation id="2835547721736623118">Nutqni aniqlash xizmati</translation> <translation id="2836269494620652131">Nosozlik</translation> <translation id="2836635946302913370">Administrator ushbu foydalanuvchi nomidan tizimga kirishini taqiqlab qo‘ygan.</translation> <translation id="283669119850230892"><ph name="NETWORK_ID" /> tarmog‘idan foydalanish uchun, avval Internetga ulaning.</translation> @@ -1535,6 +1541,7 @@ <translation id="3019285239893817657">Quyi sahifa tugmasi</translation> <translation id="3020183492814296499">Yorliqlar</translation> <translation id="3020990233660977256">Seriya raqami: <ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">Batareya quvvatida ishlayotganda</translation> <translation id="3021066826692793094">Kapalak</translation> <translation id="3021678814754966447">Freym kodini ko‘rish</translation> <translation id="3022978424994383087">Yana bir marta qaytaring</translation> @@ -2731,6 +2738,7 @@ <translation id="4633757335284074492">Google Drive omboriga zaxiralash. Axborotlaringizni osongina tiklashingiz yoki qurilmangizni xohlagan vaqtda almashtirishingiz mumkin. Zaxira ichida ilova maʼlumotlari ham bor. Zaxiralar Google serverlariga yuklanadi va farzandingizning Google hisobingiz paroli bilan shifrlanadi.</translation> <translation id="4634771451598206121">Qaytadan kirish...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> sahifasi mehmon foydalanuvchilarga ko‘rinmaydi.</translation> +<translation id="4635444580397524003">Linux zaxirasi tiklandi.</translation> <translation id="4636930964841734540">Ma’lumot</translation> <translation id="4637083375689622795">Boshqa amallar, <ph name="EMAIL" /></translation> <translation id="4638930039313743000">ADB tuzatish vositasini yoqish</translation> @@ -2906,6 +2914,7 @@ <translation id="4890773143211625964">Qo‘shimcha printer sozlamalarini ko‘rsatish</translation> <translation id="4891089016822695758">Beta forum</translation> <translation id="4892229439761351791">Sayt Bluetooth ishlatishi mumkin</translation> +<translation id="489258173289528622">Batareya quvvatidan ishlayotganda kutish amali</translation> <translation id="4893336867552636863">Ushbu qurilmadagi brauzer faoliyati haqidagi ma’lumotlar butunlay o‘chiriladi.</translation> <translation id="4893522937062257019">Qulflangan ekranda</translation> <translation id="489454699928748701">Saytlarga harakat sensorlaridan foydalanish uchun ruxsat berish</translation> @@ -3612,6 +3621,7 @@ <translation id="5863445608433396414">Nosozliklarni ko‘rib chiqish funksiyalarini yoqish</translation> <translation id="5864195618110239517">Trafik hisoblanadigan ulanishdan foydalanish</translation> <translation id="5864471791310927901">DHCP topilmadi</translation> +<translation id="5864754048328252126">Quvvatlanayotganda kutish amali</translation> <translation id="5865508026715185451"><ph name="APP_NAME" /> tez orada pauza qilinadi</translation> <translation id="586567932979200359"><ph name="PRODUCT_NAME" /> tizimini diskdagi tasviridan ishga tushirgansiz. Uni kompyuteringizga o‘rnatsangiz, disk tasviri kerak bo‘lmaydi hamda tizim muntazam yangilanib turadi.</translation> <translation id="5865733239029070421">Foydalanish statistikasi va ishdan chiqish hisobotlari avtomatik tarzda Google serverlariga yuborilsin</translation> @@ -3811,6 +3821,7 @@ <translation id="6120205520491252677">Ushbu sahifani bosh ekranga qadab qo‘yish...</translation> <translation id="6122081475643980456">Internet aloqangiz nazorat qilinmoqda</translation> <translation id="6122095009389448667">Saytning klipbordga ruxsati taqiqlanaversin</translation> +<translation id="6122831415929794347">Saytlarni xavfsiz kezish faolsizlantirilsinmi?</translation> <translation id="6122875415561139701">“<ph name="DEVICE_NAME" />” qurilmasida ma’lumot yozish taqiqlangan.</translation> <translation id="6124650939968185064">Bu kengaytma quyidagi kengaytmalar bilan bog‘liq:</translation> <translation id="6124698108608891449">Bu saytga yana boshqa ruxsatlar kerak.</translation> @@ -4014,6 +4025,7 @@ <translation id="6408118934673775994"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> va <ph name="WEBSITE_3" /> saytlaridan ma’lumotlarni ko‘rish va o‘zgartirish</translation> <translation id="6410257289063177456">Tasvir fayllar</translation> <translation id="6410328738210026208">Boshqa kanal tanlash va Powerwash amalini ishga tushirish</translation> +<translation id="6410390304316730527">Saytlarni xavfsiz kezish parollar, telefon raqamlari yoki kredit kartalari kabi shaxsiy maʼlumotlaringizni oʻgʻirlash yoki zararli dasturlarni oʻrnatish orqali xavfli ishlarni amalga oshirishga undovchi shubhali kimsalardan himoyalaydi. Agar bu funksiyani faolsizlantirsangiz, notanish va shubhali saytlarga kirishda ehtiyot boʻling.</translation> <translation id="6410668567036790476">Qidiruv tizimi qo‘shish</translation> <translation id="641081527798843608">Mavzu mosligi</translation> <translation id="6412673304250309937">URL manzillar Chrome bilgan zararli saytlar roʻyxati orqali tekshiriladi. Agar sayt parolingizni oʻgirlashga urinsa yoki zararli fayl yuklab olsangiz, Chrome ham URL manzillar kabi sahifa elementlarini Saytlarni xavfsiz kezish tizimiga yuborishi mumkin.</translation> @@ -5932,6 +5944,7 @@ <translation id="8951256747718668828">Xato tufayli tiklanmadi</translation> <translation id="8951465597020890363">Mehmon rejimidan baribir chiqilsinmi?</translation> <translation id="8952831374766033534">Ishlamadigan konfiguratsiya: <ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">Quvvat olayotganda</translation> <translation id="895347679606913382">Boshlanmoqda...</translation> <translation id="8957762313041272117">Jonli izoh</translation> <translation id="895944840846194039">JavaScript xotirasi</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index e7dd3d3..6f54983 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -810,7 +810,7 @@ <translation id="2090165459409185032">要恢复您的帐号信息,请访问 google.com/accounts/recovery</translation> <translation id="2090876986345970080">系统安全设置</translation> <translation id="2091887806945687916">声音</translation> -<translation id="2096478741073211388">个人信息建议可以在您输入特定字词时推荐您的姓名、地址或电话号码,从而帮助您提高输入速度。只有您自己可以看到系统为您的帐号提供的不公开的个性化建议。</translation> +<translation id="2096478741073211388">个人信息建议可以在您输入特定字词时提供关于您的姓名、地址或电话号码的建议,从而帮助您提高输入速度。只有您自己可以看到系统为您的帐号提供的不公开的个性化建议。</translation> <translation id="2096715839409389970">清除第三方 Cookie</translation> <translation id="2097372108957554726">您需要登录 Chrome 才能注册新设备</translation> <translation id="2099172618127234427">您正在启用 Chrome 操作系统调试功能,此功能将设置 sshd 守护程序并允许从 U 盘启动设备。</translation> @@ -827,7 +827,7 @@ <translation id="2114326799768592691">重新加载框架(&F)</translation> <translation id="2114896190328250491">照片提供者:<ph name="NAME" /></translation> <translation id="2119349053129246860">在“<ph name="APP" />”中打开</translation> -<translation id="2119461801241504254">“安全浏览”功能已开启,正在保护您免受有害网站及下载内容的侵扰</translation> +<translation id="2119461801241504254">“安全浏览”功能已开启,正在保护您免受有害网站及有害下载内容的侵扰</translation> <translation id="2120297377148151361">活动和互动行为</translation> <translation id="2120639962942052471">已禁用<ph name="PERMISSION" /></translation> <translation id="2121055421682309734">{COUNT,plural, =0{已阻止 Cookie}=1{已阻止 Cookie,但有 1 项例外情况}other{已阻止 Cookie,但有 {COUNT} 项例外情况}}</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 7e799c8..e2f9cab6 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">列印伺服器</translation> <translation id="1805967612549112634">確認 PIN</translation> <translation id="1806335016774576568">切換至其他已開啟的應用程式</translation> +<translation id="1809483812148634490">您從 Google Play 下載的應用程式將從此 Chromebook 中刪除。 + <ph name="LINE_BREAKS1" /> + 系統可能會同時刪除您購買的內容 (例如電影、電視節目、音樂、書籍或其他應用程式內購買項目)。 + <ph name="LINE_BREAKS2" /> + 此操作不會影響其他裝置上的應用程式或內容。</translation> <translation id="1809734401532861917">將我的書籤、記錄、密碼和其他設定新增至 <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">服務</translation> <translation id="18139523105317219">EDI 合作對象名稱</translation> @@ -1392,6 +1397,7 @@ <translation id="2825848369316359348">請查看印在安全密鑰背面的名稱</translation> <translation id="2828650939514476812">連線至 Wi-Fi 網絡</translation> <translation id="2835294513443818940">無法安全下載此檔案。</translation> +<translation id="2835547721736623118">語音識別服務</translation> <translation id="2836269494620652131">當機</translation> <translation id="2836635946302913370">管理員已禁止使用這個使用者名稱登入。</translation> <translation id="283669119850230892">如要使用 <ph name="NETWORK_ID" /> 網絡,請先在下方連線至互聯網。</translation> @@ -1536,6 +1542,7 @@ <translation id="3019285239893817657">子頁面按鈕</translation> <translation id="3020183492814296499">快速鍵</translation> <translation id="3020990233660977256">序號:<ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">使用電池時</translation> <translation id="3021066826692793094">蝴蝶</translation> <translation id="3021678814754966447">檢視頁框原始碼(&V)</translation> <translation id="3022978424994383087">無法辨識語音。</translation> @@ -2731,6 +2738,7 @@ <translation id="4633757335284074492">備份至「Google 雲端硬碟」。您可隨時輕鬆還原資料或改用其他裝置。備份包含應用程式資料。備份會上載至 Google,並使用您子女的 Google 帳戶密碼加密。</translation> <translation id="4634771451598206121">重新登入…</translation> <translation id="4635398712689569051">訪客使用者無法瀏覽「<ph name="PAGE_NAME" />」。</translation> +<translation id="4635444580397524003">已成功還原 Linux 備份。</translation> <translation id="4636930964841734540">資訊</translation> <translation id="4637083375689622795">更多操作,<ph name="EMAIL" /></translation> <translation id="4638930039313743000">啟用 ADB 偵錯</translation> @@ -2906,6 +2914,7 @@ <translation id="4890773143211625964">顯示進階打印機選項</translation> <translation id="4891089016822695758">Chrome 測試版論壇</translation> <translation id="4892229439761351791">網站可以使用藍牙</translation> +<translation id="489258173289528622">用緊電池時嘅閒置動作</translation> <translation id="4893336867552636863">這會永久刪除此裝置上的瀏覽資料。</translation> <translation id="4893522937062257019">螢幕上鎖時</translation> <translation id="489454699928748701">允許網站使用動作感應器</translation> @@ -3612,6 +3621,7 @@ <translation id="5863445608433396414">啟用偵錯功能</translation> <translation id="5864195618110239517">使用按用量收費的連線</translation> <translation id="5864471791310927901">DHCP 查閱失敗</translation> +<translation id="5864754048328252126">叉緊電時嘅閒置動作</translation> <translation id="5865508026715185451">「<ph name="APP_NAME" />」即將暫停</translation> <translation id="586567932979200359">您正在透過磁碟映像執行 <ph name="PRODUCT_NAME" />。如直接在電腦上安裝程式,以後無需透過磁碟映像即可直接執行,並且能隨時使用最新的版本。</translation> <translation id="5865733239029070421">自動將使用情況統計和當機報告傳送給 Google</translation> @@ -3811,6 +3821,7 @@ <translation id="6120205520491252677">將這個網頁固定到 [開始] 螢幕…</translation> <translation id="6122081475643980456">您的互聯網連線目前受到控制</translation> <translation id="6122095009389448667">繼續禁止此網站查看剪貼簿</translation> +<translation id="6122831415929794347">要關閉安全瀏覽嗎?</translation> <translation id="6122875415561139701">「<ph name="DEVICE_NAME" />」禁止寫入操作。</translation> <translation id="6124650939968185064">下列擴充功能依賴此擴充功能:</translation> <translation id="6124698108608891449">此網站需要更多權限。</translation> @@ -4014,6 +4025,7 @@ <translation id="6408118934673775994">讀取及變更您在 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" /> 和 <ph name="WEBSITE_3" /> 網站上的資料</translation> <translation id="6410257289063177456">圖片檔</translation> <translation id="6410328738210026208">變更版本並執行 Powerwash</translation> +<translation id="6410390304316730527">「安全瀏覽」能保護您免受攻擊,攻擊者可能會誘使您採取一些危險的行動,例如安裝惡意軟件或洩漏您的個人資料 (包括密碼、電話號碼或信用卡資料)。如關閉「安全瀏覽」,請在瀏覽不熟悉或信譽不佳的網站時提高警覺。</translation> <translation id="6410668567036790476">新增搜尋引擎</translation> <translation id="641081527798843608">主題比對</translation> <translation id="6412673304250309937">使用儲存在 Chrome 中的不安全網站清單來檢查網址。如果有網站試圖盜取您的密碼,或當您下載有害檔案時,Chrome 亦可能將網址 (包括部分網頁內容) 傳送至「安全瀏覽」功能。</translation> @@ -5933,6 +5945,7 @@ <translation id="8951256747718668828">發生錯誤,因此無法完成還原程序</translation> <translation id="8951465597020890363">仍要退出訪客模式嗎?</translation> <translation id="8952831374766033534">不支援的設定選項:<ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">充電時</translation> <translation id="895347679606913382">即將開始下載…</translation> <translation id="8957762313041272117">即時字幕</translation> <translation id="895944840846194039">JavaScript 記憶體使用量</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 9783ada5..03ce25b 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -612,6 +612,11 @@ <translation id="1805888043020974594">列印伺服器</translation> <translation id="1805967612549112634">確認 PIN 碼</translation> <translation id="1806335016774576568">切換至其他已開啟的應用程式</translation> +<translation id="1809483812148634490">你透過 Google Play 下載的應用程式將會從這部 Chromebook 中刪除。 + <ph name="LINE_BREAKS1" /> + 你所購買的內容 (例如電影、電視節目、音樂、書籍或其他應用程式內購項目) 可能也會一併遭到刪除。 + <ph name="LINE_BREAKS2" /> + 這項操作不會影響其他裝置上的應用程式或內容。</translation> <translation id="1809734401532861917">將我的書籤、歷史記錄、密碼和其他設定新增至 <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">服務</translation> <translation id="18139523105317219">EDI 合作對象名稱</translation> @@ -1392,6 +1397,7 @@ <translation id="2825848369316359348">找出印在安全金鑰背面的名稱</translation> <translation id="2828650939514476812">連線至 Wi-Fi 網路</translation> <translation id="2835294513443818940">無法安全下載這個檔案。</translation> +<translation id="2835547721736623118">語音辨識服務</translation> <translation id="2836269494620652131">當機</translation> <translation id="2836635946302913370">管理員已禁止使用這個使用者名稱登入。</translation> <translation id="283669119850230892">如要使用 <ph name="NETWORK_ID" /> 網路,請先在下方連線至網際網路。</translation> @@ -1536,6 +1542,7 @@ <translation id="3019285239893817657">子頁面按鈕</translation> <translation id="3020183492814296499">快速鍵</translation> <translation id="3020990233660977256">序號:<ph name="SERIAL_NUMBER" /></translation> +<translation id="3021065318976393105">使用電池時</translation> <translation id="3021066826692793094">蝴蝶</translation> <translation id="3021678814754966447">檢視頁框原始碼(&V)</translation> <translation id="3022978424994383087">無法辨識語音內容。</translation> @@ -2731,6 +2738,7 @@ <translation id="4633757335284074492">使用 Google 雲端硬碟備份你的資料。你隨時可以輕鬆還原資料或切換裝置。這個備份項目包含應用程式資料。備份內容會上傳到 Google,並使用貴子女的 Google 帳戶密碼加密。</translation> <translation id="4634771451598206121">重新登入...</translation> <translation id="4635398712689569051">訪客使用者無法使用<ph name="PAGE_NAME" />。</translation> +<translation id="4635444580397524003">已成功復原 Linux 備份資料。</translation> <translation id="4636930964841734540">資訊</translation> <translation id="4637083375689622795">更多動作 (<ph name="EMAIL" />)</translation> <translation id="4638930039313743000">啟用 ADB 偵錯</translation> @@ -2906,6 +2914,7 @@ <translation id="4890773143211625964">顯示進階印表機選項</translation> <translation id="4891089016822695758">測試版論壇</translation> <translation id="4892229439761351791">網站可以使用藍牙</translation> +<translation id="489258173289528622">使用電池時的閒置動作</translation> <translation id="4893336867552636863">這會將您的瀏覽資料從這個裝置上永久刪除。</translation> <translation id="4893522937062257019">螢幕鎖定時</translation> <translation id="489454699928748701">允許網站使用動作感應器</translation> @@ -3612,6 +3621,7 @@ <translation id="5863445608433396414">啟用偵錯功能</translation> <translation id="5864195618110239517">使用計量付費連線</translation> <translation id="5864471791310927901">DHCP 查閱失敗</translation> +<translation id="5864754048328252126">充電時的閒置動作</translation> <translation id="5865508026715185451">「<ph name="APP_NAME" />」即將暫停</translation> <translation id="586567932979200359">你正在透過磁碟映像執行 <ph name="PRODUCT_NAME" />。你可以直接在電腦上安裝程式,往後無需透過磁碟映像即可直接執行,而且能隨時使用最新的版本。</translation> <translation id="5865733239029070421">自動將使用統計資料和當機報告傳送給 Google</translation> @@ -3811,6 +3821,7 @@ <translation id="6120205520491252677">將這個網頁固定到開始畫面...</translation> <translation id="6122081475643980456">你的網際網路連線目前受到控制</translation> <translation id="6122095009389448667">繼續禁止這個網站讀取剪貼簿</translation> +<translation id="6122831415929794347">要停用安全瀏覽功能嗎?</translation> <translation id="6122875415561139701">無法在以下裝置上執行寫入作業:「<ph name="DEVICE_NAME" />」。</translation> <translation id="6124650939968185064">下列擴充功能與這個擴充功能之間有相依關係:</translation> <translation id="6124698108608891449">這個網站需要更多權限。</translation> @@ -4014,6 +4025,7 @@ <translation id="6408118934673775994">讀取及變更你在 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" /> 和 <ph name="WEBSITE_3" /> 網站上的資料</translation> <translation id="6410257289063177456">圖片檔</translation> <translation id="6410328738210026208">變更版本並執行 Powerwash</translation> +<translation id="6410390304316730527">安全瀏覽功能可保護你不受到攻擊,攻擊者可能會誘騙你從事一些危險行為,例如安裝惡意軟體或洩漏個人資訊 (例如密碼、電話號碼或信用卡資訊)。如果你停用這項功能,瀏覽不熟悉或風評不佳的網站時,請提高警覺。</translation> <translation id="6410668567036790476">新增搜尋引擎</translation> <translation id="641081527798843608">主題比對</translation> <translation id="6412673304250309937">可使用儲存在 Chrome 中的不安全網站清單檢查網址。如果有網站試圖竊取你的密碼,或當你下載有害檔案時,Chrome 可能也會將網址 (包括部分網頁內容) 傳送至安全瀏覽功能。</translation> @@ -5933,6 +5945,7 @@ <translation id="8951256747718668828">發生錯誤,因此無法完成還原程序</translation> <translation id="8951465597020890363">仍然要結束訪客模式嗎?</translation> <translation id="8952831374766033534">不支援的設定選項:<ph name="ERROR_LINE" /></translation> +<translation id="8953476467359856141">充電時</translation> <translation id="895347679606913382">啟動中...</translation> <translation id="8957762313041272117">即時字幕</translation> <translation id="895944840846194039">JavaScript 記憶體使用量</translation>
diff --git a/chrome/app/resources/google_chrome_strings_af.xtb b/chrome/app/resources/google_chrome_strings_af.xtb index c980e59..872a9324 100644 --- a/chrome/app/resources/google_chrome_strings_af.xtb +++ b/chrome/app/resources/google_chrome_strings_af.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Vee ook data van Chrome af uit (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome het toegang tot jou ligging nodig om jou ligging met hierdie werf te deel</translation> <translation id="3533694711092285624">Geen gestoorde wagwoorde nie. Chrome kan jou wagwoorde nagaan wanneer jy hulle stoor.</translation> +<translation id="3541482654983822893">Chrome kan nie jou wagwoorde nagaan nie. Probeer weer ná 24 uur.</translation> <translation id="3576528680708590453">Jou stelseladministrateur het Google Chrome opgestel om 'n alternatiewe blaaier oop te maak om na <ph name="TARGET_URL_HOSTNAME" /> toe te gaan.</translation> <translation id="3582972582564653026">Sinkroniseer en personaliseer Chrome op al jou toestelle</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Jou administrateur vereis dat jy Chrome herbegin om 'n opdatering toe te pas}=1{Jou administrateur vereis dat jy Chrome herbegin om 'n opdatering toe te pas. Jou incognitovenster sal nie weer oopgemaak word nie.}other{Jou administrateur vereis dat jy Chrome herbegin om 'n opdatering toe te pas. Jou # incognitovensters sal nie weer oopgemaak word nie.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">Jy meld tans met 'n bestuurde rekening aan en gee sy administrateur beheer oor jou Google Chrome-profiel. Jou Chrome-data, soos jou programme, boekmerke, geskiedenis, wagwoorde en ander instellings, sal permanent aan <ph name="USER_NAME" /> gekoppel word. Jy sal hierdie data via die Google-rekeningekontroleskerm kan uitvee, maar jy sal hierdie data nie met 'n ander rekening kan assosieer nie. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Die installeerder kon nie die argief se saampersing omkeer nie. Laai Google Chrome asseblief weer af.</translation> <translation id="4191857738314598978">{0,plural, =1{Herbegin Chrome binne 'n dag}other{Herbegin Chrome binne # dae}}</translation> +<translation id="4205939740494406371">Chrome kan nie jou wagwoorde nagaan nie. Probeer ná 24 weer uur of <ph name="BEGIN_LINK" />gaan wagwoorde in jou Google-rekening na<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Meld af uit Chrome?</translation> <translation id="4251615635259297716">Koppel jou Chrome-data aan hierdie rekening?</translation> <translation id="4293420128516039005">Meld aan om Chrome op al jou toestelle te sinkroniseer en personaliseer</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index 9d926b60..d778d05 100644 --- a/chrome/app/resources/google_chrome_strings_ar.xtb +++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -70,7 +70,7 @@ <translation id="2847461019998147611">عرض Google Chrome بهذه اللغة</translation> <translation id="2857540653560290388">جارٍ إطلاق Chrome...</translation> <translation id="2871893339301912279">تم تسجيل دخولك إلى Chrome!</translation> -<translation id="2888126860611144412">لمحة عامة عن Chrome</translation> +<translation id="2888126860611144412">لمحة عن Chrome</translation> <translation id="2929907241665500097">تعذّر تحديث Chrome بسبب حدوث خطأ. <ph name="BEGIN_LINK" />حلّ مشاكل تحديث Chrome وتعذُّر التحديثات<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Chrome - تسجيل الدخول إلى الشبكة</translation> <translation id="3037838751736561277">Google Chrome في وضع الخلفية.</translation> @@ -90,6 +90,7 @@ <translation id="34857402635545079">محو البيانات من Chrome أيضًا (<ph name="URL" />)</translation> <translation id="3503306920980160878">يحتاج Chrome للوصول إلى موقعك الجغرافي لمشاركته مع موقع الويب هذا.</translation> <translation id="3533694711092285624">ما مِن كلمات مرور محفوظة. لا يستطيع متصفّح Chrome التحقّق من كلمات المرور إلا عند حفظها.</translation> +<translation id="3541482654983822893">يتعذّر على Chrome التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة.</translation> <translation id="3576528680708590453">ضَبَط مشرف النظام Google Chrome لفتح متصفِّح بديل للوصول إلى <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">يمكنك مزامنة Chrome وتخصيصه على جميع أجهزتك.</translation> <translation id="3596080736082218006">{COUNT,plural, =0{يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث.}=1{يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نافذة التصفح المتخفي.}two{يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نافذتَي التصفح المتخفي.}few{يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}many{يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}other{يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}}</translation> @@ -107,6 +108,7 @@ <translation id="4147555960264124640">إنك تسجل الدخول باستخدام حساب مُدار وتمنح المشرف إمكانية التحكم في ملفك الشخصي في Google Chrome. وسيتم ربط بيانات Chrome التابعة لك، مثل التطبيقات والإشارات المرجعية والسجلّ وكلمات المرور والإعدادات الأخرى بالمستخدم <ph name="USER_NAME" />. وستتمكن من حذف هذه البيانات عبر لوحة تحكم حسابات Google، ولكنك لن تتمكن من إقران هذه البيانات بحساب آخر. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">فشلت أداة المثبِّت في فك ضغط الأرشيف. يُرجى تنزيل Google Chrome مرة أخرى.</translation> <translation id="4191857738314598978">{0,plural, =1{يجب إعادة تشغيل Chrome في غضون يوم واحد}zero{يجب إعادة تشغيل Chrome في غضون # يوم}two{يجب إعادة تشغيل Chrome في غضون يومين}few{يجب إعادة تشغيل Chrome في غضون # أيام}many{يجب إعادة تشغيل Chrome في غضون # يومًا}other{يجب إعادة تشغيل Chrome في غضون # يوم}}</translation> +<translation id="4205939740494406371">يتعذّر على Chrome التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة أو <ph name="BEGIN_LINK" />التحقُّق من كلمات المرور في حسابك على Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">هل تريد تسجيل الخروج من Chrome؟</translation> <translation id="4251615635259297716">هل ترغب في ربط بياناتك في Chrome بهذا الحساب؟</translation> <translation id="4293420128516039005">يمكنك تسجيل الدخول لمزامنة Chrome وتخصيصه على جميع أجهزتك.</translation> @@ -157,7 +159,7 @@ <translation id="5686916850681061684">تخصيص Google Chrome والتحكم فيه معلومات مهمة - انقر للحصول على التفاصيل.</translation> <translation id="5690427481109656848">Google LLC</translation> <translation id="5715063361988620182">{SECONDS,plural, =1{ستتم إعادة تشغيل Google Chrome خلال ثانية واحدة}zero{ستتم إعادة تشغيل Google Chrome خلال # ثانية}two{ستتم إعادة تشغيل Google Chrome خلال ثانيتين (#)}few{ستتم إعادة تشغيل Google Chrome خلال # ثوانٍ}many{ستتم إعادة تشغيل Google Chrome خلال # ثانيةً}other{ستتم إعادة تشغيل Google Chrome خلال # ثانية}}</translation> -<translation id="573759479754913123">لمحة عامة عن نظام التشغيل Chrome</translation> +<translation id="573759479754913123">لمحة عن نظام التشغيل Chrome</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">تعذَّر إطلاق Chrome. يُرجى إعادة المحاولة.</translation> <translation id="5867197326698922595">يحاول Google Chrome تعديل كلمات المرور.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bs.xtb b/chrome/app/resources/google_chrome_strings_bs.xtb index a0f4c0b..4da5983 100644 --- a/chrome/app/resources/google_chrome_strings_bs.xtb +++ b/chrome/app/resources/google_chrome_strings_bs.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Obrišite podatke i s Chromea (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome traži pristup vašoj lokaciji da bi je podijelio s ovom web lokacijom.</translation> <translation id="3533694711092285624">Nema sačuvanih lozinki. Chrome može provjeravati vaše lozinke kada ih sačuvate.</translation> +<translation id="3541482654983822893">Chrome ne može provjeravati vaše lozinke. Pokušajte ponovo za 24 sata.</translation> <translation id="3576528680708590453">Vaš administrator sustava konfigurirao je Google Chrome da otvara zamjenski preglednik za pristup URL-u <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Sinhronizirajte i personalizirajte Chrome na svim uređajima</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja}=1{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja. Vaš anonimni prozor se neće ponovo otvoriti.}one{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja. Vaš # anonimni prozor se neće ponovo otvoriti.}few{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja. Vaša # anonimna prozora se neće ponovo otvoriti.}other{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja. Vaših # anonimnih prozora se neće ponovo otvoriti.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">Prijavljujete se upravljanim računom i dajete njegovom administratoru kontrolu nad svojim Google Chrome profilom. Vaši podaci iz Chromea, kao što su vaše aplikacije, oznake, historija, lozinke i druge postavke, bit će trajno vezani za korisnika <ph name="USER_NAME" />. Moći ćete izbrisati ove podatke na kontrolnoj tabli Google računa, ali nećete moći povezati ove podatke s drugim računom. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Aplikacija za instaliranje nije uspjela dekompresirati arhivu. Ponovo preuzmite Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Ponovo pokrenite Chrome u roku od jednog dana}one{Ponovo pokrenite Chrome u roku od # dan}few{Ponovo pokrenite Chrome u roku od # dana}other{Ponovo pokrenite Chrome u roku od # dana}}</translation> +<translation id="4205939740494406371">Chrome ne može provjeravati vaše lozinke. Pokušajte ponovo za 24 sata ili <ph name="BEGIN_LINK" />provjerite lozinke na Google računu<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Odjaviti se iz Chromea?</translation> <translation id="4251615635259297716">Povezati podatke iz Chromea s ovim računom?</translation> <translation id="4293420128516039005">Prijavite se za sinhroniziranje i personaliziranje Chromea na svim svojim uređajima</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb index aa9b397..8f3daafd 100644 --- a/chrome/app/resources/google_chrome_strings_ca.xtb +++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -87,6 +87,7 @@ <translation id="34857402635545079">Esborra també les dades de Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome necessita accedir a la teva ubicació per compartir-la amb aquest lloc web</translation> <translation id="3533694711092285624">No hi ha cap contrasenya desada. Chrome pot comprovar les teves contrasenyes quan les deses.</translation> +<translation id="3541482654983822893">Chrome no pot comprovar les teves contrasenyes. Torna-ho a provar al cap de 24 hores.</translation> <translation id="3576528680708590453">L'administrador del sistema ha configurat Google Chrome perquè obri un navegador alternatiu per accedir a <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Sincronitza i personalitza Chrome en tots els teus dispositius</translation> <translation id="3596080736082218006">{COUNT,plural, =0{L'administrador necessita que reiniciïs Chrome per aplicar una actualització}=1{L'administrador necessita que reiniciïs Chrome per aplicar una actualització. La finestra d'incògnit no es tornarà a obrir.}other{L'administrador necessita que reiniciïs Chrome per aplicar una actualització. Les # finestres d'incògnit no es tornaran a obrir.}}</translation> @@ -104,6 +105,7 @@ <translation id="4147555960264124640">Esteu a punt d'iniciar la sessió amb un compte gestionat i d'atorgar el control del vostre perfil de Google Chrome a l'administrador corresponent. Les vostres dades de Chrome, com ara aplicacions, adreces d'interès, historial, contrasenyes i altres opcions, s'enllaçaran permanentment amb <ph name="USER_NAME" />. Podreu suprimir aquestes dades mitjançant el tauler de control de comptes de Google, però no les podreu associar amb un altre compte. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">L'instal·lador no ha pogut descomprimir el fitxer. Torna a baixar Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Reinicia Chrome en 1 dia}other{Reinicia Chrome en # dies}}</translation> +<translation id="4205939740494406371">Chrome no pot comprovar les teves contrasenyes. Torna-ho a provar al cap de 24 hores o <ph name="BEGIN_LINK" />comprova les contrasenyes al teu Compte de Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Vols tancar la sessió de Chrome?</translation> <translation id="4251615635259297716">Voleu enllaçar les vostres dades de Chrome amb aquest compte?</translation> <translation id="4293420128516039005">Inicia la sessió per sincronitzar i personalitzar Chrome en tots els teus dispositius</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb index e2901df8..70ebdbe 100644 --- a/chrome/app/resources/google_chrome_strings_cs.xtb +++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -91,6 +91,7 @@ <translation id="34857402635545079">Vymazat také data z Chromu (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome potřebuje přístup k vaší poloze, aby ji mohl sdílet s tímto webem</translation> <translation id="3533694711092285624">Nemáte žádná uložená hesla. Chrome může hesla zkontrolovat, pouze když si je uložíte.</translation> +<translation id="3541482654983822893">Chrome nemůže zkontrolovat vaše hesla. Zkuste to znovu za 24 hodin.</translation> <translation id="3576528680708590453">Administrátor systému nakonfiguroval prohlížeč Google Chrome tak, aby pro přístup k adrese <ph name="TARGET_URL_HOSTNAME" /> otevřel alternativní prohlížeč.</translation> <translation id="3582972582564653026">Synchronizujte a upravte si Chrome na různých zařízeních</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali}=1{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali. Anonymní okno se neotevře znovu.}few{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali. # anonymní okna se neotevřou znovu.}many{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali. # anonymního okna se neotevře znovu.}other{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali. # anonymních oken se neotevře znovu.}}</translation> @@ -108,6 +109,7 @@ <translation id="4147555960264124640">Přihlašujete se pomocí spravovaného účtu a poskytujete jeho správci kontrolu nad vaším profilem Google Chrome. Vaše údaje prohlížeče Chrome, například aplikace, záložky, historie, hesla a jiná nastavení, budou trvale přidružena k účtu <ph name="USER_NAME" />. Tyto údaje budete moci smazat pomocí Hlavního panelu Google, ale nebudete je moci přidružit k jinému účtu. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Instalačnímu programu se nepodařilo rozbalit archiv. Stáhněte prosím Google Chrome ještě jednou.</translation> <translation id="4191857738314598978">{0,plural, =1{Do jednoho dne Chrome restartujte}few{Do # dní Chrome restartujte}many{Do # dne Chrome restartujte}other{Do # dní Chrome restartujte}}</translation> +<translation id="4205939740494406371">Chrome nemůže zkontrolovat vaše hesla. Zkuste to znovu zítra, případně <ph name="BEGIN_LINK" />hesla zkontrolujte v účtu Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Odhlásit se z Chromu?</translation> <translation id="4251615635259297716">Chcete propojit údaje prohlížeče Chrome s tímto účtem?</translation> <translation id="4293420128516039005">Po přihlášení si budete moci Chrome synchronizovat a upravit na různých zařízeních</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb index f8fa756..0089007 100644 --- a/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">Ryd også data fra Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome skal have adgang til din placering for at dele din placering med dette website</translation> <translation id="3533694711092285624">Der er ingen gemte adgangskoder. Chrome kan tjekke dine adgangskoder, når du gemmer dem.</translation> +<translation id="3541482654983822893">Chrome kan ikke tjekke dine adgangskoder. Prøv igen efter 24 timer.</translation> <translation id="3576528680708590453">Din systemadministrator har konfigureret Google Chrome til at åbne en anden browser for at få adgang til <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Synkroniser og tilpas Chrome på alle dine enheder</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering}=1{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. Dit inkognitovindue åbnes ikke igen.}one{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. # inkognitovindue åbnes ikke igen.}other{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. Dine # inkognitovinduer åbnes ikke igen.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">Du er ved at logge ind med en managerstyret konto og give dens administrator kontrol over din profil i Google Chrome. Dine Chrome-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via kontrolpanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Installationsprogrammet kunne ikke pakke arkivet ud. Download Google Chrome igen.</translation> <translation id="4191857738314598978">{0,plural, =1{Genstart Chrome inden for én dag}one{Genstart Chrome inden for # dag}other{Genstart Chrome inden for # dage}}</translation> +<translation id="4205939740494406371">Chrome kan ikke tjekke dine adgangskoder. Prøv igen efter 24 timer, eller <ph name="BEGIN_LINK" />tjek adgangskoder på din Google-konto<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Vil du logge ud af Chrome?</translation> <translation id="4251615635259297716">Vil du linke dine Chrome-data til denne konto?</translation> <translation id="4293420128516039005">Log ind for at synkronisere og tilpasse Chrome på alle dine enheder</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb index f7b6853..1e26af73 100644 --- a/chrome/app/resources/google_chrome_strings_de.xtb +++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -87,6 +87,7 @@ <translation id="34857402635545079">Daten aus Chrome ebenfalls löschen (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome benötigt Zugriff auf Ihren Standort, um ihn mit dieser Website zu teilen</translation> <translation id="3533694711092285624">Keine gespeicherten Passwörter. Chrome kann Ihre Passwörter prüfen, wenn Sie sie speichern.</translation> +<translation id="3541482654983822893">Chrome kann Ihre Passwörter nicht prüfen. Bitte versuchen Sie es in 24 Stunden noch einmal.</translation> <translation id="3576528680708590453">Ihr Systemadministrator hat Google Chrome so konfiguriert, dass <ph name="TARGET_URL_HOSTNAME" /> in einem alternativen Browser geöffnet wird.</translation> <translation id="3582972582564653026">Chrome wird auf allen Ihren Geräten synchronisiert und personalisiert</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Laut Ihrem Administrator müssen Sie Chrome neu starten, um ein Update durchzuführen}=1{Laut Ihrem Administrator müssen Sie Chrome neu starten, um ein Update durchzuführen. Ihr Inkognitofenster wird nicht wieder geöffnet.}other{Laut Ihrem Administrator müssen Sie Chrome neu starten, um ein Update durchzuführen. Ihre # Inkognitofenster werden nicht wieder geöffnet.}}</translation> @@ -104,6 +105,7 @@ <translation id="4147555960264124640">Sie melden sich mit einem verwalteten Konto an und ermöglichen dessen Administrator Zugriff auf Ihr Google Chrome-Profil. Ihre Chrome-Daten, wie Apps, Lesezeichen, Verlauf, Passwörter und andere Einstellungen, werden dauerhaft mit <ph name="USER_NAME" /> verknüpft. Sie können diese Daten über das Google Konten-Dashboard löschen, aber nicht mit einem anderen Konto verknüpfen. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Das Installationsprogramm konnte das Archiv nicht dekomprimieren. Laden Sie Google Chrome erneut herunter.</translation> <translation id="4191857738314598978">{0,plural, =1{Chrome innerhalb eines Tages neu starten}other{Chrome innerhalb von # Tagen neu starten}}</translation> +<translation id="4205939740494406371">Chrome kann Ihre Passwörter nicht prüfen. Versuchen Sie es in 24 Stunden noch einmal oder <ph name="BEGIN_LINK" />prüfen Sie die Passwörter in Ihrem Google-Konto<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Von Chrome abmelden?</translation> <translation id="4251615635259297716">Ihre Chrome-Daten mit diesem Konto verknüpfen?</translation> <translation id="4293420128516039005">Wenn Sie sich anmelden, wird Chrome auf allen Ihren Geräten synchronisiert und personalisiert</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index eb7733c..ad55d56 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Also clear data from Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome needs access to your location to share your location with this site</translation> <translation id="3533694711092285624">No saved passwords. Chrome can check your passwords when you save them.</translation> +<translation id="3541482654983822893">Chrome can't check your passwords. Try again after 24 hours.</translation> <translation id="3576528680708590453">Your system administrator has configured Google Chrome to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Sync and personalise Chrome across your devices</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Your administrator requires that you relaunch Chrome to apply an update}=1{Your administrator requires that you relaunch Chrome to apply an update. Your Incognito window won't reopen.}other{Your administrator requires that you relaunch Chrome to apply an update. Your # Incognito windows won't reopen.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">You are signing in with a managed account and giving its administrator control over your Google Chrome profile. Your Chrome data, such as your apps, bookmarks, history, passwords and other settings will become permanently tied to <ph name="USER_NAME" />. You will be able to delete this data via the Google Accounts Dashboard, but you will not be able to associate this data with another account. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">The installer failed to uncompress archive. Please download Google Chrome again.</translation> <translation id="4191857738314598978">{0,plural, =1{Relaunch Chrome within a day}other{Relaunch Chrome within # days}}</translation> +<translation id="4205939740494406371">Chrome can't check your passwords. Try again after 24 hours or <ph name="BEGIN_LINK" />check passwords in your Google Account<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Sign out of Chrome?</translation> <translation id="4251615635259297716">Link my Chrome data to this account</translation> <translation id="4293420128516039005">Sign in to sync and personalise Chrome across your devices</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb index 5a798b83..16a09d6 100644 --- a/chrome/app/resources/google_chrome_strings_eu.xtb +++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Halaber, garbitu Chrome-ko datuak (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome-k zure kokapena webgune honekin partekatzeko baimena behar du</translation> <translation id="3533694711092285624">Ez dago pasahitzik gordeta. Chrome-k pasahitzak egiazta ditzake gorde ondoren.</translation> +<translation id="3541482654983822893">Chrome-k ezin ditu egiaztatu pasahitzak. Saiatu berriro 24 ordu barru.</translation> <translation id="3576528680708590453">Sistemaren administratzailearen konfigurazioaren arabera, Google Chrome-k beste arakatzaile bat ireki behar du <ph name="TARGET_URL_HOSTNAME" /> helbidera joateko.</translation> <translation id="3582972582564653026">Sinkronizatu eta pertsonalizatu Chrome gailu guztietan</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Chrome berrabiaraz dezazun behar du administratzaileak, eguneratzea aplikatzeko}=1{Chrome berrabiaraz dezazun behar du administratzaileak, eguneratzea aplikatzeko Ezkutuko moduko leihoa ez da berriro irekiko.}other{Chrome berrabiaraz dezazun behar du administratzaileak, eguneratzea aplikatzeko Ezkutuko moduko # leihoak ez dira berriro irekiko.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">Kontu kudeatu batekin hasten ari zara saioa eta, beraz, Google Chrome-ko zure profilaren gaineko kontrola emango diozu kontuaren administratzaileari. <ph name="USER_NAME" /> erabiltzailearekin iraunkorki lotuko dira zure Chrome datuak, esaterako, aplikazioak, laster-markak eta beste ezarpen batzuk. Datu horiek ezabatzeko, Google-ko kontuen panela erabil dezakezu, baina ezin izango dituzu datuak lotu beste kontu batera. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Instalatzaileak ezin izan du artxiboa deskonprimitu. Deskargatu berriro Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Berrabiarazi Chrome egun bateko epean}other{Berrabiarazi Chrome # eguneko epean}}</translation> +<translation id="4205939740494406371">Chrome-k ezin ditu egiaztatu pasahitzak. Saiatu berriro 24 ordu barru edo <ph name="BEGIN_LINK" />egiaztatu pasahitzak Google-ko kontuan<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome-ko saioa amaitu nahi duzu?</translation> <translation id="4251615635259297716">Chrome-n dituzun datuak kontu honi lotu nahi dizkiozu?</translation> <translation id="4293420128516039005">Hasi saioa Chrome gailu guztietan sinkronizatu eta pertsonalizatzeko</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb index 9b050e57..7008da45e 100644 --- a/chrome/app/resources/google_chrome_strings_fi.xtb +++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">Poista data myös Chromesta (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome tarvitsee oikeuden käyttää sijaintiasi, jotta se voidaan jakaa tämän sivuston kanssa.</translation> <translation id="3533694711092285624">Ei tallennettuja salasanoja. Chrome voi tarkistaa salasanasi, kun tallennat niitä.</translation> +<translation id="3541482654983822893">Chrome ei voi tarkistaa salasanojasi. Yritä uudelleen 24 tunnin päästä.</translation> <translation id="3576528680708590453">Järjestelmänvalvojasi on määrittänyt Chromen käynnistämään vaihtoehtoisen selaimen, kun <ph name="TARGET_URL_HOSTNAME" /> avataan.</translation> <translation id="3582972582564653026">Voit synkronoida Chromen ja tehdä siitä yksilöllisemmän kaikilla laitteilla.</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Ylläpitäjä vaatii Chromen uudelleenkäynnistystä, jotta päivitys voidaan ottaa käyttöön.}=1{Ylläpitäjä vaatii Chromen uudelleenkäynnistystä, jotta päivitys voidaan ottaa käyttöön. Incognito-ikkunaasi ei avata uudelleen.}other{Ylläpitäjä vaatii Chromen uudelleenkäynnistystä, jotta päivitys voidaan ottaa käyttöön. # incognito-ikkunaasi ei avata uudelleen.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">Olet kirjautumassa sisään hallinnoidulla tilillä ja antamassa tilin järjestelmänvalvojalle oikeuden hallita Google Chrome -profiiliasi. Chrome-tietosi, kuten sovelluksesi, kirjanmerkkisi, historiasi, salasanasi ja muut asetuksesi, yhdistetään pysyvästi käyttäjätiliin <ph name="USER_NAME" />. Voit poistaa nämä tiedot Google-tilien Hallintapaneelissa, mutta et voi liittää tietoja toiseen tiliin. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Asennusohjelma ei pystynyt purkamaan arkistotiedostoa. Lataa Google Chrome uudelleen.</translation> <translation id="4191857738314598978">{0,plural, =1{Käynnistä Chrome uudelleen vuorokauden kuluessa}other{Käynnistä Chrome uudelleen # vuorokauden kuluessa}}</translation> +<translation id="4205939740494406371">Chrome ei voi tarkistaa salasanojasi. Yritä uudelleen 24 tunnin kuluttua tai <ph name="BEGIN_LINK" />tarkista salasanat Google-tililtä<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Kirjaudutaanko ulos Chromesta?</translation> <translation id="4251615635259297716">Linkitetäänkö Chrome-tiedot tähän tiliin?</translation> <translation id="4293420128516039005">Kirjaudu sisään, niin voit synkronoida Chromen ja tehdä siitä yksilöllisemmän kaikilla laitteilla.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr-CA.xtb b/chrome/app/resources/google_chrome_strings_fr-CA.xtb index cb90ea7..2e4c907 100644 --- a/chrome/app/resources/google_chrome_strings_fr-CA.xtb +++ b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
@@ -91,6 +91,7 @@ <translation id="34857402635545079">Effacer également les données dans Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome a besoin d'accéder à votre position afin de la partager avec ce site</translation> <translation id="3533694711092285624">Aucun mot de passe enregistré. Chrome ne peut vérifier vos mots de passe que si vous les enregistrez.</translation> +<translation id="3541482654983822893">Chrome ne peut pas vérifier vos mots de passe. Réessayez dans 24 heures.</translation> <translation id="3576528680708590453">Votre administrateur système a configuré Google Chrome pour qu'il ouvre un autre navigateur afin d'accéder à la page <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Synchroniser et personnaliser Chrome sur vos appareils</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Votre administrateur exige que vous relanciez Chrome pour appliquer une mise à jour}=1{Votre administrateur exige que vous relanciez Chrome pour appliquer une mise à jour. Votre fenêtre de navigation privée ne sera pas rouverte.}one{Votre administrateur exige que vous relanciez Chrome pour appliquer une mise à jour. Votre fenêtre de navigation privée ne sera pas rouverte.}other{Votre administrateur exige que vous relanciez Chrome pour appliquer une mise à jour. Vos # fenêtres de navigation privée ne seront pas rouvertes.}}</translation> @@ -108,6 +109,7 @@ <translation id="4147555960264124640">Vous vous connectez avec un compte géré et rendez son administrateur maître de votre profil Google Chrome. Vos données de Google Chrome, comme vos applications, vos favoris, votre historique, vos mots de passe et vos autres paramètres, vont être associées de manière permanente à <ph name="USER_NAME" />. Vous pourrez supprimer ces données à l'aide du tableau de bord des comptes Google, mais vous ne pourrez pas les associer à un autre compte. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Le programme d'installation n'a pas réussi à décompresser l'archive. Veuillez télécharger Google Chrome de nouveau.</translation> <translation id="4191857738314598978">{0,plural, =1{Redémarrer Chrome d'ici un jour}one{Redémarrer Chrome d'ici # jour}other{Redémarrer Chrome d'ici # jours}}</translation> +<translation id="4205939740494406371">Chrome ne peut pas vérifier vos mots de passe. Réessayez après 24 heures ou <ph name="BEGIN_LINK" />effectuez une vérification des mots de passe dans votre compte Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Se déconnecter de Chrome?</translation> <translation id="4251615635259297716">Associer vos données Chrome à ce compte?</translation> <translation id="4293420128516039005">Vous connecter pour synchroniser et personnaliser Chrome sur vos appareils</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gl.xtb b/chrome/app/resources/google_chrome_strings_gl.xtb index 2e844da5..0d46e3b 100644 --- a/chrome/app/resources/google_chrome_strings_gl.xtb +++ b/chrome/app/resources/google_chrome_strings_gl.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Borrar tamén os datos de Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome necesita acceder á túa localización para compartila con este sitio</translation> <translation id="3533694711092285624">Non hai contrasinais gardados. Chrome pode comprobar os teus contrasinais cando os gardes.</translation> +<translation id="3541482654983822893">Chrome non puido comprobar os teus contrasinais. Téntao de novo dentro de 24 horas.</translation> <translation id="3576528680708590453">O teu administrador do sistema configurou Google Chrome para abrir outro navegador co obxectivo de acceder a <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Sincroniza e personaliza Chrome nos teus dispositivos</translation> <translation id="3596080736082218006">{COUNT,plural, =0{O teu administrador require que reinicies Chrome para aplicar unha actualización}=1{O teu administrador require que reinicies Chrome para aplicar unha actualización. A ventá do modo de incógnito non se volverá abrir.}other{O teu administrador require que reinicies Chrome para aplicar unha actualización. As # ventás do modo de incógnito non se volverán abrir.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">Estás iniciando sesión cunha conta administrada, polo que concedes ao seu administrador o control sobre o teu perfil de Google Chrome. Os tes datos de Chrome, como aplicacións, marcadores, historial, contrasinais e outras opcións quedarán ligados de forma permanente a <ph name="USER_NAME" />. Poderás eliminar estes datos mediante o panel de control de contas de Google, pero non poderás asocialos a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">O instalador non puido descomprimir o arquivo. Descarga Google Chrome de novo.</translation> <translation id="4191857738314598978">{0,plural, =1{Reinicia Chrome en 1 día}other{Reinicia Chrome en # días}}</translation> +<translation id="4205939740494406371">Chrome non puido comprobar os teus contrasinais. Téntao de novo dentro de 24 horas ou <ph name="BEGIN_LINK" />comproba os contrasinais na túa Conta de Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Queres pechar sesión en Chrome?</translation> <translation id="4251615635259297716">Queres ligar os teus datos de Chrome con esta conta?</translation> <translation id="4293420128516039005">Inicia sesión para sincronizar e personalizar Chrome nos teus dispositivos</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb index f40cbae..af50dc7 100644 --- a/chrome/app/resources/google_chrome_strings_hu.xtb +++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -87,6 +87,7 @@ <translation id="34857402635545079">Az adatokat is törölje a Chrome-ból (<ph name="URL" />)</translation> <translation id="3503306920980160878">A Chrome-nak a helyadatokhoz való hozzáférésre van szüksége ahhoz, hogy megoszthassa a webhellyel az Ön tartózkodási helyét</translation> <translation id="3533694711092285624">Nincsenek mentett jelszavak. A Chrome képes a jelszavak ellenőrzésére, amikor Ön menti őket.</translation> +<translation id="3541482654983822893">A Chrome nem tudja ellenőrizni a jelszavait. Próbálja újra 24 óra múlva.</translation> <translation id="3576528680708590453">Rendszergazdája úgy állította be a Google Chrome-ot, hogy másik böngészőt nyisson meg a(z) <ph name="TARGET_URL_HOSTNAME" /> eléréséhez.</translation> <translation id="3582972582564653026">Szinkronizálhatja és személyre szabhatja a Chrome-ot minden eszközén</translation> <translation id="3596080736082218006">{COUNT,plural, =0{A rendszergazda előírta, hogy újra kell indítania a Chrome-ot a frissítés alkalmazásához.}=1{A rendszergazda előírta, hogy újra kell indítania a Chrome-ot a frissítés alkalmazásához. Az inkognitóablak nem fog újra megnyílni.}other{A rendszergazda előírta, hogy újra kell indítania a Chrome-ot a frissítés alkalmazásához. A(z) # inkognitóablak nem fog újra megnyílni.}}</translation> @@ -104,6 +105,7 @@ <translation id="4147555960264124640">Kezelt fiókkal jelentkezik be, és annak adminisztrátora számára hozzáférést biztosít Google Chrome-profiljához. Chrome-adatait – például alkalmazásait, könyvjelzőit, előzményeit, jelszavait és más beállításait – a rendszer véglegesen társítja a(z) <ph name="USER_NAME" /> fiókhoz. Ezen adatokat a Google-fiókok Irányítópultján törölheti, de más fiókhoz nem társíthatja őket. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Nem sikerült a telepítőnek kibontani a tömörített állományt. Kérjük, töltse le újra a Google Chrome böngészőt.</translation> <translation id="4191857738314598978">{0,plural, =1{A Chrome-ot 1 napon belül újra kell indítani}other{A Chrome-ot # napon belül újra kell indítani}}</translation> +<translation id="4205939740494406371">A Chrome nem tudja ellenőrizni a jelszavait. Próbálja újra 24 óra múlva, vagy <ph name="BEGIN_LINK" />ellenőrizze jelszavait a Google-fiókjában<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Kijelentkezés a Chrome-ból</translation> <translation id="4251615635259297716">Társítja Chrome-adatait ezzel a fiókkal?</translation> <translation id="4293420128516039005">Jelentkezzen be, hogy szinkronizálhassa és személyre szabhassa a Chrome-ot minden eszközén</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hy.xtb b/chrome/app/resources/google_chrome_strings_hy.xtb index 86f7583..75928fb 100644 --- a/chrome/app/resources/google_chrome_strings_hy.xtb +++ b/chrome/app/resources/google_chrome_strings_hy.xtb
@@ -90,6 +90,7 @@ <translation id="34857402635545079">Մաքրել նաև Chrome-ի տվյալները (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome-ին այս կայքի համար անհրաժեշտ է ձեզ տեղորոշելու թույլտվություն</translation> <translation id="3533694711092285624">Պահված գաղտնաբառեր չկան։ Chrome-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ պահում եք դրանք։</translation> +<translation id="3541482654983822893">Chrome-ը չի կարող ստուգել ձեր գաղտնաբառերը։ 24 ժամ հետո նորից փորձեք։</translation> <translation id="3576528680708590453">Ձեր համակարգի ադմինիստրատորն այնպես է կարգավորել Google Chrome-ը, որ <ph name="TARGET_URL_HOSTNAME" /> կայքը բացվի մեկ այլ դիտարկիչով:</translation> <translation id="3582972582564653026">Համաժամացրեք և անհատականացրեք Chrome-ը ձեր բոլոր սարքերում</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Թարմացումը կիրառելու համար ադմինիստրատորը պահանջում է վերագործարկել Chrome-ը}=1{Թարմացումը կիրառելու համար ադմինիստրատորը պահանջում է վերագործարկել Chrome-ը: Ձեր ինկոգնիտո պատուհանը նորից չի բացվի։}one{Թարմացումը կիրառելու համար ադմինիստրատորը պահանջում է վերագործարկել Chrome-ը: Ձեր # ինկոգնիտո պատուհանը նորից չի բացվի։}other{Թարմացումը կիրառելու համար ադմինիստրատորը պահանջում է վերագործարկել Chrome-ը: Ձեր # ինկոգնիտո պատուհանները նորից չեն բացվի։}}</translation> @@ -107,6 +108,7 @@ <translation id="4147555960264124640">Դուք մուտք եք գործում վերահսկվող հաշիվ` թույլ տալով ադմինիստրատորին վերահսկել ձեր Google Chrome պրոֆիլը: Ձեր Chrome տվյալները, ինչպես օրինակ` հավելվածները, էջանիշները, պատմությունը, գաղտնաբառերը և այլ կարգավորումները, մշտապես կկցվեն <ph name="USER_NAME" />-ին: Դուք կարող եք ջնջել այս տվյալները Google Dashboard-ի միջոցով, սակայն չեք կարող համակցել դրանք այլ հաշվի հետ: <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Տեղադրիչը չկարողացավ բացել արխիվը: Նորից ներբեռնեք Google Chrome-ը:</translation> <translation id="4191857738314598978">{0,plural, =1{Վերագործարկեք Chrome-ը մեկ օրվա ընթացքում}one{Վերագործարկեք Chrome-ը # օրվա ընթացքում}other{Վերագործարկեք Chrome-ը # օրվա ընթացքում}}</translation> +<translation id="4205939740494406371">Chrome-ը չի կարող ստուգել ձեր գաղտնաբառերը։ 24 ժամ հետո նորից փորձեք կամ <ph name="BEGIN_LINK" />ստուգեք ձեր Google հաշվի գաղտնաբառերը<ph name="END_LINK" />։</translation> <translation id="424864128008805179">Դուրս գա՞լ Chrome-ից:</translation> <translation id="4251615635259297716">Կապե՞լ ձեր Chrome-ի տվյալներն այս հաշվի հետ:</translation> <translation id="4293420128516039005">Մտեք հաշիվ՝ Chrome-ը ձեր բոլոր սարքերում անհատականացնելու համար</translation>
diff --git a/chrome/app/resources/google_chrome_strings_is.xtb b/chrome/app/resources/google_chrome_strings_is.xtb index 53d142e..9f3535c 100644 --- a/chrome/app/resources/google_chrome_strings_is.xtb +++ b/chrome/app/resources/google_chrome_strings_is.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Hreinsa líka gögn úr Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome þarf staðsetningaraðgang til að deila staðsetningu þinni með þessu vefsvæði</translation> <translation id="3533694711092285624">Engin vistuð aðgangsorð. Chrome getur athugað aðgangsorðin þín þegar þú vistar þau.</translation> +<translation id="3541482654983822893">Chrome getur ekki athugað aðgangsorðin þín. Reyndu aftur eftir sólarhring.</translation> <translation id="3576528680708590453">Kerfisstjórinn hefur stillt Google Chrome á að opna annan vafra fyrir <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Samstilltu Chrome á milli tækja og gerðu það að þínu</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Kerfisstjórinn þinn gerir kröfu um að þú endurræsir Chrome til að setja upp uppfærslu}=1{Kerfisstjórinn þinn gerir kröfu um að þú endurræsir Chrome til að setja upp uppfærslu. Huliðsglugginn enduropnast ekki.}one{Kerfisstjórinn þinn gerir kröfu um að þú endurræsir Chrome til að setja upp uppfærslu. # huliðsgluggi enduropnast ekki.}other{Kerfisstjórinn þinn gerir kröfu um að þú endurræsir Chrome til að setja upp uppfærslu. # huliðsgluggar enduropnast ekki.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">Þú ert að skrá þig inn á stýrðan reikning og gefur stjórnanda hans stjórn yfir Google Chrome prófílnum þínum. Gögnin þín í Chrome, s.s. forrit, bókamerki, ferill, aðgangsorð og aðrar stillingar, verða tengd varanlega við <ph name="USER_NAME" />. Þú getur eytt þessum gögnum á stjórnborði Google reikninga en getur ekki tengt þau öðrum reikningi. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Uppsetningarforritinu tókst ekki að afþjappa safnskrána. Sæktu Google Chrome aftur.</translation> <translation id="4191857738314598978">{0,plural, =1{Endurræstu Chrome innan eins dags}one{Endurræstu Chrome innan # dags}other{Endurræstu Chrome innan # daga}}</translation> +<translation id="4205939740494406371">Chrome getur ekki athugað aðgangsorðin þín. Reyndu aftur eftir sólarhring eða <ph name="BEGIN_LINK" />athugaðu aðgangsorðin á Google reikningnum þínum<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Viltu skrá þig út úr Chrome?</translation> <translation id="4251615635259297716">Tengja Chrome gögnin þín við þennan reikning?</translation> <translation id="4293420128516039005">Skráðu þig inn til að samstilla Chrome í tækjunum þínum og gera það að þínu</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb index 296cf36f..f36c60c 100644 --- a/chrome/app/resources/google_chrome_strings_iw.xtb +++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">ניקוי נתונים גם מ-Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome זקוק לגישה למיקום שלך כדי לשתף אותו עם האתר הזה</translation> <translation id="3533694711092285624">אין סיסמאות שמורות. Chrome יכול לבדוק את הסיסמאות שלך רק אם שמרת אותן.</translation> +<translation id="3541482654983822893">Chrome לא יכול לבדוק את הסיסמאות שלך. יש לנסות שוב בעוד 24 שעות.</translation> <translation id="3576528680708590453">לפי הגדרת מנהל המערכת, Google Chrome יפתח דפדפן חלופי כדי לגשת אל <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">סינכרון והתאמה אישית של Chrome בכל המכשירים שברשותך</translation> <translation id="3596080736082218006">{COUNT,plural, =0{מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון}=1{מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון. החלון האנונימי לא ייפתח מחדש.}two{מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון. # החלונות האנונימיים לא ייפתחו מחדש.}many{מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון. # החלונות האנונימיים לא ייפתחו מחדש.}other{מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון. # החלונות האנונימיים לא ייפתחו מחדש.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">בחרת להיכנס לחשבון מנוהל, ויינתן למנהל המערכת שלו שליטה על הפרופיל שלך ב-Chrome. הנתונים שלך ב-Chrome, כגון אפליקציות, סימניות, היסטוריה, סיסמאות והגדרות אחרות ייקשרו באופן קבוע ל-<ph name="USER_NAME" />. ניתן למחוק את הנתונים האלה באמצעות מרכז השליטה של חשבונות Google, אבל לא ניתן יהיה לשייך את הנתונים האלה לחשבון אחר. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">המתקין נכשל בביצוע דחיסה לארכיון. הורד שוב את Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{צריך להפעיל מחדש את Chrome תוך יום אחד}two{צריך להפעיל מחדש את Chrome תוך # ימים}many{צריך להפעיל מחדש את Chrome תוך # ימים}other{צריך להפעיל מחדש את Chrome תוך # ימים}}</translation> +<translation id="4205939740494406371">Chrome לא יכול לבדוק את הסיסמאות שלך. יש לנסות שוב בעוד 24 שעות או <ph name="BEGIN_LINK" />לבדוק את הסיסמאות בחשבון Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">האם לצאת מ-Chrome?</translation> <translation id="4251615635259297716">האם לקשר את הנתונים שלך ב-Chrome לחשבון זה?</translation> <translation id="4293420128516039005">כניסה לחשבון תסנכרן ותתאים אישית את Chrome בכל המכשירים שברשותך</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lo.xtb b/chrome/app/resources/google_chrome_strings_lo.xtb index 4decc47..2483d0d 100644 --- a/chrome/app/resources/google_chrome_strings_lo.xtb +++ b/chrome/app/resources/google_chrome_strings_lo.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">ລຶບລ້າງຂໍ້ມູນຈາກ Chrome (<ph name="URL" />) ນຳອີກ</translation> <translation id="3503306920980160878">Chrome ຕ້ອງການເຂົ້າເຖິງສະຖານທີ່ຂອງທ່ານເພື່ອແບ່ງປັນສະຖານທີ່ຂອງທ່ານກັບເວັບໄຊນີ້</translation> <translation id="3533694711092285624">ບໍ່ມີລະຫັດຜ່ານທີ່ບັນທຶກໄວ້. Chrome ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານເມື່ອທ່ານບັນທຶກພວກມັນໄວ້.</translation> +<translation id="3541482654983822893">Chrome ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່ຫຼັງຈາກ 24 ຊົ່ວໂມງ.</translation> <translation id="3576528680708590453">ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານໄດ້ກຳນົດຄ່າໃຫ້ Google Chrome ເປີດໂປຣແກຣມທ່ອງເວັບສຳຮອງເພື່ອເຂົ້າເຖິງ <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">ຊິ້ງຂໍ້ມູນ ແລະ ປັບແຕ່ງ Chrome ໃຫ້ເປັນແບບສ່ວນຕົວໃນທົ່ວອຸປະກອນຂອງທ່ານ</translation> <translation id="3596080736082218006">{COUNT,plural, =0{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານກຳນົດໃຫ້ທ່ານເປີດ Chrome ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດ}=1{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານກຳນົດໃຫ້ທ່ານເປີດ Chrome ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດ. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານຈະບໍ່ເປີດຄືນໃໝ່.}other{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານກຳນົດໃຫ້ທ່ານເປີດ Chrome ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດ. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານ # ລາຍການຈະບໍ່ເປີດຄືນໃໝ່.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">ທ່ານກໍາລັງລົງຊື່ເຂົ້າໃຊ້ດ້ວຍບັນຊີຄຸ້ມຄອງ ແລະໃຫ້ຜູ້ຄວບຄູມຂອງມັນຄວບຄຸມໂປຣໄຟລ໌ Google Chrome ຂອງທ່ານ. ຂໍ້ມູນ Chrome ຂອງທ່ານ, ເຊັ່ນ ແອັບ, ບຸກມາກສ໌, ປະຫວັດ, ລະຫັດຜ່ານ, ແລະການຕັ້ງອື່ນຂອງທ່ານຈະຖືກຜູກມັດກັບ <ph name="USER_NAME" /> ຢ່າງຖາວອນ. ທ່ານຈະສາມາດລຶບຂໍ້ມູນນີ້ໄດ້ຜ່ານ Google Accounts Dashboard, ແຕ່ທ່ານຈະບໍ່ສາມາດນໍາເອົາຂໍ້ມູນນີ້ມາກ່ຽວຂ້ອງກັບບັນຊີອື່ນໄດ້. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">ຕົວຕິດຕັ້ງບໍ່ສາມາດຄາຍການບີບອັດຈາກຄັງເກັບມ້ຽນ. ກະລຸນາດາວໂຫຼດ Google Chrome ອີກ.</translation> <translation id="4191857738314598978">{0,plural, =1{ເປີດໃຊ້ Chrome ຄືນໃໝ່ພາຍໃນໜຶ່ງມື້}other{ເປີດໃຊ້ Chrome ຄືນໃໝ່ພາຍໃນ # ມື້}}</translation> +<translation id="4205939740494406371">Chrome ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງໃໝ່ຫຼັງຈາກ 24 ຊົ່ວໂມງ ຫຼື <ph name="BEGIN_LINK" />ກວດລະຫັດຜ່ານໃນບັນຊີ Google ຂອງທ່ານ<ph name="END_LINK" />.</translation> <translation id="424864128008805179">ອອກຈາກລະບົບ Chrome ບໍ?</translation> <translation id="4251615635259297716">ລິ້ງ Chrome ຂອງທ່ານກັບບັນຊີນີ້ບໍ?</translation> <translation id="4293420128516039005">ເຂົ້າສູ່ລະບົບເພື່ອຊິ້ງຂໍ້ມູນ ແລະ ປັບແຕ່ງ Chrome ໃຫ້ເປັນແບບສ່ວນຕົວໃນທົ່ວອຸປະກອນຂອງທ່ານ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb index 8a54a15..6c47639 100644 --- a/chrome/app/resources/google_chrome_strings_lv.xtb +++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -90,6 +90,7 @@ <translation id="34857402635545079">Notīrīt arī datus no Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Pārlūkam Chrome ir nepieciešama piekļuve jūsu atrašanās vietas datiem, lai varētu tos kopīgot ar šo vietni.</translation> <translation id="3533694711092285624">Nav saglabātu paroļu. Pārlūkprogrammā Chrome var pārbaudīt jūsu paroles, ja jūs tās saglabājat.</translation> +<translation id="3541482654983822893">Pārlūkprogrammā Chrome nevar pārbaudīt jūsu paroles. Mēģiniet vēlreiz pēc 24 stundām.</translation> <translation id="3576528680708590453">Sistēmas administrators ir konfigurējis pārlūku Google Chrome, lai vietne <ph name="TARGET_URL_HOSTNAME" /> tiktu atvērta papildu pārlūkā.</translation> <translation id="3582972582564653026">Chrome sinhronizēšana un personalizēšana visās jūsu ierīcēs</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome.}=1{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome. Jūsu inkognito režīma logs netiks atkārtoti atvērts.}zero{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome. # jūsu inkognito režīma logi netiks atkārtoti atvērti.}one{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome. # jūsu inkognito režīma logs netiks atkārtoti atvērts.}other{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome. # jūsu inkognito režīma logi netiks atkārtoti atvērti.}}</translation> @@ -107,6 +108,7 @@ <translation id="4147555960264124640">Jūs pierakstāties ar pārvaldītu kontu un nodrošināt, ka tā administrators var pārvaldīt jūsu Google Chrome profilu. Jūsu Chrome dati, piemēram, lietotnes, grāmatzīmes, vēsture, paroles un citi iestatījumi tiks neatgriezeniski saistīti ar lietotāju <ph name="USER_NAME" />. Varēsiet dzēst šos datus, izmantojot Google kontu informācijas paneli, taču nevarēsiet saistīt šos datus ar citu kontu. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Instalētājam neizdevās atarhivēt arhīvu. Lūdzu, vēlreiz lejupielādējiet Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Restartējiet pārlūku Chrome vienas dienas laikā}zero{Restartējiet pārlūku Chrome # dienu laikā}one{Restartējiet pārlūku Chrome # dienas laikā}other{Restartējiet pārlūku Chrome # dienu laikā}}</translation> +<translation id="4205939740494406371">Pārlūkprogrammā Chrome nevar pārbaudīt jūsu paroles. Mēģiniet vēlreiz pēc 24 stundām vai <ph name="BEGIN_LINK" />pārbaudiet paroles savā Google kontā<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Vai izrakstīties no pārlūka Chrome?</translation> <translation id="4251615635259297716">Vai saistīt Chrome datus ar šo kontu?</translation> <translation id="4293420128516039005">Pierakstieties, lai sinhronizētu un personalizētu Chrome visās savās ierīcēs.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb index 8235248b..9cdef82 100644 --- a/chrome/app/resources/google_chrome_strings_mr.xtb +++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -91,6 +91,7 @@ <translation id="34857402635545079">Chrome (<ph name="URL" />) वरील डेटा देखील साफ करा</translation> <translation id="3503306920980160878">तुमचे स्थान या साइटसोबत शेअर करण्यासाठी Chrome ला तुमच्या स्थानाचा अॅक्सेस हवा आहे</translation> <translation id="3533694711092285624">सेव्ह केलेले पासवर्ड नाहीत. तुम्ही तुमचे पासवर्ड सेव्ह केल्यावर Chrome ते तपासू शकते.</translation> +<translation id="3541482654983822893">Chrome तुमचे पासवर्ड तपासू शकत नाही. २४ तासांनंतर पुन्हा प्रयत्न करा.</translation> <translation id="3576528680708590453">तुमच्या सिस्टम अॅडमिनिस्ट्रेटरने <ph name="TARGET_URL_HOSTNAME" /> ॲक्सेस करण्याकरिता पर्यायी ब्राउझर उघडण्यासाठी Google Chrome कॉन्फिगर केले आहे.</translation> <translation id="3582972582564653026">तुमच्या डिव्हाइसवर Chrome सिंक आणि पर्सनलाइझ करा</translation> <translation id="3596080736082218006">{COUNT,plural, =0{अपडेट लागू करता यावे यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे}=1{अपडेट लागू करता यावे यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे. तुमची गुप्त विंडो पुन्हा उघडणार नाही.}other{अपडेट लागू करता यावे यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे. तुमच्या # गुप्त विंडो पुन्हा उघडणार नाहीत.}}</translation> @@ -108,6 +109,7 @@ <translation id="4147555960264124640">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Google Chrome प्रोफाइलवर त्याच्या ॲडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chrome डेटा, जसे की तुमचे अॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्ड द्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">संग्रहण संक्षिप्त करण्यास इन्स्टॉलर अयशस्वी. कृपया Google Chrome पुन्हा डाउनलोड करा.</translation> <translation id="4191857738314598978">{0,plural, =1{एका दिवसामध्ये Chrome पुन्हा लाँच करा}other{# दिवसांमध्ये Chrome पुन्हा लाँच करा}}</translation> +<translation id="4205939740494406371">Chrome तुमचे पासवर्ड तपासू शकत नाही. २४ तासांनंतर पुन्हा प्रयत्न करा किंवा <ph name="BEGIN_LINK" />तुमच्या Google खाते मध्ये पासवर्ड तपासा<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome मधून साइन आउट करायचे?</translation> <translation id="4251615635259297716">या खात्यावर तुमच्या Chrome डेटा लिंक करायचा?</translation> <translation id="4293420128516039005">तुमच्या डिव्हाइसवर Chrome सिंक आणि पर्सनलाइझ करण्यासाठी साइन इन करा</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb index 3f19f21..6c556c0c 100644 --- a/chrome/app/resources/google_chrome_strings_ms.xtb +++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">Kosongkan data daripada Chrome (<ph name="URL" />) juga</translation> <translation id="3503306920980160878">Chrome memerlukan akses kepada lokasi anda untuk berkongsi lokasi dengan tapak ini</translation> <translation id="3533694711092285624">Tiada kata laluan yang disimpan. Chrome boleh menyemak kata laluan anda yang disimpan.</translation> +<translation id="3541482654983822893">Chrome tidak dapat menyemak kata laluan anda. Cuba lagi selepas 24 jam.</translation> <translation id="3576528680708590453">Pentadbir sistem anda telah mengkonfigurasikan Google Chrome agar membuka penyemak imbas alternatif untuk mengakses <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Segerakkan dan peribadikan Chrome pada semua peranti anda</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Pentadbir anda menghendaki anda melancarkan semula Chrome untuk menggunakan kemas kini}=1{Pentadbir anda menghendaki anda melancarkan semula Chrome untuk menggunakan kemas kini. Tetingkap Inkognito anda tidak dapat dibuka semula.}other{Pentadbir anda menghendaki anda melancarkan semula Chrome untuk menggunakan kemas kini. # tetingkap Inkognito anda tidak dapat dibuka semula.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">Anda log masuk menggunakan akaun terurus dan memberikan pentadbirnya kawalan terhadap profil Google Chrome anda. Data Chrome anda, seperti apl, penanda halaman, sejarah, kata laluan dan tetapan anda yang lain akan terikat kepada <ph name="USER_NAME" /> secara kekal. Anda akan dapat memadamkan data ini melalui Papan Pemuka Akaun Google, tetapi anda tidak akan dapat mengaitkan data ini dengan akaun lain. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Pemasang gagal untuk nyahmampat arkib. Sila muat turun Google Chrome semula.</translation> <translation id="4191857738314598978">{0,plural, =1{Lancarkan semula Chrome dalam masa sehari}other{Lancarkan semula Chrome dalam masa # hari}}</translation> +<translation id="4205939740494406371">Chrome tidak dapat menyemak kata laluan anda. Cuba lagi selepas 24 jam atau <ph name="BEGIN_LINK" />semak kata laluan dalam Akaun Google anda<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Log keluar daripada Chrome?</translation> <translation id="4251615635259297716">Paut data Chrome anda ke akaun ini?</translation> <translation id="4293420128516039005">Log masuk untuk menyegerakkan dan memperibadikan Chrome pada semua peranti anda</translation>
diff --git a/chrome/app/resources/google_chrome_strings_my.xtb b/chrome/app/resources/google_chrome_strings_my.xtb index a24667f..92a7d550 100644 --- a/chrome/app/resources/google_chrome_strings_my.xtb +++ b/chrome/app/resources/google_chrome_strings_my.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Chrome (<ph name="URL" />) မှ ဒေတာများကိုလည်း ရှင်းထုတ်ရန်</translation> <translation id="3503306920980160878">ဤဝဘ်ဆိုက်နှင့် သင်၏တည်နေရာကို မျှဝေရန် Chrome သည် သင့်တည်နေရာကို အသုံးပြုခွင့် လိုအပ်ပါသည်</translation> <translation id="3533694711092285624">သိမ်းထားသော စကားဝှက် မရှိပါ။ သင်စကားဝှက်များကို သိမ်းသည့်အခါ Chrome က ၎င်းတို့ကို စစ်ဆေးနိုင်သည်။</translation> +<translation id="3541482654983822893">Chrome က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ ၂၄ နာရီအကြာတွင် ထပ်စမ်းကြည့်ပါ။</translation> <translation id="3576528680708590453">စနစ်စီမံခန့်ခွဲသူသည် <ph name="TARGET_URL_HOSTNAME" /> ဖွင့်ကြည့်ရန်အတွက် အစားထိုးဘရောင်ဇာ အသုံးပြုရန် Google Chrome ကို စီစဉ်သတ်မှတ်ထားသည်။</translation> <translation id="3582972582564653026">သင်၏ စက်ပစ္စည်းများအားလုံးတွင် Chrome ကို စင့်ခ်လုပ်ပြီး စိတ်ကြိုက်ပြင်ဆင်ပါ</translation> <translation id="3596080736082218006">{COUNT,plural, =0{အပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chrome ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်}=1{အပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chrome ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်။ သင်၏ရုပ်ဖျက် ဝင်ဒိုးကို ပြန်ဖွင့်မည် မဟုတ်ပါ။}other{အပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chrome ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်။ သင်၏ရုပ်ဖျက် ဝင်ဒိုး # ခုကို ပြန်ဖွင့်မည် မဟုတ်ပါ။}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">သင်သည် စီမံခြင်းအကောင့်ဖြင့် ဝင်ရောက်နေခြင်း ဖြစ်ပြီး ၎င်း၏ကြီးကြပ်သူကို Google Chrome ပရိုဖိုင်အား ထိန်းချုပ်ခွင့်ပေးသည်။ အက်ပ်များ၊ စာညှပ်များ၊ မှတ်တမ်း၊ လျှို့ဝှက်စကားလုံးများ၊ နှင့် အခြား ကြိုတင်ချိန်ညှိချက်များကဲ့သို့ Chrome ဒေတာများသည် <ph name="USER_NAME" /> သို့အမြဲတမ်း ချည်နှောင်ထားပါသည်။ ဤဒေတာများကို သင် Google အကောင့်များ ဒိုင်ခွက်မှ တစ်ဆင့် ဖျက်နိုင်သည်၊ သို့သော် ဤဒေတာများကို အခြားအကောင့်ဖြင့် ချိတ်ဆက်၍ရမည် မဟုတ်ပါ။ <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">ထည့်သွင်းရန်လုပ်ဆောင်ရာတွင် ချုံ့ထားသောဖိုင်မှတ်တမ်းကို ပြန်ဖွင့်မပေးနိုင်ခဲ့ပါ။ ကျေးဇူးပြု၍ Google Chrome ကို ထပ်ပြီး ဒေါင်းလုဒ် လုပ်ယူပါ။</translation> <translation id="4191857738314598978">{0,plural, =1{Chrome ကို တစ်ရက်အတွင်း ပြန်လည်စတင်ပါ}other{Chrome ကို # ရက်အတွင်း ပြန်လည်စတင်ပါ}}</translation> +<translation id="4205939740494406371">Chrome က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ ၂၄ နာရီအကြာတွင် ထပ်စမ်းကြည့်ပါ သို့မဟုတ် <ph name="BEGIN_LINK" />သင်၏ Google Account ရှိ စကားဝှက်များကို စစ်ဆေးပါ<ph name="END_LINK" />။</translation> <translation id="424864128008805179">Chrome မှထွက်မလား။</translation> <translation id="4251615635259297716">သင်၏ Chrome ဒေတာကို ဒီကွန်ပျူတာ နှင့် ချိတ်ပေးရမလား?</translation> <translation id="4293420128516039005">သင်၏ စက်ပစ္စည်းများအားလုံးတွင် Chrome ကို စင့်ခ်လုပ်ပြီး စိတ်ကြိုက်ပြင်ဆင်ရန် လက်မှတ်ထိုးဝင်ပါ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb index 1574a31..549e2cb 100644 --- a/chrome/app/resources/google_chrome_strings_nl.xtb +++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -91,6 +91,7 @@ <translation id="34857402635545079">Ook gegevens van Chrome wissen (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome heeft toegang tot je locatie nodig om je locatie met deze site te delen</translation> <translation id="3533694711092285624">Geen opgeslagen wachtwoorden. Chrome kan je wachtwoorden controleren als je deze hebt opgeslagen.</translation> +<translation id="3541482654983822893">Chrome kan je wachtwoorden niet checken. Probeer het over 24 uur opnieuw.</translation> <translation id="3576528680708590453">Je systeembeheerder heeft Google Chrome geconfigureerd om een alternatieve browser te openen voor toegang tot <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Chrome op al je apparaten synchroniseren en personaliseren</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Je beheerder vereist dat je Chrome opnieuw start om een update uit te voeren.}=1{Je beheerder vereist dat je Chrome opnieuw start om een update uit te voeren. Je incognitovenster kan niet opnieuw worden geopend.}other{Je beheerder vereist dat je Chrome opnieuw start om een update uit te voeren. Je # incognitovensters kunnen niet opnieuw worden geopend.}}</translation> @@ -108,6 +109,7 @@ <translation id="4147555960264124640">Je logt in op een beheerd account en geeft de beheerderscontrole over aan je Google Chrome-profiel. Je Chrome-gegevens zoals je apps, bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden permanent gekoppeld aan <ph name="USER_NAME" />. Je kunt deze gegevens verwijderen via het Google Accounts Dashboard, maar je kunt deze gegevens niet koppelen aan een ander account. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Het installatieprogramma kan het archief niet uitpakken. Download Google Chrome opnieuw.</translation> <translation id="4191857738314598978">{0,plural, =1{Start Chrome binnen een dag opnieuw}other{Start Chrome binnen # dagen opnieuw}}</translation> +<translation id="4205939740494406371">Chrome kan je wachtwoorden niet checken. Probeer het over 24 uur opnieuw of <ph name="BEGIN_LINK" />check de wachtwoorden in je Google-account<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Uitloggen bij Chrome?</translation> <translation id="4251615635259297716">Wil je je Chrome-gegevens aan dit account koppelen?</translation> <translation id="4293420128516039005">Log in om Chrome op al je apparaten te synchroniseren en te personaliseren</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb index 7eef2efd..8a14762b 100644 --- a/chrome/app/resources/google_chrome_strings_no.xtb +++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">Slett dataene fra Chrome også (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome trenger tilgang til posisjonen din for å kunne dele den med dette nettstedet</translation> <translation id="3533694711092285624">Ingen lagrede passord. Chrome kan sjekke passordene dine når du lagrer dem.</translation> +<translation id="3541482654983822893">Chrome kan ikke sjekke passordene dine. Prøv igjen når det har gått 24 timer.</translation> <translation id="3576528680708590453">Systemadministratoren din har konfigurert at Google Chrome skal åpne <ph name="TARGET_URL_HOSTNAME" /> i en annen nettleser.</translation> <translation id="3582972582564653026">Synkroniser og gi Chrome et personlig preg på alle enhetene dine</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Administratoren din krever at du starter Chrome på nytt for å ta i bruk en oppdatering}=1{Administratoren din krever at du starter Chrome på nytt for å ta i bruk en oppdatering. Inkognitovinduet ditt blir ikke gjenåpnet.}other{Administratoren din krever at du starter Chrome på nytt for å ta i bruk en oppdatering. De # inkognitovinduene dine blir ikke gjenåpnet.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">Du er i ferd med å logge deg på med en administrert konto og gir administratoren kontroll over Chrome-profilen din. Chrome-dataene dine, som apper, bokmerker, loggen, passord og andre innstillinger, blir permanent knyttet til <ph name="USER_NAME" />. Du kan slette disse dataene via kontooversikten for Google, men du kan ikke knytte disse dataene til en annen konto. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Installasjonsprogrammet fikk ikke dekomprimert arkivet. Last ned Google Chrome på nytt.</translation> <translation id="4191857738314598978">{0,plural, =1{Start Chrome på nytt innen en dag}other{Start Chrome på nytt innen # dager}}</translation> +<translation id="4205939740494406371">Chrome kan ikke sjekke passordene dine. Prøv på nytt om 24 timer, eller <ph name="BEGIN_LINK" />sjekk passordene i Google-kontoen din<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Vil du logge av Chrome?</translation> <translation id="4251615635259297716">Vil du koble Chrome-dataene dine til denne kontoen?</translation> <translation id="4293420128516039005">Logg på for å synkronisere og gi Chrome et personlig preg på alle enhetene dine</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb index 6fb8395..3082c55 100644 --- a/chrome/app/resources/google_chrome_strings_pl.xtb +++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -87,6 +87,7 @@ <translation id="34857402635545079">Wyczyść też dane z Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome musi mieć dostęp do Twojej lokalizacji, by udostępnić ją tej stronie</translation> <translation id="3533694711092285624">Brak zapisanych haseł. Chrome może sprawdzać Twoje hasła, gdy je zapiszesz.</translation> +<translation id="3541482654983822893">Chrome nie może sprawdzić Twoich haseł. Spróbuj ponownie za 24 godziny.</translation> <translation id="3576528680708590453">Administrator systemu skonfigurował Google Chrome w taki sposób, by strona <ph name="TARGET_URL_HOSTNAME" /> otwierała się w alternatywnej przeglądarce.</translation> <translation id="3582972582564653026">Synchronizuj dane Chrome i korzystaj z własnych ustawień przeglądarki na wielu urządzeniach</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację}=1{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację. Okno incognito nie otworzy się ponownie.}few{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację. # okna incognito nie otworzą się ponownie.}many{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację. # okien incognito nie otworzy się ponownie.}other{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację. # okna incognito nie otworzy się ponownie.}}</translation> @@ -104,6 +105,7 @@ <translation id="4147555960264124640">Logujesz się na zarządzane konto i przekazujesz jego administratorowi kontrolę nad swoim profilem Google Chrome. Twoje dane Chrome, takie jak aplikacje, zakładki, historia, hasła i inne ustawienia, zostaną trwale powiązane z użytkownikiem <ph name="USER_NAME" />. Będzie można je usunąć w Panelu kont Google, ale nie będzie można ich powiązać z innym kontem. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Instalator nie może prawidłowo rozpakować archiwum. Pobierz Google Chrome ponownie.</translation> <translation id="4191857738314598978">{0,plural, =1{Ponowne uruchomienie Chrome nastąpi w ciągu 1 dnia}few{Ponowne uruchomienie Chrome nastąpi w ciągu # dni}many{Ponowne uruchomienie Chrome nastąpi w ciągu # dni}other{Ponowne uruchomienie Chrome nastąpi w ciągu # dnia}}</translation> +<translation id="4205939740494406371">Chrome nie może sprawdzić Twoich haseł. Spróbuj ponownie za 24 godziny lub <ph name="BEGIN_LINK" />sprawdź hasła na koncie Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Wylogować z Chrome?</translation> <translation id="4251615635259297716">Połączyć Twoje dane Chrome z tym kontem?</translation> <translation id="4293420128516039005">Zaloguj się, by synchronizować dane Chrome i korzystać z własnych ustawień przeglądarki na wielu urządzeniach</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb index 8732fdd..19615f5 100644 --- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -87,6 +87,7 @@ <translation id="34857402635545079">Limpar também dados do Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">O Chrome precisa acessar seu local para compartilhá-lo com este site</translation> <translation id="3533694711092285624">Nenhuma senha salva. O Chrome poderá verificar suas senhas quando elas forem salvas.</translation> +<translation id="3541482654983822893">Não foi possível verificar suas senhas. Tente novamente em 24 horas.</translation> <translation id="3576528680708590453">O administrador do seu sistema configurou o Google Chrome para abrir um navegador alternativo ao acessar <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Sincronize e personalize o Chrome em todos os seus dispositivos</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Seu administrador exige que você reinicie o Chrome para que uma atualização seja feita.}=1{Seu administrador exige que você reinicie o Chrome para que uma atualização seja feita. Sua janela anônima não será aberta novamente.}one{Seu administrador exige que você reinicie o Chrome para que uma atualização seja feita. Sua janela anônima não será aberta novamente.}other{Seu administrador exige que você reinicie o Chrome para que uma atualização seja feita. Suas # janelas anônimas não serão abertas novamente.}}</translation> @@ -104,6 +105,7 @@ <translation id="4147555960264124640">Você está fazendo login com uma conta gerenciada e concedendo ao administrador da conta o controle sobre seu perfil do Google Chrome. Seus dados do Google Chrome, como aplicativos, favoritos, histórico, senhas e outras configurações serão permanentemente vinculados a <ph name="USER_NAME" />. Você pode excluir esses dados pelo painel das Contas do Google, mas não pode associá-los a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Houve uma falha no instalador ao descompactar o arquivo. Baixe o Google Chrome novamente.</translation> <translation id="4191857738314598978">{0,plural, =1{Reiniciar o Chrome em 1 dia}one{Reiniciar o Chrome em # dia}other{Reiniciar o Chrome em # dias}}</translation> +<translation id="4205939740494406371">Não foi possível verificar suas senhas. Tente novamente em 24 horas ou <ph name="BEGIN_LINK" />verifique-as na sua Conta do Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Sair do Google Chrome?</translation> <translation id="4251615635259297716">Vincular seus dados do Google Chrome a esta conta?</translation> <translation id="4293420128516039005">Faça login para sincronizar e personalizar o Chrome em todos os seus dispositivos</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb index 92a3157..0260d4f 100644 --- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">Limpar também os dados do Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">O Chrome necessita de acesso à sua localização para a partilhar com este site.</translation> <translation id="3533694711092285624">Não existem palavras-passe guardadas. O Chrome consegue verificar as suas palavras-passe quando as guarda.</translation> +<translation id="3541482654983822893">O Chrome não consegue verificar as suas palavras-passe. Tente novamente após 24 horas.</translation> <translation id="3576528680708590453">O administrador do seu sistema configurou o Google Chrome para abrir um navegador alternativo, de modo a aceder a <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Sincronizar e personalizar o Chrome em todos os dispositivos</translation> <translation id="3596080736082218006">{COUNT,plural, =0{O seu administrador necessita que reinicie o Chrome para aplicar uma atualização.}=1{O seu administrador necessita que reinicie o Chrome para aplicar uma atualização. Não é possível reabrir a sua janela de navegação anónima.}other{O seu administrador necessita que reinicie o Chrome para aplicar uma atualização. Não é possível reabrir as suas # janelas de navegação anónima.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">Está a iniciar sessão com uma conta gerida e a permitir que o gestor controle o seu perfil do Google Chrome. Os seus dados do Chrome, como aplicações, marcadores, histórico, palavras-passe e outras definições, ficarão associados definitivamente a <ph name="USER_NAME" />. Poderá eliminar estes dados através do Painel de Controlo das Contas Google, mas não poderá associá-los a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Houve uma falha no programa de instalação ao descompactar o arquivo. Transfira de novo o Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Reinicie o Chrome dentro de um dia}other{Reinicie o Chrome dentro de # dias}}</translation> +<translation id="4205939740494406371">O Chrome não consegue verificar as suas palavras-passe. Tente novamente após 24 horas ou <ph name="BEGIN_LINK" />verifique as palavras-passe na sua Conta Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Pretende terminar sessão no Chrome?</translation> <translation id="4251615635259297716">Associar os seus dados do Chrome a esta conta?</translation> <translation id="4293420128516039005">Inicie sessão para sincronizar e personalizar o Chrome em todos os dispositivos.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb index fd31b90..e876c12 100644 --- a/chrome/app/resources/google_chrome_strings_ro.xtb +++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">Șterge și datele din Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome are nevoie de acces la locația ta ca să permită accesul la locație pentru acest site</translation> <translation id="3533694711092285624">Nu există parole salvate. Chrome îți poate verifica parolele dacă le salvezi.</translation> +<translation id="3541482654983822893">Chrome nu îți poate verifica parolele. Încearcă din nou după 24 de ore.</translation> <translation id="3576528680708590453">Administratorul sistemului a configurat Google Chrome astfel încât să deschidă un browser secundar pentru a accesa <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Sincronizează și personalizează Chrome pe toate dispozitivele</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Administratorul solicită să relansezi Chrome pentru a aplica o actualizare}=1{Administratorul solicită să relansezi Chrome pentru a aplica o actualizare. Fereastra incognito nu se va mai deschide.}few{Administratorul solicită să relansezi Chrome pentru a aplica o actualizare. Cele # ferestre incognito nu se vor mai deschide.}other{Administratorul solicită să relansezi Chrome pentru a aplica o actualizare. Cele # de ferestre incognito nu se vor mai deschide.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">Vă conectați cu un cont gestionat și îi permiteți administratorului acestuia controlul asupra profilului dvs. Google Chrome. Datele Chrome, cum ar fi aplicațiile, marcajele, istoricul, parolele și alte setări vor fi asociate definitiv cu <ph name="USER_NAME" />. Veți putea să ștergeți aceste date prin intermediul Tabloului de bord pentru Conturi Google, însă nu veți putea să asociați aceste date cu un alt cont. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Programul de instalare nu a putut decomprima arhiva. Descarcă din nou Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Relansează Chrome în cel mult o zi}few{Relansează Chrome în cel mult # zile}other{Relansează Chrome în cel mult # de zile}}</translation> +<translation id="4205939740494406371">Chrome nu îți poate verifica parolele. Încearcă din nou după 24 de ore sau <ph name="BEGIN_LINK" />verifică parolele din Contul Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Te deconectezi de la Chrome?</translation> <translation id="4251615635259297716">Vă conectați datele Chrome cu acest cont?</translation> <translation id="4293420128516039005">Conectează-te pentru a sincroniza și a personaliza Chrome pe toate dispozitivele</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb index e8e782c..0fe45e0 100644 --- a/chrome/app/resources/google_chrome_strings_ru.xtb +++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -87,6 +87,7 @@ <translation id="34857402635545079">Также удалить данные из Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Для этого сайта Chrome запрашивает доступ к данным о вашем местоположении.</translation> <translation id="3533694711092285624">Сохраненных паролей нет. Чтобы браузер Chrome мог проверять пароли, сохраните их.</translation> +<translation id="3541482654983822893">Не удается проверить пароли в Chrome. Повторите попытку через 24 часа.</translation> <translation id="3576528680708590453">Ваш системный администратор задал настройки, согласно которым Google Chrome должен запускать альтернативный браузер для доступа к сайту <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Синхронизируйте данные Chrome на всех устройствах</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Администратор требует перезапустить Chrome для установки обновления.}=1{Администратор требует перезапустить Chrome для установки обновления. Окно в режиме инкогнито не будет открыто повторно.}one{Администратор требует перезапустить Chrome для установки обновления. # окно в режиме инкогнито не будет открыто повторно.}few{Администратор требует перезапустить Chrome для установки обновления. # окна в режиме инкогнито не будут открыты повторно.}many{Администратор требует перезапустить Chrome для установки обновления. # окон в режиме инкогнито не будут открыты повторно.}other{Администратор требует перезапустить Chrome для установки обновления. # окна в режиме инкогнито не будут открыты повторно.}}</translation> @@ -104,6 +105,7 @@ <translation id="4147555960264124640">Выполнив вход в управляемый аккаунт, вы предоставляете администратору право контролировать настройки вашего профиля Google Chrome. Ваши данные Chrome (приложения, закладки, история, пароли и другие настройки) будут временно связаны с аккаунтом <ph name="USER_NAME" />. Эти данные можно удалить в Личном кабинете Google, но их нельзя связать с другим аккаунтом. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Не удалось извлечь файлы из архива. Скачайте Google Chrome заново.</translation> <translation id="4191857738314598978">{0,plural, =1{Перезапустите Chrome в течение дня}one{Перезапустите Chrome в течение # дня}few{Перезапустите Chrome в течение # дней}many{Перезапустите Chrome в течение # дней}other{Перезапустите Chrome в течение # дня}}</translation> +<translation id="4205939740494406371">Не удается проверить пароли в Chrome. Повторите попытку через 24 часа или <ph name="BEGIN_LINK" />проверьте пароли в аккаунте Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Выйти из Chrome?</translation> <translation id="4251615635259297716">Связать данные Chrome с этим аккаунтом?</translation> <translation id="4293420128516039005">Войдите, чтобы синхронизировать данные Chrome на всех устройствах</translation>
diff --git a/chrome/app/resources/google_chrome_strings_si.xtb b/chrome/app/resources/google_chrome_strings_si.xtb index 8f3c0c0..7c72370a 100644 --- a/chrome/app/resources/google_chrome_strings_si.xtb +++ b/chrome/app/resources/google_chrome_strings_si.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Chrome වෙතින් ද දත්ත හිස් කරන්න (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome හට මෙම අඩවිය සමඟ ඔබේ ස්ථානය බෙදා ගැනීමට ඔබේ ස්ථානයට ප්රවේශය අවශ්යයි</translation> <translation id="3533694711092285624">සුරැකි මුරපද නැත. ඔබ ඔබේ මුරපද පරීක්ෂා කරන විට Chrome හට ඒවා පරීක්ෂා කළ හැක.</translation> +<translation id="3541482654983822893">Chrome හට ඔබේ මුරපද පරීක්ෂා කළ නොහැක. පැය 24-කට පසුව නැවත උත්සාහ කරන්න.</translation> <translation id="3576528680708590453">ඔබේ පද්ධති පරිපාලකයා <ph name="TARGET_URL_HOSTNAME" /> වෙත ප්රවේශ වීමට වෛකල්පික බ්රවුසරයක් විවෘත කිරීමට Google Chrome වින්යාස කර ඇත.</translation> <translation id="3582972582564653026">ඔබගේ උපාංග හරහා Chrome සමමුහුර්ත කර පෞද්ගලීකරණය කරන්න</translation> <translation id="3596080736082218006">{COUNT,plural, =0{යාවත්කාලීනයක් යෙදීමට ඔබ Chrome නැවත ආරම්භ කිරීම පරිපාලකයාට අවශ්ය වේ}=1{යාවත්කාලීනයක් යෙදීමට ඔබ Chrome නැවත ආරම්භ කිරීම පරිපාලකයාට අවශ්ය වේ. ඔබේ අප්රසිද්ධ කවුළුව යළි විවෘත නොවෙයි.}one{යාවත්කාලීනයක් යෙදීමට ඔබ Chrome නැවත ආරම්භ කිරීම පරිපාලකයාට අවශ්ය වේ. ඔබේ අප්රසිද්ධ කවුළු # යළි විවෘත නොවෙයි.}other{යාවත්කාලීනයක් යෙදීමට ඔබ Chrome නැවත ආරම්භ කිරීම පරිපාලකයාට අවශ්ය වේ. ඔබේ අප්රසිද්ධ කවුළු # යළි විවෘත නොවෙයි.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">ඔබ කළමනාකරණය කරන ගිණුමකින් සයින් ඉන් වී එහි පරිපාලකට Google Chrome පැතිකඩේ පාලනය ලබා දෙයි. ඔබේ යෙදුම්, පිටු සලකුණු, රහස් වචන ආදී දත්ත සහ Chrome වෙනත් පසුතල ස්ථිරවම <ph name="USER_NAME" />ට සම්බන්ධ කෙරෙනු ඇත. ඔබට මෙම දත්ත Google Accounts ඩෑෂ්බෝඩ් එකෙන් මැකිය හැකි මුත් වෙනත් ගිණුමක් හා සම්බන්ධ කළ නොහැකි වනු ඇත.<ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">ස්ථාපකයට සංරක්ෂකය විහිදුවිය නොහැකි විය. කරුණාකර නැවත Google Chrome බාගන්න.</translation> <translation id="4191857738314598978">{0,plural, =1{දිනයක් ඇතුළත Chrome යළි දියත් කරන්න}one{දින # ක් ඇතුළත Chrome යළි දියත් කරන්න}other{දින # ක් ඇතුළත Chrome යළි දියත් කරන්න}}</translation> +<translation id="4205939740494406371">Chrome හට ඔබේ මුරපද පරීක්ෂා කළ නොහැක. පැය 24-කට පසු නැවත උත්සාහ කරන්න, නැති නම් <ph name="BEGIN_LINK" />ඔබේ Google ගිණුම තුළ මුරපද පරීක්ෂා කරන්න<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome වෙතින් වරන්න</translation> <translation id="4251615635259297716">මෙම ගිණුමට Chrome දත්ත සම්බන්ධ කරන්නද?</translation> <translation id="4293420128516039005">ඔබගේ උපාංග හරහා Chrome සමමුහුර්ත කර පෞද්ගලීකරණය කිරීමට පුරනය වන්න</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb index 0b64799..dc23b93 100644 --- a/chrome/app/resources/google_chrome_strings_sl.xtb +++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Počisti tudi podatke iz Chroma (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome potrebuje dostop do vaše lokacije, da jo bo lahko delil s tem spletnim mestom</translation> <translation id="3533694711092285624">Ni shranjenih gesel. Chrome lahko preveri gesla, če jih shranite.</translation> +<translation id="3541482654983822893">Chrome ne more preveriti vaših gesel. Poskusite znova čez 24 ur.</translation> <translation id="3576528680708590453">Skrbnik sistema je Google Chrome nastavil tako, da za dostop do <ph name="TARGET_URL_HOSTNAME" /> odpre drug brskalnik.</translation> <translation id="3582972582564653026">V vseh svojih napravah sinhronizirajte in prilagodite Chrome</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome.}=1{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. Okno brez beleženja zgodovine se ne bo znova odprlo.}one{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. # okno brez beleženja zgodovine se ne bo znova odprlo.}two{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. # okni brez beleženja zgodovine se ne bosta znova odprli.}few{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. # okna brez beleženja zgodovine se ne bodo znova odprla.}other{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. # oken brez beleženja zgodovine se ne bo znova odprlo.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">Prijavljate se z upravljanim računom in s tem njegovemu skrbniku omogočate nadzor vašega profila v Google Chromu. Vaši podatki v Chromu, kot so aplikacije, zaznamki, zgodovina, gesla in druge nastavitve, bodo postali trajno povezani z uporabnikom <ph name="USER_NAME" />. Te podatke boste lahko izbrisali z nadzorno ploščo za Google Račune, vendar jih ne boste mogli povezati z drugim računom. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Namestitvenemu programu ni uspelo razširiti arhiva. Ponovno prenesite program Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Chrome znova zaženite v enem dnevu}one{Chrome znova zaženite v # dnevu}two{Chrome znova zaženite v # dnevih}few{Chrome znova zaženite v # dnevih}other{Chrome znova zaženite v # dnevih}}</translation> +<translation id="4205939740494406371">Chrome ne more preveriti vaših gesel. Poskusite znova čez 24 ur ali <ph name="BEGIN_LINK" />preverite gesla v računu Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Se želite odjaviti iz Chroma?</translation> <translation id="4251615635259297716">Želite svoje podatke v Chromu povezati s tem računom?</translation> <translation id="4293420128516039005">Prijavite se, da boste lahko Chrome sinhronizirali in prilagodili v vseh svojih napravah</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb index 5d2fe29..9922496 100644 --- a/chrome/app/resources/google_chrome_strings_sv.xtb +++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -92,6 +92,7 @@ <translation id="34857402635545079">Rensa även data från Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Du behöver ge Chrome åtkomst till din plats om den ska kunna delas med webbplatsen</translation> <translation id="3533694711092285624">Det finns inga sparade lösenord. Chrome kan bara kontrollera dina lösenord om du sparar dem.</translation> +<translation id="3541482654983822893">Chrome kan inte kontrollera dina lösenord. Försök igen om ett dygn.</translation> <translation id="3576528680708590453">Systemadministratören har konfigurerat Google Chrome så att <ph name="TARGET_URL_HOSTNAME" /> öppnas i en annan webbläsare.</translation> <translation id="3582972582564653026">Synkronisera och anpassa Chrome på alla enheter du använder</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Administratören meddelar att du måste starta om Chrome så att en uppdatering tillämpas}=1{Administratören meddelar att du måste starta om Chrome så att en uppdatering tillämpas. Inkognitofönstret öppnas inte igen.}other{Administratören meddelar att du måste starta om Chrome så att en uppdatering tillämpas. De # inkognitofönstren öppnas inte igen.}}</translation> @@ -109,6 +110,7 @@ <translation id="4147555960264124640">Du loggar in med ett hanterat konto och ger dess administratör kontroll över din Google Chrome-profil. Dina Chrome-uppgifter, t.ex. dina appar, bokmärken, din historik, dina lösenord och andra inställningar, knyts permanent till <ph name="USER_NAME" />. Du kommer att kunna ta bort dessa uppgifter via instrumentpanelen i Google Konton, men du kommer inte att kunna koppla dessa uppgifter till ett annat konto. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Det gick inte att packa upp arkivet med installationsfilen. Ladda ned Google Chrome igen.</translation> <translation id="4191857738314598978">{0,plural, =1{Starta om Chrome inom en dag}other{Starta om Chrome inom # dagar}}</translation> +<translation id="4205939740494406371">Chrome kan inte kontrollera dina lösenord. Försök igen om 24 timmar eller <ph name="BEGIN_LINK" />kontrollera lösenorden i ditt Google-konto<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Vill du logga ut från Chrome?</translation> <translation id="4251615635259297716">Koppla dina uppgifter i Chrome till det här kontot</translation> <translation id="4293420128516039005">Genom att logga in kan du synkronisera och anpassa Chrome på alla enheter du använder</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb index 8db0b39..c2e59205 100644 --- a/chrome/app/resources/google_chrome_strings_sw.xtb +++ b/chrome/app/resources/google_chrome_strings_sw.xtb
@@ -91,6 +91,7 @@ <translation id="34857402635545079">Futa pia data kutoka Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome inahitaji kufikia maelezo ya mahali ulipo ili kuyashiriki na tovuti hii</translation> <translation id="3533694711092285624">Hakuna manenosiri yaliyohifadhiwa. Chrome inaweza kukagua manenosiri yako unapoyahifadhi.</translation> +<translation id="3541482654983822893">Chrome imeshindwa kukagua manenosiri yako. Jaribu tena baada ya saa 24.</translation> <translation id="3576528680708590453">Msimamizi wa mfumo unaotumia ameweka mipangilio ya Google Chrome ifungue kivinjari mbadala ili kufikia <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="3582972582564653026">Sawazisha na uweke mapendeleo kwenye Chrome katika vifaa vyako vyote</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Msimamizi wako anataka ufungue Chrome tena ili utumie sasisho}=1{Msimamizi wako anataka ufungue Chrome tena ili utumie sasisho. Haitafungua upya dirisha fiche.}other{Msimamizi wako anataka ufungue Chrome tena ili utumie sasisho. Haitafungua upya madirisha # fiche.}}</translation> @@ -108,6 +109,7 @@ <translation id="4147555960264124640">Unaingia katika akaunti ukitumia akaunti inayodhibitiwa na kumpa msimamizi wa akaunti hiyo udhibiti wa wasifu wako kwenye Google Chrome. Data yako ya Chrome, kama vile programu zako, alamisho, historia, manenosiri, na mipangilio mingine itahusishwa na <ph name="USER_NAME" /> daima . Utaweza kufuta data hii kupitia Dashibodi ya Akaunti za Google, lakini hutaweza kuhusisha data hii na akaunti nyingine. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Kisanidi kimeshindwa kufungua saraka. Tafadhali pakua Google Chrome tena.</translation> <translation id="4191857738314598978">{0,plural, =1{Fungua Chrome upya ndani ya siku moja}other{Fungua Chrome upya ndani ya siku #}}</translation> +<translation id="4205939740494406371">Chrome imeshindwa kukagua manenosiri yako. Jaribu tena baada ya saa 24 au <ph name="BEGIN_LINK" />kagua manenosiri katika Akaunti yako ya Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Ungependa kuondoka kwenye Chrome?</translation> <translation id="4251615635259297716">Ungependa kuunganisha data yako ya Chrome kwenye akaunti hii?</translation> <translation id="4293420128516039005">Ingia katika akaunti ili usawazishe na uweke mapendeleo kwenye Chrome katika vifaa vyako vyote</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb index f880d9a..71419c32 100644 --- a/chrome/app/resources/google_chrome_strings_th.xtb +++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -87,6 +87,7 @@ <translation id="34857402635545079">ล้างข้อมูลจาก Chrome (<ph name="URL" />) ด้วย</translation> <translation id="3503306920980160878">Chrome ต้องการสิทธิ์เข้าถึงตำแหน่งของคุณเพื่อแชร์ตำแหน่งกับเว็บไซต์นี้</translation> <translation id="3533694711092285624">ไม่มีรหัสผ่านที่บันทึกไว้ Chrome จะตรวจสอบรหัสผ่านได้เมื่อคุณบันทึกรหัสผ่านไว้</translation> +<translation id="3541482654983822893">Chrome ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดรอ 24 ชั่วโมงแล้วลองอีกครั้ง</translation> <translation id="3576528680708590453">ผู้ดูแลระบบของคุณกำหนดค่าให้ Google Chrome เปิดเบราว์เซอร์สำรองเพื่อเข้าถึง <ph name="TARGET_URL_HOSTNAME" /></translation> <translation id="3582972582564653026">ซิงค์และปรับเปลี่ยน Chrome ในอุปกรณ์ต่างๆ</translation> <translation id="3596080736082218006">{COUNT,plural, =0{ผู้ดูแลระบบต้องการให้คุณเปิด Chrome ขึ้นมาใหม่เพื่อใช้การอัปเดต}=1{ผู้ดูแลระบบต้องการให้คุณเปิด Chrome ขึ้นมาใหม่เพื่อใช้การอัปเดต หน้าต่างที่ไม่ระบุตัวตนจะไม่เปิดให้อีก}other{ผู้ดูแลระบบต้องการให้คุณเปิด Chrome ขึ้นมาใหม่เพื่อใช้การอัปเดต หน้าต่างที่ไม่ระบุตัวตนจำนวน # หน้าต่างจะไม่เปิดให้อีก}}</translation> @@ -104,6 +105,7 @@ <translation id="4147555960264124640">คุณกำลังลงชื่อเข้าใช้ด้วยบัญชีที่จัดการ และให้การควบคุมระดับผู้ดูแลระบบของบัญชีดังกล่าวเหนือโปรไฟล์ Google Chrome ของคุณ ข้อมูล Chrome เช่น แอป บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จะเชื่อมโยงอย่างถาวรกับ <ph name="USER_NAME" /> คุณจะสามารถลบข้อมูลนี้ผ่านทางแผงควบคุมบัญชี Google แต่คุณจะไม่สามารถเชื่อมโยงข้อมูลนี้กับบัญชีอื่น <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">โปรแกรมติดตั้งยกเลิกการบีบอัดการเก็บข้อมูลไม่ได้ โปรดดาวน์โหลด Google Chrome อีกครั้ง</translation> <translation id="4191857738314598978">{0,plural, =1{เปิด Chrome ขึ้นมาใหม่ภายใน 1 วัน}other{เปิด Chrome ขึ้นมาใหม่ภายใน # วัน}}</translation> +<translation id="4205939740494406371">Chrome ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดรอ 24 ชั่วโมงแล้วลองอีกครั้งหรือ<ph name="BEGIN_LINK" />ตรวจสอบรหัสผ่านในบัญชี Google<ph name="END_LINK" /></translation> <translation id="424864128008805179">ต้องการออกจากระบบ Chrome ไหม</translation> <translation id="4251615635259297716">เชื่อมโยงข้อมูล Chrome กับบัญชีนี้ไหม</translation> <translation id="4293420128516039005">ลงชื่อเข้าใช้เพื่อซิงค์และปรับเปลี่ยน Chrome ในอุปกรณ์ต่างๆ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb index a8b92394..42c9f62 100644 --- a/chrome/app/resources/google_chrome_strings_tr.xtb +++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">Chrome'daki verileri de temizle (<ph name="URL" />)</translation> <translation id="3503306920980160878">Konumunuzu bu siteyle paylaşabilmek için Chrome'un konum bilgilerinize erişmesi gerekiyor</translation> <translation id="3533694711092285624">Kaydedilen şifre yok. Kaydetmeniz halinde Chrome, şifrelerinizi kontrol edebilir.</translation> +<translation id="3541482654983822893">Chrome, şifrelerinizi kontrol edemiyor. 24 saat sonra tekrar deneyin.</translation> <translation id="3576528680708590453">Sistem yöneticiniz Google Chrome'u <ph name="TARGET_URL_HOSTNAME" /> adresine erişmek için alternatif bir tarayıcıyı açacak şekilde yapılandırmış.</translation> <translation id="3582972582564653026">Chrome'u cihazlarınız arasında senkronize edin ve kişiselleştirin</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Yöneticiniz bir güncellemeyi uygulamak için Chrome'u yeniden başlatmanızı gerektiriyor}=1{Yöneticiniz bir güncellemeyi uygulamak için Chrome'u yeniden başlatmanızı gerektiriyor. Gizli pencereniz yeniden açılmayacak.}other{Yöneticiniz bir güncellemeyi uygulamak için Chrome'u yeniden başlatmanızı gerektiriyor. # Gizli pencereniz yeniden açılmayacak.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">Yönetilen bir hesapla oturum açıyor ve hesabın yöneticisine Google Chrome profilinizi denetleme izni veriyorsunuz. Uygulamalarınız, yer işaretleriniz, geçmişiniz, şifreleriniz ve diğer ayarlarınız gibi Chrome verileriniz kalıcı olarak <ph name="USER_NAME" /> ile bağlantılandırılacaktır. Google Hesapları Hesap Özeti'ni kullanarak bu verileri silebilecek, ancak bu verileri başka bir hesapla ilişkilendiremeyeceksiniz.<ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Yükleyici arşivi açamadı. Lütfen Google Chrome'u yeniden indirin.</translation> <translation id="4191857738314598978">{0,plural, =1{Chrome'u bir gün içinde yeniden başlatın}other{Chrome'u # gün içinde yeniden başlatın}}</translation> +<translation id="4205939740494406371">Chrome, şifrelerinizi kontrol edemiyor. 24 saat sonra tekrar deneyin veya <ph name="BEGIN_LINK" />şifreleri Google Hesabınızda kontrol edin<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome oturumu kapatılsın mı?</translation> <translation id="4251615635259297716">Chrome verileriniz bu hesaba bağlansın mı?</translation> <translation id="4293420128516039005">Chrome'u cihazlarınız arasında senkronize etmek ve kişiselleştirmek için oturum açın</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb index 0133084..f61bb9e 100644 --- a/chrome/app/resources/google_chrome_strings_uk.xtb +++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">Також очистити дані Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome потрібен доступ до геоданих, щоб повідомляти цьому сайту ваше місцезнаходження</translation> <translation id="3533694711092285624">Немає збережених паролів. Chrome зможе перевірити ваші паролі, коли ви їх збережете.</translation> +<translation id="3541482654983822893">Chrome не може перевірити паролі. Повторіть спробу через 24 години.</translation> <translation id="3576528680708590453">Ваш системний адміністратор налаштував Chrome відкривати сторінку <ph name="TARGET_URL_HOSTNAME" /> в альтернативному веб-переглядачі.</translation> <translation id="3582972582564653026">Синхронізуйте та персоналізуйте роботу Chrome на всіх своїх пристроях</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення}=1{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. Вікно в режимі анонімного перегляду не відновиться й не відкриється знову.}one{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. # вікно в режимі анонімного перегляду не відновиться й не відкриється знову.}few{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. # вікна в режимі анонімного перегляду не відновляться й не відкриються знову.}many{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. # вікон в режимі анонімного перегляду не відновляться й не відкриються знову.}other{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. # вікна в режимі анонімного перегляду не відновиться й не відкриється знову.}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">Ви входите, використовуючи дані облікового запису, яким керує адміністратор. Адміністратор може контролювати ваш профіль Google Chrome. Ваші дані Chrome, як-от програми, закладки, історія, паролі й інші налаштування, буде назавжди пов’язано з обліковим записом <ph name="USER_NAME" />. Ці дані можна видалити на інформаційній панелі Облікових записів Google, але ви не зможете пов’язати їх з іншим обліковим записом. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Не вдалося відкрити архів за допомогою програми встановлення. Завантажте Google Chrome ще раз.</translation> <translation id="4191857738314598978">{0,plural, =1{Перезапустіть Chrome упродовж дня}one{Перезапустіть Chrome упродовж # дня}few{Перезапустіть Chrome упродовж # днів}many{Перезапустіть Chrome упродовж # днів}other{Перезапустіть Chrome упродовж # дня}}</translation> +<translation id="4205939740494406371">Chrome не може перевірити паролі. Повторіть спробу через 24 години або <ph name="BEGIN_LINK" />перевірте паролі в обліковому записі Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Вийти з Chrome?</translation> <translation id="4251615635259297716">Пов’язати ваші дані Chrome із цим обліковим записом?</translation> <translation id="4293420128516039005">Увійдіть, щоб синхронізувати та персоналізувати роботу Chrome на всіх своїх пристроях</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uz.xtb b/chrome/app/resources/google_chrome_strings_uz.xtb index 2724667..bca37ed 100644 --- a/chrome/app/resources/google_chrome_strings_uz.xtb +++ b/chrome/app/resources/google_chrome_strings_uz.xtb
@@ -89,6 +89,7 @@ <translation id="34857402635545079">Chrome maʼlumotlari ham tozalansin (<ph name="URL" />)</translation> <translation id="3503306920980160878">Bu sayt manzilingizdan foydalanishi uchun Chrome brauzeriga ruxsat berishingiz lozim</translation> <translation id="3533694711092285624">Hech qanday parol saqlanmagan. Chrome faqat saqlangan parollaringizni tekshira oladi.</translation> +<translation id="3541482654983822893">Chrome parollaringizni tekshira olmadi. 24 soatdan keyin qayta urining.</translation> <translation id="3576528680708590453">Chrome <ph name="TARGET_URL_HOSTNAME" /> havolasini muqobil brauzerda ochishi tizim administratori tomonidan sozlangan.</translation> <translation id="3582972582564653026">Chrome brauzerini barcha qurilmalringizda sinxronlang va o‘zingizga moslab oling</translation> <translation id="3596080736082218006">{COUNT,plural, =0{Administrator yangilishlarni oʻrnatish uchun Chrome brauzerini qayta ishga tushirishni talab qilmoqda}=1{Administrator yangilishlarni oʻrnatish uchun Chrome brauzerini qayta ishga tushirishni talab qilmoqda Inkognito oynalar qayta ochilmaydi.}other{Administrator yangilishlarni oʻrnatish uchun Chrome brauzerini qayta ishga tushirishni talab qilmoqda # ta inkognito oyna qayta ochilmaydi.}}</translation> @@ -106,6 +107,7 @@ <translation id="4147555960264124640">Siz boshqaruvdagi hisobga kiryapsiz va uning administratoriga Google Chrome profilingizni boshqarishga ruxsat beryapsiz. Ilovalar, xatcho‘plar, brauzer tarixi, parollar va boshqa sozlamalar kabi barcha Chrome ma’lumotlaringiz <ph name="USER_NAME" /> hisobiga biriktiriladi. Siz bu ma’lumotlarni Google hisoblar shaxsiy kabinetidan o‘chirishingiz mumkin, lekin bu ma’lumotlarni boshqa hisob bilan bog‘lay olmaysiz. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Fayllarni arxivdan chiqarib bo‘lmadi. Google Chrome‘ni qayta yuklab oling.</translation> <translation id="4191857738314598978">{0,plural, =1{Chrome brauzerini 1 kun ichida qayta ishga tushiring}other{Chrome brauzerini # kun ichida qayta ishga tushiring}}</translation> +<translation id="4205939740494406371">Chrome parollaringizni tekshira olmadi. 24 soatdan keyin qayta urining yoki <ph name="BEGIN_LINK" />Google hisobingizdagi parollarni tekshiring<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome hisobidan chiqmoqchimisiz?</translation> <translation id="4251615635259297716">Chrome ma’lumotlari bu hisobga bog‘lansinmi?</translation> <translation id="4293420128516039005">Chrome brauzerini barcha qurilmalringizda sinxronlash va o‘zingizga moslab olish uchun hisobingizga kiring</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-HK.xtb b/chrome/app/resources/google_chrome_strings_zh-HK.xtb index 733e260..79be387 100644 --- a/chrome/app/resources/google_chrome_strings_zh-HK.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-HK.xtb
@@ -91,6 +91,7 @@ <translation id="34857402635545079">一併清除 Chrome 的資料 (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome 需要位置資訊存取權,才能與這個網站分享您的位置資訊</translation> <translation id="3533694711092285624">沒有已儲存的密碼。儲存密碼時,Chrome 可檢查您的密碼。</translation> +<translation id="3541482654983822893">Chrome 無法檢查密碼,請於 24 小時後再試一次。</translation> <translation id="3576528680708590453">系統管理員已設定 Google Chrome 開啟替代瀏覽器來存取 <ph name="TARGET_URL_HOSTNAME" />。</translation> <translation id="3582972582564653026">在不同裝置上同步和設定個人化的 Chrome</translation> <translation id="3596080736082218006">{COUNT,plural, =0{管理員要求您重新啟動 Chrome,以套用更新}=1{管理員要求您重新啟動 Chrome,以套用更新。您的無痕式視窗不會重新開啟。}other{管理員要求您重新啟動 Chrome,以套用更新。您的 # 個無痕式視窗不會重新開啟。}}</translation> @@ -108,6 +109,7 @@ <translation id="4147555960264124640">您已登入受管理的帳戶,並將管理控制權授予您的 Chrome 設定檔。您的 Chrome 數據 (例如應用程式、書籤、記錄、密碼和其他設定) 均將永久與 <ph name="USER_NAME" /> 建立關聯。您可以透過 Google 帳戶資訊主頁刪除這些數據,但您無法將這些數據與其他帳戶建立關聯。<ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">安裝程式無法解壓縮封存檔案,請再次下載 Google Chrome。</translation> <translation id="4191857738314598978">{0,plural, =1{請在 1 天內重新啟動 Chrome}other{請在 # 天內重新啟動 Chrome}}</translation> +<translation id="4205939740494406371">Chrome 無法檢查密碼,請於 24 小時後再試一次,或<ph name="BEGIN_LINK" />檢查 Google 帳戶中的密碼<ph name="END_LINK" />。</translation> <translation id="424864128008805179">要登出 Chrome 嗎?</translation> <translation id="4251615635259297716">要將您的 Chrome 數據連結至這個帳戶嗎?</translation> <translation id="4293420128516039005">登入即可在不同裝置上同步和設定個人化的 Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-TW.xtb b/chrome/app/resources/google_chrome_strings_zh-TW.xtb index 19b9f2c9..ffbc6cf 100644 --- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -88,6 +88,7 @@ <translation id="34857402635545079">一併清除 Chrome 中的資料 (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome 需要位置資訊存取權,才能與這個網站分享你的位置資訊</translation> <translation id="3533694711092285624">未儲存任何密碼。你必須先儲存密碼,才能使用 Chrome 的密碼檢查功能。</translation> +<translation id="3541482654983822893">Chrome 無法檢查你的密碼,請於 24 小時後再試。</translation> <translation id="3576528680708590453">系統管理員已設定 Google Chrome 開啟替代瀏覽器來存取 <ph name="TARGET_URL_HOSTNAME" />。</translation> <translation id="3582972582564653026">進行同步處理即可在你的所有裝置上享有個人化的 Chrome 體驗</translation> <translation id="3596080736082218006">{COUNT,plural, =0{系統管理員要求你重新啟動 Chrome,以套用更新}=1{系統管理員要求你重新啟動 Chrome,以套用更新。你的無痕式視窗不會重新開啟。}other{系統管理員要求你重新啟動 Chrome,以套用更新。你的 # 個無痕式視窗不會重新開啟。}}</translation> @@ -105,6 +106,7 @@ <translation id="4147555960264124640">你已登入管理化環境下的帳戶,並將管理控制權授予你的 Chrome 設定檔。你的 Chrome 資料 (例如應用程式、書籤、記錄、密碼和其他設定) 均將永久與 <ph name="USER_NAME" /> 建立關聯。你可以透過 Google 帳戶資訊主頁刪除這些資料,但你無法將這些資料與其他帳戶建立關聯。<ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">安裝程式無法解壓縮封存檔案,請再次下載 Google Chrome。</translation> <translation id="4191857738314598978">{0,plural, =1{請在 1 天內重新啟動 Chrome}other{請在 # 天內重新啟動 Chrome}}</translation> +<translation id="4205939740494406371">Chrome 無法檢查你的密碼,請於 24 小時後再試,或<ph name="BEGIN_LINK" />檢查 Google 帳戶中的密碼<ph name="END_LINK" />。</translation> <translation id="424864128008805179">要登出 Chrome 嗎?</translation> <translation id="4251615635259297716">要將你的 Chrome 資料連結至這個帳戶嗎?</translation> <translation id="4293420128516039005">登入即可進行同步處理,讓你在所有裝置上享有個人化的 Chrome 體驗</translation>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 9421e3e..cfd613a 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -5316,6 +5316,14 @@ return true; } + // enable-unsafe-webgpu is only available on Dev/Canary channels. + if (!strcmp("enable-unsafe-webgpu", entry.internal_name) && + channel != version_info::Channel::DEV && + channel != version_info::Channel::CANARY && + channel != version_info::Channel::UNKNOWN) { + return true; + } + #if defined(OS_WIN) // HDR mode works, but displays everything horribly wrong prior to windows 10. if (!strcmp("enable-hdr", entry.internal_name) &&
diff --git a/chrome/browser/android/feed/v2/feed_stream_surface.cc b/chrome/browser/android/feed/v2/feed_stream_surface.cc index 85830f5..2dd033e 100644 --- a/chrome/browser/android/feed/v2/feed_stream_surface.cc +++ b/chrome/browser/android/feed/v2/feed_stream_surface.cc
@@ -40,8 +40,6 @@ feed_stream_api_ = FeedServiceFactory::GetForBrowserContext(profile)->GetStream(); - if (feed_stream_api_) - feed_stream_api_->AttachSurface(this); } FeedStreamSurface::~FeedStreamSurface() { @@ -86,10 +84,20 @@ int change_id) {} void FeedStreamSurface::SurfaceOpened(JNIEnv* env, - const JavaParamRef<jobject>& obj) {} + const JavaParamRef<jobject>& obj) { + if (feed_stream_api_ && !attached_) { + attached_ = true; + feed_stream_api_->AttachSurface(this); + } +} void FeedStreamSurface::SurfaceClosed(JNIEnv* env, - const JavaParamRef<jobject>& obj) {} + const JavaParamRef<jobject>& obj) { + if (feed_stream_api_ && attached_) { + attached_ = false; + feed_stream_api_->DetachSurface(this); + } +} void FeedStreamSurface::ReportOpenAction(JNIEnv* env, const JavaParamRef<jobject>& obj) {
diff --git a/chrome/browser/android/feed/v2/feed_stream_surface.h b/chrome/browser/android/feed/v2/feed_stream_surface.h index d6a2894..f8b2e3a6 100644 --- a/chrome/browser/android/feed/v2/feed_stream_surface.h +++ b/chrome/browser/android/feed/v2/feed_stream_surface.h
@@ -98,6 +98,7 @@ private: base::android::ScopedJavaGlobalRef<jobject> java_ref_; FeedStreamApi* feed_stream_api_; + bool attached_ = false; }; } // namespace feed
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index a7b9128d..af7354eb 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -4001,14 +4001,12 @@ void ChromeContentBrowserClient::GetHardwareSecureDecryptionCaps( const std::string& key_system, - const base::flat_set<media::CdmProxy::Protocol>& cdm_proxy_protocols, base::flat_set<media::VideoCodec>* video_codecs, base::flat_set<media::EncryptionScheme>* encryption_schemes) { #if defined(OS_WIN) && BUILDFLAG(ENABLE_LIBRARY_CDMS) && \ BUILDFLAG(ENABLE_WIDEVINE) if (key_system == kWidevineKeySystem) { - GetWidevineHardwareCaps(cdm_proxy_protocols, video_codecs, - encryption_schemes); + GetWidevineHardwareCaps(video_codecs, encryption_schemes); } #endif }
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h index e163f2f..c64ff2731 100644 --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h
@@ -427,7 +427,6 @@ content::NavigationHandle* navigation_handle) override; void GetHardwareSecureDecryptionCaps( const std::string& key_system, - const base::flat_set<media::CdmProxy::Protocol>& cdm_proxy_protocols, base::flat_set<media::VideoCodec>* video_codecs, base::flat_set<media::EncryptionScheme>* encryption_schemes) override; ::rappor::RapporService* GetRapporService() override;
diff --git a/chrome/browser/chromeos/input_method/assistive_suggester.cc b/chrome/browser/chromeos/input_method/assistive_suggester.cc index 278c5c5..e8ebd536 100644 --- a/chrome/browser/chromeos/input_method/assistive_suggester.cc +++ b/chrome/browser/chromeos/input_method/assistive_suggester.cc
@@ -77,6 +77,8 @@ case SuggestionStatus::kDismiss: current_suggester_ = nullptr; return false; + case SuggestionStatus::kBrowsing: + return true; default: break; }
diff --git a/chrome/browser/chromeos/input_method/candidate_window_controller_impl.cc b/chrome/browser/chromeos/input_method/candidate_window_controller_impl.cc index 43171dc..19b566a51 100644 --- a/chrome/browser/chromeos/input_method/candidate_window_controller_impl.cc +++ b/chrome/browser/chromeos/input_method/candidate_window_controller_impl.cc
@@ -47,8 +47,7 @@ active_window ? active_window->GetRootWindow() : ash::Shell::GetRootWindowForNewWindows(), ash::kShellWindowId_VirtualKeyboardContainer); - candidate_window_view_ = new ui::ime::CandidateWindowView( - parent, ash::kShellWindowId_VirtualKeyboardContainer); + candidate_window_view_ = new ui::ime::CandidateWindowView(parent); candidate_window_view_->AddObserver(this); candidate_window_view_->SetCursorBounds(cursor_bounds_, composition_head_); views::Widget* widget = candidate_window_view_->InitWidget();
diff --git a/chrome/browser/chromeos/input_method/suggestion_window_controller_impl.cc b/chrome/browser/chromeos/input_method/suggestion_window_controller_impl.cc index 8a02fe3..d952ea56 100644 --- a/chrome/browser/chromeos/input_method/suggestion_window_controller_impl.cc +++ b/chrome/browser/chromeos/input_method/suggestion_window_controller_impl.cc
@@ -42,8 +42,7 @@ : ash::Shell::GetRootWindowForNewWindows(), ash::kShellWindowId_VirtualKeyboardContainer); // suggestion_window_view_ is deleted by DialogDelegateView::DeleteDelegate. - suggestion_window_view_ = new ui::ime::SuggestionWindowView( - parent, ash::kShellWindowId_VirtualKeyboardContainer); + suggestion_window_view_ = new ui::ime::SuggestionWindowView(parent); views::Widget* widget = suggestion_window_view_->InitWidget(); widget->AddObserver(this); widget->Show();
diff --git a/chrome/browser/component_updater/DEPS b/chrome/browser/component_updater/DEPS index d9b9ff5..53dedba 100644 --- a/chrome/browser/component_updater/DEPS +++ b/chrome/browser/component_updater/DEPS
@@ -1,7 +1,6 @@ include_rules = [ "+chrome/elevation_service", "+components/soda", - "+media/cdm/cdm_proxy.h", "+media/cdm/supported_cdm_versions.h", "+ppapi/thunk", "+third_party/widevine"
diff --git a/chrome/browser/dom_distiller/tab_utils.cc b/chrome/browser/dom_distiller/tab_utils.cc index 46d0787f..2ce0b1d 100644 --- a/chrome/browser/dom_distiller/tab_utils.cc +++ b/chrome/browser/dom_distiller/tab_utils.cc
@@ -10,6 +10,7 @@ #include "base/single_thread_task_runner.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" +#include "build/build_config.h" #include "chrome/browser/dom_distiller/dom_distiller_service_factory.h" #include "chrome/browser/ui/tab_contents/core_tab_helper.h" #include "components/dom_distiller/content/browser/distiller_page_web_contents.h" @@ -177,7 +178,9 @@ MaybeStartDistillation(std::move(source_page_handle)); +#if !defined(OS_ANDROID) dom_distiller::UMAHelper::LogTimeOnDistillablePage(old_web_contents); +#endif } void DistillCurrentPage(content::WebContents* source_web_contents) {
diff --git a/chrome/browser/extensions/activity_log/activity_log.cc b/chrome/browser/extensions/activity_log/activity_log.cc index b4696bd1..392a1d0 100644 --- a/chrome/browser/extensions/activity_log/activity_log.cc +++ b/chrome/browser/extensions/activity_log/activity_log.cc
@@ -615,7 +615,7 @@ // static void ActivityLog::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { - registry->RegisterIntegerPref(prefs::kWatchdogExtensionActive, false); + registry->RegisterIntegerPref(prefs::kWatchdogExtensionActive, 0); } // LOG ACTIONS. ----------------------------------------------------------------
diff --git a/chrome/browser/extensions/api/commands/command_service.cc b/chrome/browser/extensions/api/commands/command_service.cc index be29128..ccae903 100644 --- a/chrome/browser/extensions/api/commands/command_service.cc +++ b/chrome/browser/extensions/api/commands/command_service.cc
@@ -131,22 +131,6 @@ return BrowserContextKeyedAPIFactory<CommandService>::Get(context); } -bool CommandService::GetBrowserActionCommand(const std::string& extension_id, - QueryType type, - Command* command, - bool* active) const { - return GetExtensionActionCommand(extension_id, type, command, active, - ActionInfo::TYPE_BROWSER); -} - -bool CommandService::GetPageActionCommand(const std::string& extension_id, - QueryType type, - Command* command, - bool* active) const { - return GetExtensionActionCommand(extension_id, type, command, active, - ActionInfo::TYPE_PAGE); -} - bool CommandService::GetNamedCommands(const std::string& extension_id, QueryType type, CommandScope scope, @@ -397,13 +381,15 @@ } } + // TODO(https://crbug.com/1067130): Extensions shouldn't be able to specify + // commands for actions they don't have, so we should just be able to query + // for a single action type. Command existing_browser_action_command; const Command* new_browser_action_command = CommandsInfo::GetBrowserActionCommand(extension); - if (GetBrowserActionCommand(extension->id(), - CommandService::ACTIVE, - &existing_browser_action_command, - NULL) && + if (GetExtensionActionCommand(extension->id(), ActionInfo::TYPE_BROWSER, + CommandService::ACTIVE, + &existing_browser_action_command, nullptr) && // The browser action command may be defaulted to an unassigned // accelerator if a browser action is specified by the extension but a // keybinding is not declared. See @@ -412,21 +398,18 @@ new_browser_action_command->accelerator().key_code() == ui::VKEY_UNKNOWN) && !IsCommandShortcutUserModified( - extension, - existing_browser_action_command.command_name())) { + extension, existing_browser_action_command.command_name())) { RemoveKeybindingPrefs(extension->id(), existing_browser_action_command.command_name()); } Command existing_page_action_command; - if (GetPageActionCommand(extension->id(), - CommandService::ACTIVE, - &existing_page_action_command, - NULL) && + if (GetExtensionActionCommand(extension->id(), ActionInfo::TYPE_PAGE, + CommandService::ACTIVE, + &existing_page_action_command, nullptr) && !CommandsInfo::GetPageActionCommand(extension) && !IsCommandShortcutUserModified( - extension, - existing_page_action_command.command_name())) { + extension, existing_page_action_command.command_name())) { RemoveKeybindingPrefs(extension->id(), existing_page_action_command.command_name()); } @@ -572,6 +555,7 @@ current_prefs->DeepCopy()); const CommandMap* named_commands = CommandsInfo::GetNamedCommands(extension); + const Command* browser_action_command = CommandsInfo::GetBrowserActionCommand(extension); for (base::DictionaryValue::Iterator it(*current_prefs); @@ -685,12 +669,11 @@ } } -bool CommandService::GetExtensionActionCommand( - const std::string& extension_id, - QueryType query_type, - Command* command, - bool* active, - ActionInfo::Type action_type) const { +bool CommandService::GetExtensionActionCommand(const std::string& extension_id, + ActionInfo::Type action_type, + QueryType query_type, + Command* command, + bool* active) const { const ExtensionSet& extensions = ExtensionRegistry::Get(profile_)->enabled_extensions(); const Extension* extension = extensions.GetByID(extension_id); @@ -709,7 +692,6 @@ break; case ActionInfo::TYPE_ACTION: // TODO(devlin): Add support for the "action" key. - NOTREACHED(); return false; } if (!requested_command)
diff --git a/chrome/browser/extensions/api/commands/command_service.h b/chrome/browser/extensions/api/commands/command_service.h index 668772a..645b2a27 100644 --- a/chrome/browser/extensions/api/commands/command_service.h +++ b/chrome/browser/extensions/api/commands/command_service.h
@@ -95,27 +95,16 @@ // Convenience method to get the CommandService for a profile. static CommandService* Get(content::BrowserContext* context); - // Gets the command (if any) for the browser action of an extension given - // its |extension_id|. The function consults the master list to see if - // the command is active. Returns false if the extension has no browser - // action. Returns false if the command is not active and |type| requested - // is ACTIVE. |command| contains the command found and |active| (if not - // NULL) contains whether |command| is active. - bool GetBrowserActionCommand(const std::string& extension_id, - QueryType type, - Command* command, - bool* active) const; - - // Gets the command (if any) for the page action of an extension given - // its |extension_id|. The function consults the master list to see if - // the command is active. Returns false if the extension has no page - // action. Returns false if the command is not active and |type| requested - // is ACTIVE. |command| contains the command found and |active| (if not - // NULL) contains whether |command| is active. - bool GetPageActionCommand(const std::string& extension_id, - QueryType type, - Command* command, - bool* active) const; + // Gets the command (if any) for the specified |action_type| of an extension + // given its |extension_id|. The function consults the master list to see if + // the command is active. Returns false if the command is not active and + // |type| requested is ACTIVE. |command| contains the command found and + // |active| (if not null) contains whether |command| is active. + bool GetExtensionActionCommand(const std::string& extension_id, + ActionInfo::Type action_type, + QueryType type, + Command* command, + bool* active) const; // Gets the active named commands (if any) for the extension with // |extension_id|. The function consults the master list to see if the @@ -225,12 +214,6 @@ bool IsCommandShortcutUserModified(const Extension* extension, const std::string& command_name); - bool GetExtensionActionCommand(const std::string& extension_id, - QueryType query_type, - Command* command, - bool* active, - ActionInfo::Type type) const; - // A weak pointer to the profile we are associated with. Not owned by us. Profile* profile_;
diff --git a/chrome/browser/extensions/api/commands/command_service_browsertest.cc b/chrome/browser/extensions/api/commands/command_service_browsertest.cc index 6c3e3acc..4c7ef10 100644 --- a/chrome/browser/extensions/api/commands/command_service_browsertest.cc +++ b/chrome/browser/extensions/api/commands/command_service_browsertest.cc
@@ -10,6 +10,7 @@ #include "build/build_config.h" #include "chrome/browser/extensions/api/commands/command_service.h" #include "chrome/browser/extensions/extension_apitest.h" +#include "chrome/common/extensions/api/extension_action/action_info.h" #include "chrome/common/pref_names.h" #include "components/prefs/scoped_user_pref_update.h" #include "content/public/test/browser_test.h" @@ -141,8 +142,9 @@ { Command command; bool active = false; - EXPECT_TRUE(command_service->GetBrowserActionCommand( - extension->id(), CommandService::ALL, &command, &active)); + EXPECT_TRUE(command_service->GetExtensionActionCommand( + extension->id(), ActionInfo::TYPE_BROWSER, CommandService::ALL, + &command, &active)); EXPECT_EQ(kBasicBrowserActionKeybinding, Command::AcceleratorToString(command.accelerator())); @@ -156,8 +158,9 @@ { Command command; bool active = false; - EXPECT_TRUE(command_service->GetBrowserActionCommand( - extension->id(), CommandService::ALL, &command, &active)); + EXPECT_TRUE(command_service->GetExtensionActionCommand( + extension->id(), ActionInfo::TYPE_BROWSER, CommandService::ALL, + &command, &active)); EXPECT_EQ(kBasicAlternateKeybinding, Command::AcceleratorToString(command.accelerator())); @@ -170,8 +173,9 @@ { Command command; bool active = true; - EXPECT_TRUE(command_service->GetBrowserActionCommand( - extension->id(), CommandService::ALL, &command, &active)); + EXPECT_TRUE(command_service->GetExtensionActionCommand( + extension->id(), ActionInfo::TYPE_BROWSER, CommandService::ALL, + &command, &active)); EXPECT_EQ(kBasicBrowserActionKeybinding, Command::AcceleratorToString(command.accelerator())); @@ -191,8 +195,9 @@ { Command command; bool active = false; - EXPECT_TRUE(command_service->GetBrowserActionCommand( - extension->id(), CommandService::ACTIVE, &command, &active)); + EXPECT_TRUE(command_service->GetExtensionActionCommand( + extension->id(), ActionInfo::TYPE_BROWSER, CommandService::ACTIVE, + &command, &active)); EXPECT_EQ(kBasicBrowserActionKeybinding, Command::AcceleratorToString(command.accelerator())); @@ -206,8 +211,9 @@ { Command command; bool active = false; - EXPECT_TRUE(command_service->GetBrowserActionCommand( - extension->id(), CommandService::ACTIVE, &command, &active)); + EXPECT_TRUE(command_service->GetExtensionActionCommand( + extension->id(), ActionInfo::TYPE_BROWSER, CommandService::ACTIVE, + &command, &active)); EXPECT_EQ(kBasicAlternateKeybinding, Command::AcceleratorToString(command.accelerator())); @@ -220,8 +226,9 @@ { Command command; bool active = false; - EXPECT_FALSE(command_service->GetBrowserActionCommand( - extension->id(), CommandService::ACTIVE, &command, &active)); + EXPECT_FALSE(command_service->GetExtensionActionCommand( + extension->id(), ActionInfo::TYPE_BROWSER, CommandService::ACTIVE, + &command, &active)); } }
diff --git a/chrome/browser/extensions/api/commands/commands.cc b/chrome/browser/extensions/api/commands/commands.cc index 608d5db..759a130 100644 --- a/chrome/browser/extensions/api/commands/commands.cc +++ b/chrome/browser/extensions/api/commands/commands.cc
@@ -9,6 +9,7 @@ #include "chrome/browser/extensions/api/commands/command_service.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/common/extensions/api/extension_action/action_info.h" namespace { @@ -32,20 +33,21 @@ extensions::CommandService* command_service = extensions::CommandService::Get(browser_context()); + // TODO(https://crbug.com/1067130): We should be able to check what + // type of action (if any) the extension has, and just check for + // that one. extensions::Command browser_action; bool active = false; - if (command_service->GetBrowserActionCommand(extension_->id(), - extensions::CommandService::ALL, - &browser_action, - &active)) { + if (command_service->GetExtensionActionCommand( + extension_->id(), extensions::ActionInfo::TYPE_BROWSER, + extensions::CommandService::ALL, &browser_action, &active)) { command_list->Append(CreateCommandValue(browser_action, active)); } extensions::Command page_action; - if (command_service->GetPageActionCommand(extension_->id(), - extensions::CommandService::ALL, - &page_action, - &active)) { + if (command_service->GetExtensionActionCommand( + extension_->id(), extensions::ActionInfo::TYPE_PAGE, + extensions::CommandService::ALL, &page_action, &active)) { command_list->Append(CreateCommandValue(page_action, active)); }
diff --git a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_apitest.cc b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_apitest.cc index 4ac0fec..6857fc9 100644 --- a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_apitest.cc +++ b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_apitest.cc
@@ -62,7 +62,8 @@ ASSERT_TRUE(RunExtensionTest("on_rules_matched_debug")) << message_; } -IN_PROC_BROWSER_TEST_F(DeclarativeNetRequestAPItest, GetMatchedRules) { +// TODO(crbug.com/1070344): Disabled due to flakiness. +IN_PROC_BROWSER_TEST_F(DeclarativeNetRequestAPItest, DISABLED_GetMatchedRules) { ASSERT_TRUE(RunExtensionTest("get_matched_rules")) << message_; }
diff --git a/chrome/browser/extensions/api/developer_private/extension_info_generator.cc b/chrome/browser/extensions/api/developer_private/extension_info_generator.cc index 59866f9..5145d91 100644 --- a/chrome/browser/extensions/api/developer_private/extension_info_generator.cc +++ b/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
@@ -27,6 +27,7 @@ #include "chrome/browser/extensions/shared_module_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" +#include "chrome/common/extensions/api/extension_action/action_info.h" #include "chrome/common/extensions/command.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/pref_names.h" @@ -184,20 +185,22 @@ command_value.is_extension_action = is_extension_action; return command_value; }; + // TODO(https://crbug.com/1067130): Extensions shouldn't be able to specify + // commands for actions they don't have, so we should just be able to query + // for a single action type. bool active = false; Command browser_action; - if (command_service->GetBrowserActionCommand(extension_id, - CommandService::ALL, - &browser_action, - &active)) { + if (command_service->GetExtensionActionCommand( + extension_id, ActionInfo::TYPE_BROWSER, CommandService::ALL, + &browser_action, &active)) { commands->push_back(construct_command(browser_action, active, true)); } Command page_action; - if (command_service->GetPageActionCommand(extension_id, - CommandService::ALL, - &page_action, - &active)) { + active = false; + if (command_service->GetExtensionActionCommand( + extension_id, ActionInfo::TYPE_PAGE, CommandService::ALL, + &page_action, &active)) { commands->push_back(construct_command(page_action, active, true)); }
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_api_unittest.cc b/chrome/browser/extensions/api/extension_action/extension_action_api_unittest.cc index 2e63984..d2c0667 100644 --- a/chrome/browser/extensions/api/extension_action/extension_action_api_unittest.cc +++ b/chrome/browser/extensions/api/extension_action/extension_action_api_unittest.cc
@@ -22,8 +22,7 @@ public ::testing::WithParamInterface<ActionInfo::Type> { public: ExtensionActionAPIUnitTest() - : current_channel_( - extension_test_util::GetOverrideChannelForActionType(GetParam())) {} + : current_channel_(GetOverrideChannelForActionType(GetParam())) {} ~ExtensionActionAPIUnitTest() override {} private:
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc b/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc index be0c9ea0..721f829 100644 --- a/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc +++ b/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc
@@ -21,7 +21,6 @@ #include "chrome/browser/ui/extensions/extension_action_test_helper.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/extensions/api/extension_action/action_info_test_util.h" -#include "chrome/common/extensions/extension_test_util.h" #include "chrome/test/base/ui_test_utils.h" #include "components/sessions/content/session_tab_helper.h" #include "components/version_info/channel.h" @@ -209,8 +208,7 @@ public testing::WithParamInterface<ActionInfo::Type> { public: MultiActionAPITest() - : current_channel_( - extension_test_util::GetOverrideChannelForActionType(GetParam())) {} + : current_channel_(GetOverrideChannelForActionType(GetParam())) {} // Returns true if the |action| has whatever state its default is on the // tab with the given |tab_id|.
diff --git a/chrome/browser/extensions/api/proxy/proxy_apitest.cc b/chrome/browser/extensions/api/proxy/proxy_apitest.cc index 2d95480..02b0074 100644 --- a/chrome/browser/extensions/api/proxy/proxy_apitest.cc +++ b/chrome/browser/extensions/api/proxy/proxy_apitest.cc
@@ -334,9 +334,8 @@ } // Tests setting values also for incognito mode -// Test disabled due to http://crbug.com/88972. IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, - DISABLED_ProxyFixedIndividualIncognitoAlso) { + ProxyFixedIndividualIncognitoAlso) { ASSERT_TRUE(RunExtensionTestIncognito("proxy/individual_incognito_also")) << message_; const Extension* extension = GetSingleLoadedExtension();
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.cc index d61f96c..b415c6cae 100644 --- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.cc +++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.cc
@@ -30,7 +30,6 @@ #include "chrome/browser/policy/chrome_browser_cloud_management_controller.h" #endif #include "chrome/browser/policy/chrome_browser_policy_connector.h" -#include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_attributes_entry.h" #include "chrome/browser/profiles/profile_attributes_storage.h" @@ -726,6 +725,9 @@ auto* user = GetChromeOSUser(); if (user) { auto* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user); + // If primary user profile is not finalized, use the current profile. + if (!profile) + profile = Profile::FromBrowserContext(context_); DCHECK(profile); if (user->IsActiveDirectoryUser()) { // TODO(crbug.com/1012048): Handle AD, likely through crbug.com/1012170. @@ -887,14 +889,10 @@ ->IsEnterpriseManaged()) return false; - // The Chrome OS user must be afiliated with the device. + // The Chrome OS user must be affiliated with the device. + // This also implies that the user is managed. auto* user = GetChromeOSUser(); - if (!user || !user->IsAffiliated()) - return false; - - // And that user must be managed. - auto* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user); - return profile && profile->GetProfilePolicyConnector()->IsManaged(); + return user && user->IsAffiliated(); #else return policy::ChromeBrowserCloudManagementController::IsEnabled(); #endif
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc index 12fc95bb..3b5e213a3 100644 --- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc +++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc
@@ -32,7 +32,6 @@ #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h" -#include "chrome/browser/policy/profile_policy_connector.h" #include "chromeos/tpm/stub_install_attributes.h" #include "components/account_id/account_id.h" #include "components/user_manager/scoped_user_manager.h" @@ -834,7 +833,7 @@ const AccountId account_id( AccountId::FromUserEmail(profile_->GetProfileUserName())); const user_manager::User* user = user_manager->AddUserWithAffiliation( - account_id, /*is_affiliated=*/true); + account_id, /*is_affiliated=*/is_manageable_); chromeos::ProfileHelper::Get()->SetUserToProfileMappingForTesting(user, profile_); user_manager->UserLoggedIn(account_id, user->username_hash(), @@ -845,8 +844,6 @@ profile_->ScopedCrosSettingsTestHelper() ->InstallAttributes() ->SetCloudManaged("domain.com", "device_id"); - profile_->GetProfilePolicyConnector()->OverrideIsManagedForTesting( - is_manageable_); #endif }
diff --git a/chrome/browser/extensions/extension_action_manager_unittest.cc b/chrome/browser/extensions/extension_action_manager_unittest.cc index b11622f..17fca50a 100644 --- a/chrome/browser/extensions/extension_action_manager_unittest.cc +++ b/chrome/browser/extensions/extension_action_manager_unittest.cc
@@ -8,7 +8,6 @@ #include "chrome/browser/extensions/extension_action.h" #include "chrome/common/extensions/api/extension_action/action_info_test_util.h" -#include "chrome/common/extensions/extension_test_util.h" #include "chrome/test/base/testing_profile.h" #include "components/version_info/channel.h" #include "content/public/test/browser_task_environment.h" @@ -46,8 +45,7 @@ }; ExtensionActionManagerTest::ExtensionActionManagerTest() - : current_channel_( - extension_test_util::GetOverrideChannelForActionType(GetParam())), + : current_channel_(GetOverrideChannelForActionType(GetParam())), profile_(std::make_unique<TestingProfile>()) { registry_ = ExtensionRegistry::Get(profile_.get()); manager_ = ExtensionActionManager::Get(profile_.get());
diff --git a/chrome/browser/focus_ring_browsertest.cc b/chrome/browser/focus_ring_browsertest.cc new file mode 100644 index 0000000..6e9d1507 --- /dev/null +++ b/chrome/browser/focus_ring_browsertest.cc
@@ -0,0 +1,110 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/path_service.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/common/chrome_paths.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/interactive_test_utils.h" +#include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/render_widget_host_view.h" +#include "content/public/test/screenshot_test_utils.h" +#include "ui/base/ui_base_features.h" + +// TODO(crbug.com/958242): Move the baselines to skia gold for easier +// rebaselining when all platforms are supported + +// To rebaseline this test on all platforms: +// 1. Run a CQ+1 dry run. +// 2. Click the failing bots for android, windows, mac, and linux. +// 3. Find the failing interactive_ui_browsertests step. +// 4. Click the "Deterministic failure" link for the failing test case. +// 5. Copy the "Actual pixels" data url and paste into browser. +// 6. Save the image into your chromium checkout in +// chrome/test/data/focus_rings. + +class FocusRingBrowserTest : public InProcessBrowserTest { + public: + FocusRingBrowserTest() { + feature_list_.InitWithFeatures({features::kFormControlsRefresh}, {}); + } + + void SetUp() override { + EnablePixelOutput(); + InProcessBrowserTest::SetUp(); + } + + void SetUpCommandLine(base::CommandLine* command_line) override { + InProcessBrowserTest::SetUpCommandLine(command_line); + content::SetUpCommandLineForScreenshotTest(command_line); + } + + void RunTest(const std::string& screenshot_filename, + const std::string& body_html, + int screenshot_width, + int screenshot_height) { + base::ScopedAllowBlockingForTesting allow_blocking; + + ASSERT_TRUE(features::IsFormControlsRefreshEnabled()); + + base::FilePath dir_test_data; + ASSERT_TRUE(base::PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data)); + base::FilePath golden_screenshot_filepath = + dir_test_data.AppendASCII("focus_rings") + .AppendASCII(screenshot_filename + ".png"); + + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + ASSERT_TRUE(content::NavigateToURL( + web_contents, + GURL("data:text/html,<!DOCTYPE html><body>" + body_html + "</body>"))); + ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); + + content::RunScreenshotTest(web_contents, golden_screenshot_filepath, + screenshot_width, screenshot_height); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(FocusRingBrowserTest, Checkbox) { + RunTest("focus_ring_browsertest_checkbox", + "<input type=checkbox autofocus>" + "<input type=checkbox>", + /* screenshot_width */ 60, + /* screenshot_height */ 40); +} + +IN_PROC_BROWSER_TEST_F(FocusRingBrowserTest, Radio) { + RunTest("focus_ring_browsertest_radio", + "<input type=radio autofocus>" + "<input type=radio>", + /* screenshot_width */ 60, + /* screenshot_height */ 40); +} + +IN_PROC_BROWSER_TEST_F(FocusRingBrowserTest, Button) { + RunTest("focus_ring_browsertest_button", + "<button autofocus>button</button>" + "<br>" + "<br>" + "<button>button</button>", + /* screenshot_width */ 80, + /* screenshot_height */ 80); +} + +IN_PROC_BROWSER_TEST_F(FocusRingBrowserTest, Anchor) { + RunTest("focus_ring_browsertest_anchor", + "<div style='text-align: center; width: 80px;'>" + " <a href='foo' autofocus>line one<br>two</a>" + "</div>" + "<br>" + "<div style='text-align: center; width: 80px;'>" + " <a href='foo'>line one<br>two</a>" + "</div>", + /* screenshot_width */ 90, + /* screenshot_height */ 130); +}
diff --git a/chrome/browser/media/DEPS b/chrome/browser/media/DEPS index 9419e7a..b9cd397 100644 --- a/chrome/browser/media/DEPS +++ b/chrome/browser/media/DEPS
@@ -4,7 +4,6 @@ "+media/audio", "+media/base", "+media/cast", - "+media/cdm/cdm_proxy.h", "+media/cdm/supported_cdm_versions.h", "+media/media_buildflags.h", "+media/mojo/mojom",
diff --git a/chrome/browser/media/encrypted_media_browsertest.cc b/chrome/browser/media/encrypted_media_browsertest.cc index 4d8ffa1..78fb11ab 100644 --- a/chrome/browser/media/encrypted_media_browsertest.cc +++ b/chrome/browser/media/encrypted_media_browsertest.cc
@@ -72,10 +72,6 @@ #endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION) const char kExternalClearKeyStorageIdTestKeySystem[] = "org.chromium.externalclearkey.storageidtest"; -#if BUILDFLAG(ENABLE_CDM_PROXY) -const char kExternalClearKeyCdmProxyKeySystem[] = - "org.chromium.externalclearkey.cdmproxy"; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) #endif // BUILDFLAG(ENABLE_LIBRARY_CDMS) // Sessions to load. @@ -963,21 +959,6 @@ true); } -// Tests that only works on newer CDM interfaces. - -#if BUILDFLAG(ENABLE_CDM_PROXY) -IN_PROC_BROWSER_TEST_P(ECKEncryptedMediaTest, CdmProxy) { - if (GetCdmInterfaceVersion() < 11) { - DVLOG(0) << "Skipping test; CdmProxy only supported on CDM_11 and above."; - return; - } - - // ClearKeyCdmProxy only supports decrypt-only. - RunSimpleEncryptedMediaTest("bear-a_enc-a.webm", - kExternalClearKeyCdmProxyKeySystem, SrcType::MSE); -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - // Output Protection Tests. Run with different capture inputs. "monitor" // simulates the whole screen being captured. "window" simulates the Chrome // window being captured. "browser" simulates the current Chrome tab being
diff --git a/chrome/browser/media/history/media_history_keyed_service.cc b/chrome/browser/media/history/media_history_keyed_service.cc index 7a2dba6..db8754e 100644 --- a/chrome/browser/media/history/media_history_keyed_service.cc +++ b/chrome/browser/media/history/media_history_keyed_service.cc
@@ -83,7 +83,7 @@ } else { auto db_task_runner = base::ThreadPool::CreateUpdateableSequencedTaskRunner( {base::MayBlock(), base::TaskPriority::USER_VISIBLE, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}); + base::TaskShutdownBehavior::BLOCK_SHUTDOWN}); store_ = std::make_unique<StoreHolder>(profile_, std::move(db_task_runner)); } @@ -105,6 +105,11 @@ profile_, ServiceAccessType::IMPLICIT_ACCESS); if (history) history->RemoveObserver(this); + + if (auto* store = store_->GetForWrite()) { + store->db_task_runner_->PostTask( + FROM_HERE, base::BindOnce(&MediaHistoryStore::Close, store)); + } } void MediaHistoryKeyedService::OnURLsDeleted(
diff --git a/chrome/browser/media/history/media_history_store.cc b/chrome/browser/media/history/media_history_store.cc index f6fc445..1a3cdbff 100644 --- a/chrome/browser/media/history/media_history_store.cc +++ b/chrome/browser/media/history/media_history_store.cc
@@ -21,7 +21,9 @@ #include "content/public/browser/media_player_watch_time.h" #include "services/media_session/public/cpp/media_image.h" #include "services/media_session/public/cpp/media_position.h" +#include "sql/recovery.h" #include "sql/statement.h" +#include "sql/transaction.h" #include "url/origin.h" namespace { @@ -32,6 +34,32 @@ constexpr base::FilePath::CharType kMediaHistoryDatabaseName[] = FILE_PATH_LITERAL("Media History"); +void DatabaseErrorCallback(sql::Database* db, + const base::FilePath& db_path, + int extended_error, + sql::Statement* stmt) { + if (sql::Recovery::ShouldRecover(extended_error)) { + // Prevent reentrant calls. + db->reset_error_callback(); + + // After this call, the |db| handle is poisoned so that future calls will + // return errors until the handle is re-opened. + sql::Recovery::RecoverDatabase(db, db_path); + + // The DLOG(FATAL) below is intended to draw immediate attention to errors + // in newly-written code. Database corruption is generally a result of OS + // or hardware issues, not coding errors at the client level, so displaying + // the error would probably lead to confusion. The ignored call signals the + // test-expectation framework that the error was handled. + ignore_result(sql::Database::IsExpectedSqliteError(extended_error)); + return; + } + + // The default handling is to assert on debug and to ignore on release. + if (!sql::Database::IsExpectedSqliteError(extended_error)) + DLOG(FATAL) << db->GetErrorMessage(); +} + } // namespace int GetCurrentVersion() { @@ -83,9 +111,6 @@ db_task_runner_->ReleaseSoon(FROM_HERE, std::move(images_table_)); db_task_runner_->ReleaseSoon(FROM_HERE, std::move(feeds_table_)); db_task_runner_->ReleaseSoon(FROM_HERE, std::move(feed_items_table_)); - - if (db_) - db_task_runner_->DeleteSoon(FROM_HERE, db_.release()); } sql::Database* MediaHistoryStore::DB() { @@ -96,7 +121,7 @@ void MediaHistoryStore::SavePlayback( const content::MediaPlayerWatchTime& watch_time) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return; if (!DB()->BeginTransaction()) { @@ -156,9 +181,14 @@ void MediaHistoryStore::Initialize() { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); + db_ = std::make_unique<sql::Database>(); db_->set_histogram_tag("MediaHistory"); + // To recover from corruption. + db_->set_error_callback( + base::BindRepeating(&DatabaseErrorCallback, db_.get(), db_path_)); + base::File::Error err; if (!base::CreateDirectoryAndGetError(db_path_.DirName(), &err)) { LOG(ERROR) << "Failed to create the directory."; @@ -236,7 +266,7 @@ return; } - // Commit the transaction for creating the db_-> + // Commit the transaction for creating the db. DB()->CommitTransaction(); initialization_successful_ = true; @@ -293,7 +323,7 @@ bool MediaHistoryStore::CreateOriginId(const url::Origin& origin) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return false; return origin_table_->CreateOriginId(origin); @@ -303,7 +333,7 @@ mojom::MediaHistoryStatsPtr stats(mojom::MediaHistoryStats::New()); DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return stats; sql::Statement statement(DB()->GetUniqueStatement( @@ -325,7 +355,7 @@ std::vector<mojom::MediaHistoryOriginRowPtr> origins; DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return origins; sql::Statement statement(DB()->GetUniqueStatement( @@ -363,7 +393,7 @@ std::vector<mojom::MediaHistoryPlaybackRowPtr> MediaHistoryStore::GetMediaHistoryPlaybackRowsForDebug() { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return std::vector<mojom::MediaHistoryPlaybackRowPtr>(); return playback_table_->GetPlaybackRows(); @@ -372,7 +402,7 @@ std::vector<media_feeds::mojom::MediaFeedPtr> MediaHistoryStore::GetMediaFeedsForDebug() { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_ || !feeds_table_) + if (!CanAccessDatabase() || !feeds_table_) return std::vector<media_feeds::mojom::MediaFeedPtr>(); return feeds_table_->GetRows(); @@ -380,7 +410,7 @@ int MediaHistoryStore::GetTableRowCount(const std::string& table_name) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return -1; sql::Statement statement(DB()->GetUniqueStatement( @@ -400,7 +430,7 @@ const base::Optional<media_session::MediaPosition>& position, const std::vector<media_session::MediaImage>& artwork) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return; if (!DB()->BeginTransaction()) { @@ -470,7 +500,7 @@ base::Optional<MediaHistoryStore::GetPlaybackSessionsFilter> filter) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return std::vector<mojom::MediaHistoryPlaybackSessionRowPtr>(); auto sessions = @@ -490,12 +520,16 @@ db_->RazeAndClose(); sql::Database::Delete(db_path_); + + db_.reset(); + meta_table_.Reset(); + initialization_successful_ = false; } void MediaHistoryStore::DeleteAllOriginData( const std::set<url::Origin>& origins) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return; if (!DB()->BeginTransaction()) { @@ -515,7 +549,7 @@ void MediaHistoryStore::DeleteAllURLData(const std::set<GURL>& urls) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return; if (!DB()->BeginTransaction()) { @@ -557,7 +591,7 @@ std::set<GURL> urls; DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return urls; sql::Statement statement(DB()->GetUniqueStatement( @@ -573,7 +607,7 @@ void MediaHistoryStore::DiscoverMediaFeed(const GURL& url) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return; if (!DB()->BeginTransaction()) { @@ -601,7 +635,7 @@ const std::vector<media_session::MediaImage>& logos, const std::string& display_name) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return; if (!DB()->BeginTransaction()) { @@ -654,7 +688,7 @@ MediaHistoryStore::GetItemsForMediaFeedForDebug(const int64_t feed_id) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_ || !feed_items_table_) + if (!CanAccessDatabase() || !feed_items_table_) return std::vector<media_feeds::mojom::MediaFeedItemPtr>(); return feed_items_table_->GetItemsForFeed(feed_id); @@ -664,7 +698,7 @@ MediaHistoryStore::GetPendingSafeSearchCheckMediaFeedItems() { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_ || !feed_items_table_) + if (!CanAccessDatabase() || !feed_items_table_) return MediaHistoryKeyedService::PendingSafeSearchCheckList(); return feed_items_table_->GetPendingSafeSearchCheckItems(); @@ -673,7 +707,7 @@ void MediaHistoryStore::StoreMediaFeedItemSafeSearchResults( std::map<int64_t, media_feeds::mojom::SafeSearchResult> results) { DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); - if (!initialization_successful_) + if (!CanAccessDatabase()) return; if (!DB()->BeginTransaction()) { @@ -694,4 +728,16 @@ DB()->CommitTransaction(); } +bool MediaHistoryStore::CanAccessDatabase() const { + return initialization_successful_ && db_ && db_->is_open(); +} + +void MediaHistoryStore::Close() { + DCHECK(db_task_runner_->RunsTasksInCurrentSequence()); + + db_.reset(); + meta_table_.Reset(); + initialization_successful_ = false; +} + } // namespace media_history
diff --git a/chrome/browser/media/history/media_history_store.h b/chrome/browser/media/history/media_history_store.h index 23ff85db..60eab22 100644 --- a/chrome/browser/media/history/media_history_store.h +++ b/chrome/browser/media/history/media_history_store.h
@@ -162,11 +162,15 @@ void StoreMediaFeedItemSafeSearchResults( std::map<int64_t, media_feeds::mojom::SafeSearchResult> results); + void Close(); + private: friend class base::RefCountedThreadSafe<MediaHistoryStore>; ~MediaHistoryStore(); + bool CanAccessDatabase() const; + scoped_refptr<base::UpdateableSequencedTaskRunner> db_task_runner_; const base::FilePath db_path_; std::unique_ptr<sql::Database> db_;
diff --git a/chrome/browser/media/router/discovery/dial/device_description_fetcher_unittest.cc b/chrome/browser/media/router/discovery/dial/device_description_fetcher_unittest.cc index 9e938251..6a6b12e 100644 --- a/chrome/browser/media/router/discovery/dial/device_description_fetcher_unittest.cc +++ b/chrome/browser/media/router/discovery/dial/device_description_fetcher_unittest.cc
@@ -85,7 +85,7 @@ body, GURL("http://127.0.0.1/apps")))); auto head = network::mojom::URLResponseHead::New(); head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); - head->headers->AddHeader("Application-URL: http://127.0.0.1/apps"); + head->headers->AddHeader("Application-URL", "http://127.0.0.1/apps"); network::URLLoaderCompletionStatus status; status.decoded_body_length = body.size(); loader_factory_.AddResponse(url_, std::move(head), body, status); @@ -98,7 +98,7 @@ body, GURL("http://127.0.0.1/apps")))); auto head = network::mojom::URLResponseHead::New(); head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); - head->headers->AddHeader("Application-URL: http://127.0.0.1/apps/"); + head->headers->AddHeader("Application-URL", "http://127.0.0.1/apps/"); network::URLLoaderCompletionStatus status; status.decoded_body_length = body.size(); loader_factory_.AddResponse(url_, std::move(head), body, status); @@ -128,7 +128,7 @@ std::string body("<xml>description</xml>"); auto head = network::mojom::URLResponseHead::New(); head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); - head->headers->AddHeader("Application-URL:"); + head->headers->AddHeader("Application-URL", ""); network::URLLoaderCompletionStatus status; status.decoded_body_length = body.size(); loader_factory_.AddResponse(url_, std::move(head), body, status); @@ -140,7 +140,7 @@ std::string body("<xml>description</xml>"); auto head = network::mojom::URLResponseHead::New(); head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); - head->headers->AddHeader("Application-URL: http://www.example.com"); + head->headers->AddHeader("Application-URL", "http://www.example.com"); network::URLLoaderCompletionStatus status; status.decoded_body_length = body.size(); loader_factory_.AddResponse(url_, std::move(head), body, status); @@ -151,7 +151,7 @@ EXPECT_CALL(*this, OnError(HasSubstr("Missing or empty response"))); auto head = network::mojom::URLResponseHead::New(); head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); - head->headers->AddHeader("Application-URL: http://127.0.0.1/apps"); + head->headers->AddHeader("Application-URL", "http://127.0.0.1/apps"); loader_factory_.AddResponse(url_, std::move(head), "", network::URLLoaderCompletionStatus()); @@ -163,7 +163,7 @@ std::string body("\xfc\x9c\xbf\x80\xbf\x80"); auto head = network::mojom::URLResponseHead::New(); head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); - head->headers->AddHeader("Application-URL: http://127.0.0.1/apps"); + head->headers->AddHeader("Application-URL", "http://127.0.0.1/apps"); network::URLLoaderCompletionStatus status; status.decoded_body_length = body.size(); loader_factory_.AddResponse(url_, std::move(head), body, status);
diff --git a/chrome/browser/media/router/providers/dial/dial_activity_manager_unittest.cc b/chrome/browser/media/router/providers/dial/dial_activity_manager_unittest.cc index 15137d7..2045c17 100644 --- a/chrome/browser/media/router/providers/dial/dial_activity_manager_unittest.cc +++ b/chrome/browser/media/router/providers/dial/dial_activity_manager_unittest.cc
@@ -70,8 +70,7 @@ if (app_instance_url) { response_head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); - response_head->headers->AddHeader("LOCATION: " + - app_instance_url->spec()); + response_head->headers->AddHeader("LOCATION", app_instance_url->spec()); } loader_factory_.AddResponse(activity.launch_info.app_launch_url, std::move(response_head), "",
diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider_unittest.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider_unittest.cc index b58585a..29e7b03 100644 --- a/chrome/browser/media/router/providers/dial/dial_media_route_provider_unittest.cc +++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider_unittest.cc
@@ -256,7 +256,7 @@ app_instance_url_ = GURL(app_launch_url.spec() + "/run"); auto response_head = network::mojom::URLResponseHead::New(); response_head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(""); - response_head->headers->AddHeader("LOCATION: " + app_instance_url_.spec()); + response_head->headers->AddHeader("LOCATION", app_instance_url_.spec()); loader_factory_.AddResponse(app_launch_url, std::move(response_head), "", network::URLLoaderCompletionStatus()); std::vector<MediaRoute> routes;
diff --git a/chrome/browser/media/widevine_hardware_caps_win.cc b/chrome/browser/media/widevine_hardware_caps_win.cc index 9cd9b16..694e4ce 100644 --- a/chrome/browser/media/widevine_hardware_caps_win.cc +++ b/chrome/browser/media/widevine_hardware_caps_win.cc
@@ -4,155 +4,11 @@ #include "chrome/browser/media/widevine_hardware_caps_win.h" -// Need format off to keep the include order which is important. -// clang-format off -#include <comdef.h> -#include <initguid.h> -#include <d3d11_1.h> -#include <stdint.h> -#include <wrl/client.h> -#include <bitset> -// clang-format on - -#include "base/macros.h" -#include "base/stl_util.h" -#include "media/base/decrypt_config.h" -#include "media/media_buildflags.h" - -namespace { - -// Alias for printing HRESULT. -const auto PrintHr = logging::SystemErrorCodeToString; - -// TODO(xhwang): Deduplicate this file and widevine_cdm_proxy_factory.cc. -// clang-format off -DEFINE_GUID(kD3DCryptoTypeIntelWidevine, - 0x586e681, 0x4e14, 0x4133, 0x85, 0xe5, 0xa1, 0x4, 0x1f, 0x59, 0x9e, 0x26); -// clang-format on - -// Bit indices for Intel Widevine hardware secure decryption capabilities. -// -// Encryption schemes are defined in ISO/IEC 23001-7, "Common encryption in ISO -// base media file format files". Version 1 refers to ISO/IEC 23001-7:2012. -// Version 3 refers to ISO/IEC 23001-7:2016. The difference that matters in this -// context is as follows: -// - In Version 1, section 9.5, "In full sample encryption, the entire sample is -// encrypted". -// - In Version 3, section 9.4.1, "Full sample encryption MAY be used for all -// encrypted media types other than NAL Structured video, which SHALL use -// Subsample encryption." -// Therefore with kCencVersion1, it is possible that an entire sample of NAL -// Structured video is encrypted. This is not allowed with kCencVersion3. -enum IntelWidevineCaps { - kSupported = 0, - kAesCtr = 8, - kAesCbc = 9, - kCencVersion1 = 10, - kCencVersion3 = 11, - kCbcs = 17, -}; - -struct CodecToD3D11DecoderProfile { - media::VideoCodec video_codec; - GUID d3d11_decoder_profile; -}; - -const CodecToD3D11DecoderProfile kCodecsToQuery[] = { -#if BUILDFLAG(USE_PROPRIETARY_CODECS) - {media::VideoCodec::kCodecH264, D3D11_DECODER_PROFILE_H264_VLD_NOFGT}, -#endif - {media::VideoCodec::kCodecVP9, D3D11_DECODER_PROFILE_VP9_VLD_PROFILE0}, -}; - -// Use |video_device| to help check whether |d3d11_decoder_profile| is supported -// with CENC. -bool IsD3D11DecoderProfileSupportedWithCenc(ID3D11VideoDevice* video_device, - const GUID& d3d11_decoder_profile) { - D3D11_VIDEO_CONTENT_PROTECTION_CAPS caps = {}; - - // Check whether kD3DCryptoTypeIntelWidevine is supported with |codec|. - auto hresult = video_device->GetContentProtectionCaps( - &kD3DCryptoTypeIntelWidevine, &d3d11_decoder_profile, &caps); - if (FAILED(hresult)) { - DVLOG(1) << "Failed to GetContentProtectionCaps: " << PrintHr(hresult); - return false; - } - - // For kD3DCryptoTypeIntelWidevine, this is a bitmask of IntelWidevineCaps. - auto capability = std::bitset<64>(caps.ProtectedMemorySize); - DVLOG(1) << "Content protection caps: " << capability; - - if (!capability.test(IntelWidevineCaps::kSupported)) { - DVLOG(1) << "Hardware secure decryption not supported"; - return false; - } - - if (!capability.test(IntelWidevineCaps::kAesCtr)) { - DVLOG(1) << "AES-CTR decryption not supported"; - return false; - } - - // Query for CENC. - // TODO(crbug.com/899984): There are contents encrypted with kCencVersion1 out - // there, so this check is not sufficient. Update this to check kCencVersion1. - if (!capability.test(IntelWidevineCaps::kCencVersion3)) { - DVLOG(1) << "CENC version 3 not supported"; - return false; - } - - DVLOG(1) << "Widevine hardware secure CENC-v3 decryption supported. CENC-v1 " - "playback may fail!"; - return true; -} - -} // namespace - void GetWidevineHardwareCaps( - const base::flat_set<media::CdmProxy::Protocol>& cdm_proxy_protocols, base::flat_set<media::VideoCodec>* video_codecs, base::flat_set<media::EncryptionScheme>* encryption_schemes) { - DCHECK(!cdm_proxy_protocols.empty()); DCHECK(video_codecs->empty()); DCHECK(encryption_schemes->empty()); - // We only support kD3DCryptoTypeIntelWidevine. - if (!cdm_proxy_protocols.count(media::CdmProxy::Protocol::kIntel)) { - DVLOG(1) << "CDM supported CdmProxy protocol not supported by the system"; - return; - } - - Microsoft::WRL::ComPtr<ID3D11Device> device; - Microsoft::WRL::ComPtr<ID3D11VideoDevice> video_device; - - // D3D11CdmProxy requires D3D_FEATURE_LEVEL_11_1. - const D3D_FEATURE_LEVEL feature_levels[] = {D3D_FEATURE_LEVEL_11_1}; - - // Create device and populate |device|. - HRESULT hresult = D3D11CreateDevice( - nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, feature_levels, - base::size(feature_levels), D3D11_SDK_VERSION, &device, nullptr, nullptr); - - if (FAILED(hresult)) { - DVLOG(1) << "Failed to create the D3D11Device: " << PrintHr(hresult); - return; - } - - hresult = device.As(&video_device); - if (FAILED(hresult)) { - DVLOG(1) << "Failed to get ID3D11VideoDevice: " << PrintHr(hresult); - return; - } - - // TODO(xhwang): Support query for CBCS. Maybe return all encryption schemes - // supported by a codec. - - for (const auto& entry : kCodecsToQuery) { - if (IsD3D11DecoderProfileSupportedWithCenc(video_device.Get(), - entry.d3d11_decoder_profile)) { - video_codecs->insert(entry.video_codec); - } - } - - if (!video_codecs->empty()) - encryption_schemes->insert(media::EncryptionScheme::kCenc); + NOTIMPLEMENTED(); }
diff --git a/chrome/browser/media/widevine_hardware_caps_win.h b/chrome/browser/media/widevine_hardware_caps_win.h index fe159a6..fa819c0 100644 --- a/chrome/browser/media/widevine_hardware_caps_win.h +++ b/chrome/browser/media/widevine_hardware_caps_win.h
@@ -7,7 +7,6 @@ #include "base/containers/flat_set.h" #include "media/base/video_codecs.h" -#include "media/cdm/cdm_proxy.h" namespace media { enum class EncryptionScheme; @@ -16,7 +15,6 @@ // Get supported Widevine hardware capabilities, including supported // |video_codecs| and |encryption_schemes|. void GetWidevineHardwareCaps( - const base::flat_set<media::CdmProxy::Protocol>& cdm_proxy_protocols, base::flat_set<media::VideoCodec>* video_codecs, base::flat_set<media::EncryptionScheme>* encryption_schemes);
diff --git a/chrome/browser/media/widevine_hardware_caps_win_unittest.cc b/chrome/browser/media/widevine_hardware_caps_win_unittest.cc index 7468826..58b4789a 100644 --- a/chrome/browser/media/widevine_hardware_caps_win_unittest.cc +++ b/chrome/browser/media/widevine_hardware_caps_win_unittest.cc
@@ -6,16 +6,10 @@ #include "testing/gtest/include/gtest/gtest.h" -// TODO(xhwang): Add tests using D3D11 mocks. Currently this cannot be done -// because we cannot depend on media/gpu/windows/d3d11_mocks.*. - TEST(WidevineHardwareCapsTest, GetWidevineHardwareCaps) { - base::flat_set<media::CdmProxy::Protocol> cdm_proxy_protocols = { - media::CdmProxy::Protocol::kIntel}; base::flat_set<media::VideoCodec> video_codecs; base::flat_set<media::EncryptionScheme> encryption_schemes; // Not checking the results since it's hardware dependent. - GetWidevineHardwareCaps(cdm_proxy_protocols, &video_codecs, - &encryption_schemes); + GetWidevineHardwareCaps(&video_codecs, &encryption_schemes); }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background.js index bc7c2bb..5e97265 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background.js
@@ -56,6 +56,9 @@ constructor() { super(); + // Initialize legacy background page first. + ChromeVoxBackground.init(); + /** * A list of site substring patterns to use with ChromeVox next. Keep these * strings relatively specific. @@ -141,6 +144,15 @@ /** @type {boolean} */ this.talkBackEnabled = false; + // Initialize various handlers for automation. + DesktopAutomationHandler.init(); + /** @private {!RangeAutomationHandler} */ + this.rangeAutomationHandler_ = new RangeAutomationHandler(); + /** @private {!FocusAutomationHandler} */ + this.focusAutomationHandler_ = new FocusAutomationHandler(); + /** @private {!MediaAutomationHandler} */ + this.mediaAutomationHandler_ = new MediaAutomationHandler(); + CommandHandler.init(); FindHandler.init(); DownloadHandler.init(); @@ -162,15 +174,6 @@ // ChromeVox starts. sessionStorage.setItem('darkScreen', 'false'); - chrome.loginState.getSessionState((sessionState) => { - // Play startup progress only when starting in a user session. Split - // incognito manifest appears to run two copies of the background page in - // different contexts, so that two progress ticks play. - if (sessionState === 'IN_OOBE_SCREEN' || - sessionState === 'IN_LOGIN_SCREEN') { - return; - } - // A self-contained class to start and stop progress sounds before any // speech has been generated on startup. This is important in cases where // speech is severely delayed. @@ -193,7 +196,6 @@ onTtsInterrupted() {} }; new ProgressPlayer(); - }); } /** @@ -550,5 +552,16 @@ }; +// In 'split' manifest mode, the extension system runs two copies of the +// extension. One in an incognito context; the other not. In guest mode, the +// extension system runs only the extension in an incognito context. To prevent +// doubling of this extension, only continue for one context. +const manifest = + /** @type {{incognito: (string|undefined)}} */ ( + chrome.runtime.getManifest()); +if (manifest.incognito == 'split' && !chrome.extension.inIncognitoContext) { + window.close(); +} new Background(); + }); // goog.scope
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js index 9dd0b8c..dd09b9de 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
@@ -30,9 +30,7 @@ /** - * This object manages the global and persistent state for ChromeVox. - * It listens for messages from the content scripts on pages and - * interprets them. + * This is the legacy ChromeVox background object. */ ChromeVoxBackground = class { constructor() { @@ -118,6 +116,10 @@ if (pref == 'earcons') { AbstractEarcons.enabled = !!value; } else if (pref == 'sticky' && announce) { + if (typeof (value) != 'boolean') { + throw new Error('Unexpected sticky mode value ' + value); + } + chrome.accessibilityPrivate.setKeyboardListener(true, !!value); new Output() .withInitialSpeechProperties(AbstractTts.PERSONALITY_ANNOTATION) .withString( @@ -348,20 +350,24 @@ getCurrentVoice() { return this.backgroundTts_.currentVoice; } + + /** + * Initializes classic background object. + */ + static init() { + // Create the background page object and export a function window['speak'] + // so that other background pages can access it. Also export the prefs + // object for access by the options page. + const background = new ChromeVoxBackground(); + + // TODO: this needs to be cleaned up (move to init?). + window['speak'] = goog.bind(background.tts.speak, background.tts); + ChromeVoxState.backgroundTts = background.backgroundTts_; + // Export the prefs object for access by the options page. + window['prefs'] = ChromeVoxPrefs.instance; + // Export the braille translator manager for access by the options page. + window['braille_translator_manager'] = + background.backgroundBraille_.getTranslatorManager(); + window['getCurrentVoice'] = background.getCurrentVoice.bind(background); + } }; - - -// Create the background page object and export a function window['speak'] -// so that other background pages can access it. Also export the prefs object -// for access by the options page. -const background = new ChromeVoxBackground(); - -// TODO: this needs to be cleaned up (move to init?). -window['speak'] = goog.bind(background.tts.speak, background.tts); -ChromeVoxState.backgroundTts = background.backgroundTts_; -// Export the prefs object for access by the options page. -window['prefs'] = ChromeVoxPrefs.instance; -// Export the braille translator manager for access by the options page. -window['braille_translator_manager'] = - background.backgroundBraille_.getTranslatorManager(); -window['getCurrentVoice'] = background.getCurrentVoice.bind(background);
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js index 7f6edf73..792a1d8 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
@@ -104,12 +104,6 @@ break; case 'toggleStickyMode': ChromeVoxBackground.setPref('sticky', !ChromeVox.isStickyPrefOn, true); - - if (ChromeVox.isStickyPrefOn) { - chrome.accessibilityPrivate.setKeyboardListener(true, true); - } else { - chrome.accessibilityPrivate.setKeyboardListener(true, false); - } CommandHandler.smartStickyMode_.onStickyModeCommand( ChromeVoxState.instance.currentRange); return false; @@ -278,6 +272,49 @@ break; default: break; + case 'toggleKeyboardHelp': + (new PanelCommand(PanelCommandType.OPEN_MENUS)).send(); + return false; + case 'showPanelMenuMostRecent': + (new PanelCommand(PanelCommandType.OPEN_MENUS_MOST_RECENT)).send(); + return false; + case 'nextGranularity': + case 'previousGranularity': { + const backwards = command == 'previousGranularity'; + let gran = GestureCommandHandler.granularity; + const next = backwards ? + (--gran >= 0 ? gran : GestureGranularity.COUNT - 1) : + ++gran % GestureGranularity.COUNT; + GestureCommandHandler.granularity = + /** @type {GestureGranularity} */ (next); + + let announce = ''; + switch (GestureCommandHandler.granularity) { + case GestureGranularity.CHARACTER: + announce = Msgs.getMsg('character_granularity'); + break; + case GestureGranularity.WORD: + announce = Msgs.getMsg('word_granularity'); + break; + case GestureGranularity.LINE: + announce = Msgs.getMsg('line_granularity'); + break; + } + ChromeVox.tts.speak(announce, QueueMode.FLUSH); + } + return false; + case 'announceBatteryDescription': + chrome.accessibilityPrivate.getBatteryDescription(function( + batteryDescription) { + new Output() + .withString(batteryDescription) + .withQueueMode(QueueMode.FLUSH) + .go(); + }); + break; + case 'resetTextToSpeechSettings': + ChromeVox.tts.resetTextToSpeechSettings(); + return false; } // Require a current range. @@ -667,12 +704,6 @@ return false; } break; - case 'toggleKeyboardHelp': - (new PanelCommand(PanelCommandType.OPEN_MENUS)).send(); - return false; - case 'showPanelMenuMostRecent': - (new PanelCommand(PanelCommandType.OPEN_MENUS_MOST_RECENT)).send(); - return false; case 'showHeadingsList': (new PanelCommand(PanelCommandType.OPEN_MENUS, 'role_heading')).send(); return false; @@ -915,40 +946,6 @@ } CommandHandler.onCommand(command); return false; - case 'nextGranularity': - case 'previousGranularity': { - const backwards = command == 'previousGranularity'; - let gran = GestureCommandHandler.granularity; - const next = backwards ? - (--gran >= 0 ? gran : GestureGranularity.COUNT - 1) : - ++gran % GestureGranularity.COUNT; - GestureCommandHandler.granularity = - /** @type {GestureGranularity} */ (next); - - let announce = ''; - switch (GestureCommandHandler.granularity) { - case GestureGranularity.CHARACTER: - announce = Msgs.getMsg('character_granularity'); - break; - case GestureGranularity.WORD: - announce = Msgs.getMsg('word_granularity'); - break; - case GestureGranularity.LINE: - announce = Msgs.getMsg('line_granularity'); - break; - } - ChromeVox.tts.speak(announce, QueueMode.FLUSH); - } - return false; - case 'announceBatteryDescription': - chrome.accessibilityPrivate.getBatteryDescription(function( - batteryDescription) { - new Output() - .withString(batteryDescription) - .withQueueMode(QueueMode.FLUSH) - .go(); - }); - break; case 'announceRichTextDescription': { const node = ChromeVoxState.instance.currentRange.start.node; const optSubs = []; @@ -1050,9 +1047,6 @@ .go(); } return false; - case 'resetTextToSpeechSettings': - ChromeVox.tts.resetTextToSpeechSettings(); - return false; case 'toggleAnnotationsWidget': { if (!UserAnnotationHandler.instance.enabled) { return false;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js index 34962af1..2af7991 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js
@@ -652,9 +652,12 @@ /** * Initializes global state for DesktopAutomationHandler. - * @private */ - static init_() { + static init() { + if (DesktopAutomationHandler.instance) { + throw new Error('DesktopAutomationHandler.instance already exists.'); + } + chrome.automation.getDesktop(function(desktop) { DesktopAutomationHandler.instance = new DesktopAutomationHandler(desktop); }); @@ -683,13 +686,10 @@ /** @const {number} */ DesktopAutomationHandler.MIN_HOVER_EXIT_SOUND_DELAY_MS = 500; - /** * Global instance. * @type {DesktopAutomationHandler} */ DesktopAutomationHandler.instance; - -DesktopAutomationHandler.init_(); }); // goog.scope
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/focus_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/focus_automation_handler.js index d72ef10..06c5245 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/focus_automation_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/focus_automation_handler.js
@@ -78,5 +78,4 @@ } }; -new FocusAutomationHandler(); }); // goog.scope
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js index 121b23fed53..c06da10 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js
@@ -38,8 +38,7 @@ * @private */ GestureCommandHandler.onAccessibilityGesture_ = function(gesture) { - if (!GestureCommandHandler.enabled_ || - !ChromeVoxState.instance.currentRange) { + if (!GestureCommandHandler.enabled_) { return; } @@ -53,14 +52,17 @@ Output.forceModeForNextSpeechUtterance(QueueMode.FLUSH); // Map gestures to arrow keys while within menus. - const range = ChromeVoxState.instance.currentRange; - if (commandData.menuKeyOverride && range.start && range.start.node && - range.start.node.role == RoleType.MENU_ITEM && - (range.start.node.root.docUrl.indexOf(chrome.extension.getURL('')) == 0 || - range.start.node.root.role == RoleType.DESKTOP)) { - const key = commandData.keyOverride; - BackgroundKeyboardHandler.sendKeyPress(key.keyCode, key.modifiers); - return; + if (ChromeVoxState.instance.currentRange) { + const range = ChromeVoxState.instance.currentRange; + if (commandData.menuKeyOverride && range.start && range.start.node && + range.start.node.role == RoleType.MENU_ITEM && + (range.start.node.root.docUrl.indexOf(chrome.extension.getURL('')) == + 0 || + range.start.node.root.role == RoleType.DESKTOP)) { + const key = commandData.keyOverride; + BackgroundKeyboardHandler.sendKeyPress(key.keyCode, key.modifiers); + return; + } } const textEditHandler = DesktopAutomationHandler.instance.textEditHandler;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/media_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/media_automation_handler.js index c2da28f2..b5c88ec 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/media_automation_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/media_automation_handler.js
@@ -118,5 +118,4 @@ /** @type {number} */ MediaAutomationHandler.MIN_WAITTIME_MS = 1000; -new MediaAutomationHandler(); }); // goog.scope
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/range_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/range_automation_handler.js index 0e4609f..c4b8dcf 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/range_automation_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/range_automation_handler.js
@@ -197,5 +197,4 @@ } }; -new RangeAutomationHandler(); }); // goog.scope
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode.js index 0132a07..a90994fc 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode.js
@@ -126,11 +126,13 @@ } let editable = this.getEditableOrRelatedEditable_(range.start.node); - if (!editable) { - return; - } - - while (!editable.editableRoot) { + while (editable && !editable.editableRoot) { + if (!editable.parent || + editable.parent.state[chrome.automation.StateType.EDITABLE]) { + // Not all editables from all trees (e.g. Android, views) set the + // editable root boolean attribute. + break; + } editable = editable.parent; } this.ignoredNodeSubtree_ = editable;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js index 7aaedec8..993482ee 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
@@ -476,7 +476,8 @@ {menuTitle: 'role_table', predicate: AutomationPredicate.table} ]; - const node = bkgnd.ChromeVoxState.instance.getCurrentRange().start.node; + const range = bkgnd.ChromeVoxState.instance.getCurrentRange(); + const node = range ? range.start.node : null; for (let i = 0; i < roleListMenuMapping.length; ++i) { const menuTitle = roleListMenuMapping[i].menuTitle; const predicate = roleListMenuMapping[i].predicate; @@ -487,7 +488,7 @@ Panel.addNodeMenu(menuTitle, node, predicate, async); } - if (node.standardActions) { + if (node && node.standardActions) { for (let i = 0; i < node.standardActions.length; i++) { const standardAction = node.standardActions[i]; const actionMsg = Panel.ACTION_TO_MSG_ID[standardAction]; @@ -502,7 +503,7 @@ } } - if (node.customActions) { + if (node && node.customActions) { for (let i = 0; i < node.customActions.length; i++) { const customAction = node.customActions[i]; actionsMenu.addMenuItem(
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb index f217f33..f9331f1 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
@@ -167,7 +167,7 @@ <translation id="2347456970887948350">رابط</translation> <translation id="2381733276052567791">تفعيل ميزة تحويل النص إلى كلام أو إيقافها</translation> <translation id="2390264819538553347">للتقدم، اضغط على Enter، وللرجوع للخلف، اضغط على Backspace.</translation> -<translation id="2398579267367951220">اكتب للبحث في الصفحة. اضغط على enter للحصول على النتيجة سريعًا، أو اضغط على الأسهم المتّجهة للأسفل أو للأعلى لتصفّح النتائج، أو استمر بالكتابة لتغيير البحث، أو اضغط على escape للإلغاء.</translation> +<translation id="2398579267367951220">اكتب للبحث في الصفحة. اضغط على enter للحصول على النتيجة سريعًا، أو اضغط على السهم المتّجه للأسفل أو للأعلى لتصفّح النتائج، أو استمر بالكتابة لتغيير البحث، أو اضغط على escape للإلغاء.</translation> <translation id="240709722712693803">بنفسجي مزرق</translation> <translation id="2416512023405990736">مربع اختيار غير محدد</translation> <translation id="2417569100218200841">معلومات المحتوى</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb index d0e622b..add0210 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb
@@ -167,6 +167,7 @@ <translation id="2347456970887948350">একটি লিঙ্ক</translation> <translation id="2381733276052567791">ভাষ্য চালু বা বন্ধ করুন</translation> <translation id="2390264819538553347">এগিয়ে যাওয়ার জন্য, enter টিপুন; ফিরে যেতে, backspace টিপুন।</translation> +<translation id="2398579267367951220">পৃষ্ঠাটি সার্চ করতে টাইপ করুন। সার্চের ফলাফলে সরাসরি চলে যেতে কীবোর্ড থেকে 'Enter' কী এবং ফলাফল ব্রাউজ করার জন্য 'Up' বা 'Down Arrow' কী প্রেস করুন। নতুন কোনও কিছু সার্চ করার জন্য টাইপ করতে থাকুন অথবা বাতিল করতে 'Escape' কী প্রেস করুন।</translation> <translation id="240709722712693803">নীলাভ বেগুনী</translation> <translation id="2416512023405990736">একটি টিকচিহ্ন উঠানো চেকবাক্স</translation> <translation id="2417569100218200841">কন্টেন্টর তথ্য</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb index bcf50a07..9bd4cbc7 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
@@ -167,7 +167,7 @@ <translation id="2347456970887948350">Link</translation> <translation id="2381733276052567791">Uključivanje/isključivanje govora</translation> <translation id="2390264819538553347">Pritisnite tipku enter da idete dalje; pritisnite tipku backspace da se vratite nazad.</translation> -<translation id="2398579267367951220">Pišite da pretražite stranicu. Pritisnite "enter" da preskočite na rezultate, koristite strelice gore ili dolje da pregledate rezultate, nastavite pisati da promijenite predmet pretraživanja ili pritisnite "escape" da otkažete.</translation> +<translation id="2398579267367951220">Pišite da pretražite stranicu. Pritisnite "enter" da pređete na rezultat, koristite strelice nagore ili nadolje da pregledate rezultate, nastavite pisati da promijenite predmet pretraživanja ili pritisnite "escape" da otkažete.</translation> <translation id="240709722712693803">Plavoljubičasta</translation> <translation id="2416512023405990736">Neoznačeno polje za potvrdu</translation> <translation id="2417569100218200841">Informacije o sadržaju</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb index b6064d5..e833b5cd 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb
@@ -167,6 +167,7 @@ <translation id="2347456970887948350">קישור</translation> <translation id="2381733276052567791">הפעלה וכיבוי של דיבור</translation> <translation id="2390264819538553347">כדי להתקדם הקש על Enter וכדי לחזור הקש על backspace.</translation> +<translation id="2398579267367951220">יש להקליד כדי לחפש בדף. יש להקיש על Enter כדי לעבור אל התוצאה ועל מקשי החיצים למעלה ולמטה כדי לדפדף בתוצאות. אפשר להמשיך להקליד כדי לשנות את החיפוש או להקיש על Esc כדי לבטל.</translation> <translation id="240709722712693803">סיגל</translation> <translation id="2416512023405990736">תיבת סימון שלא סומנה</translation> <translation id="2417569100218200841">פרטי תוכן</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb index a299182..15edde8 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
@@ -891,7 +891,7 @@ <translation id="8249864170673238087"><ph name="COLOR" /> ភាពស្រអាប់ <ph name="OPACITY_PERCENTAGE" />%។</translation> <translation id="826825447994856889">សេចក្ដីផ្ដើម</translation> <translation id="827266600368092403">ចាប់ផ្តើម ឬបញ្ចប់ការជ្រើសរើស</translation> -<translation id="827422111966801947">ខៀវជាំ</translation> +<translation id="827422111966801947">ទឹកប៊ិក</translation> <translation id="8276439074553447000">លោតទៅរបស់ដែលអាចផ្តោតបានពីមុន</translation> <translation id="8283603667300770666">ប្រអប់បែបបទបន្ទាប់។</translation> <translation id="8310185481635255431">គ្មានតំណបន្ទាប់ទេ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb index 0a5a2a3..a553381 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb
@@ -880,7 +880,7 @@ <translation id="8138880386467279117">स्पर्श</translation> <translation id="817440585505441544">{COUNT,plural, =1{ अन्डरस्कोर}other{ # अन्डरस्कोरहरू}}</translation> <translation id="8184828902145951186">पङ्क्ति</translation> -<translation id="8186185314313222077">पूर्ण स्क्रिन टगल गर्नुहोस्</translation> +<translation id="8186185314313222077">फुल स्क्रिन टगल गर्नुहोस्</translation> <translation id="8199231515320852133">वर्तमान कक्षको हेडर घोषणा गर्नुहोस्</translation> <translation id="8202174735952881587">आकासे निलो</translation> <translation id="820469951249669083">अर्को पङ्क्तिमा जानुहोस्</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb index 9905ce9..9727740 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb
@@ -167,6 +167,7 @@ <translation id="2347456970887948350">இணைப்பு</translation> <translation id="2381733276052567791">பேச்சை இயக்குவதை அல்லது முடக்குவதை நிலைமாற்றும்</translation> <translation id="2390264819538553347">அடுத்த பக்கத்திற்குச் செல்ல என்டர் விசையையும், முந்தைய பக்கத்திற்குச செல்ல பேக்ஸ்பேஸ் விசையையும் அழுத்தவும்.</translation> +<translation id="2398579267367951220">இந்தப் பக்கத்தில் தேட, தட்டச்சு செய்யவும். நேராக முடிவுகளைக் காண Enter விசையை அழுத்தவும், முடிவுகளில் தேட மேல்/கீழ் அம்புக்குறிகளை உபயோகிக்கவும், தேடலை மாற்ற தொடர்ந்து தட்டச்சு செய்யவும், அல்லது ரத்துசெய்ய Escape விசையை அழுத்தவும்.</translation> <translation id="240709722712693803">புளூ வைலெட்</translation> <translation id="2416512023405990736">தேர்வுநீக்கப்பட்ட செக்பாக்ஸ்</translation> <translation id="2417569100218200841">உள்ளடக்கத் தகவல்</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb index 96433c8..f81c319 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
@@ -167,7 +167,8 @@ <translation id="2347456970887948350">లింక్</translation> <translation id="2381733276052567791">ప్రసంగాన్ని ఆన్ లేదా ఆఫ్ చేయండి</translation> <translation id="2390264819538553347">ముందుకు వెళ్లడానికి, enter నొక్కండి; వెనుకకు వెళ్లడానికి, backspace నొక్కండి.</translation> -<translation id="2398579267367951220">పేజీని వెతకడానికి టైప్ చేయండి. ఫలితానికి వెంటనే వెళ్లడానికి enterను నొక్కండి, ఫలితాలను బ్రౌజ్ చేయడానికి పైకి లేదా కిందికి బాణాలు, మీ శోధనను మార్చడానికి టైప్ చేస్తూ ఉండండి లేదా రద్దు చేసేందుకు escapeను నొక్కండి.</translation> +<translation id="2398579267367951220">పేజీని వెతకడానికి టైప్ చేయండి. ఫలితానికి వెంటనే వెళ్లడానికి enterను నొక్కండి, +ఫలితాలను బ్రౌజ్ చేయడానికి పైకి లేదా కిందికి ఉన్న బాణం గుర్తులు వాడండి, మీ శోధనను మార్చడానికి టైప్ చేస్తూ ఉండండి లేదా రద్దు చేసేందుకు escapeను నొక్కండి.</translation> <translation id="240709722712693803">నీలలోహిత రంగు</translation> <translation id="2416512023405990736">ఎంచుకున్నట్లు గుర్తు పెట్టని చెక్బాక్స్</translation> <translation id="2417569100218200841">కంటెంట్ సమాచారం</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb index 1570f39..5fc96f6e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb
@@ -167,7 +167,7 @@ <translation id="2347456970887948350">ایک لنک</translation> <translation id="2381733276052567791">ٹوگل کر کے اسپیچ کو آن یا آف کریں</translation> <translation id="2390264819538553347">آگے جانے کیلئے، انٹر کو دبائیں؛ واپس جانے کیلئے، بیک اسپیس کو دبائیں۔</translation> -<translation id="2398579267367951220">صفحہ تلاش کرنے کے لئے ٹائپ کریں۔ نتائج میں جانے کے لیے enter دبائیں، نتائج براؤز کرنے کے لئے اوپر یا نیچے تیر والی بٹن دبائیں، اپنی تلاش کو تبدیل کرنے کے لئے ٹائپنگ جاری رکھیں، یا منسوخ کرنے کے لئے escape دبائیں۔</translation> +<translation id="2398579267367951220">صفحے میں تلاش کرنے کے لئے ٹائپ کریں۔ نتیجے تک جانے کے لیے enter دبائیں، نتائج براؤز کرنے کے لئے اوپر یا نیچے تیر والے بٹن دبائیں، اپنی تلاش کو تبدیل کرنے کے لئے ٹائپنگ جاری رکھیں، یا منسوخ کرنے کے لئے escape دبائیں۔</translation> <translation id="240709722712693803">نیلا وائلیٹ</translation> <translation id="2416512023405990736">ایک غیر نشان زد چیک باکس</translation> <translation id="2417569100218200841">مواد کی معلومات</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ar.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ar.xtb index 49a6b57..f35b819 100644 --- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ar.xtb +++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_ar.xtb
@@ -22,7 +22,7 @@ ستتمكن التطبيقات المزوّدة بأذونات مساحة التخزين من الوصول إلى صورك وفيديوهاتك.</translation> <translation id="3081586908890909590">التبديل لتسجيل فيديو</translation> -<translation id="313467653172006084">30 صورة في الثانية</translation> +<translation id="313467653172006084">30 لقطة في الثانية</translation> <translation id="3183731565330012717">نوع الشبكة</translation> <translation id="3227137524299004712">الميكروفون</translation> <translation id="3259149966178251584">درجة دقة الكاميرا</translation> @@ -61,7 +61,7 @@ <translation id="7608223098072244877">4 × 4</translation> <translation id="7649070708921625228">مساعدة</translation> <translation id="7658239707568436148">إلغاء</translation> -<translation id="7670511624014457267">60 صورة في الثانية</translation> +<translation id="7670511624014457267">60 لقطة في الثانية</translation> <translation id="8049189770492311300">مؤقت</translation> <translation id="8067883171444229417">تشغيل الفيديو</translation> <translation id="8131740175452115882">التأكيد</translation>
diff --git a/chrome/browser/resources/new_tab_page/app.html b/chrome/browser/resources/new_tab_page/app.html index 9423a2a0..d3a6738 100644 --- a/chrome/browser/resources/new_tab_page/app.html +++ b/chrome/browser/resources/new_tab_page/app.html
@@ -23,7 +23,8 @@ width: 100%; } - #background > * { + #background > *, + #oneGoogleBar { height: 100%; position: absolute; top: 0; @@ -39,13 +40,17 @@ background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.3)); } + #contentContainer { + overflow: auto; + } + #content { align-items: center; display: flex; flex-direction: column; - height: calc(100% - var(--ntp-one-google-bar-height)); - top: var(--ntp-one-google-bar-height); - z-index: 1; + min-height: calc(100% - var(--ntp-one-google-bar-height)); + padding-top: var(--ntp-one-google-bar-height); + position: relative; } #logo { @@ -75,7 +80,7 @@ background-color: var(--ntp-background-override-color); border-radius: calc(0.5 * var(--cr-button-height)); bottom: 16px; - position: absolute; + position: fixed; } :host-context([dir='ltr']) #customizeButtonContainer { @@ -110,7 +115,7 @@ line-height: 20px; max-width: 50vw; padding: 8px; - position: absolute; + position: fixed; text-shadow: var(--ntp-theme-text-shadow); } @@ -166,54 +171,57 @@ <ntp-untrusted-iframe id="backgroundImage" hidden="[[!showBackgroundImage_]]"> </ntp-untrusted-iframe> <div id="backgroundGradient" hidden="[[!showBackgroundImage_]]"></div> - <div id="content"> - <ntp-logo id="logo" doodle-allowed$="[[doodleAllowed_]]" - single-colored$="[[singleColoredLogo_]]"> - </ntp-logo> - <ntp-fakebox id="fakebox" on-open-voice-search="onVoiceSearchClick_"> - </ntp-fakebox> - <ntp-most-visited id="mostVisited" dark$="[[theme_.isDark]]"> - </ntp-most-visited> - <dom-if if="[[showCustomizeDialog_]]" restamp> - <template> - <ntp-customize-dialog on-close="onCustomizeDialogClose_" - theme="[[theme_]]" background-selection="{{backgroundSelection_}}"> - </ntp-customize-dialog> - </template> - </dom-if> - <dom-if if="[[showVoiceSearchOverlay_]]" restamp> - <template> - <ntp-voice-search-overlay on-close="onVoiceSearchOverlayClose_"> - </ntp-voice-search-overlay> - </template> - </dom-if> - <ntp-untrusted-iframe id="promo" path="promo" hidden$="[[!promoLoaded_]]"> - </ntp-untrusted-iframe> - <!-- cr-button is transparent on hover. This leads to incorrect results when - a custom background is set. Therefore, wrap customize button in - container to enfore solid background color. --> - <div id="customizeButtonContainer"> - <cr-button id="customizeButton" on-click="onCustomizeClick_"> - <div id="customizeIcon"></div> - $i18n{customizeButton} - </cr-button> - </div> - <a id="backgroundImageAttribution" - href="[[backgroundImageAttributionUrl_]]" - hidden="[[!backgroundImageAttribution1_]]"> - <div id="backgroundImageAttribution1Container"> - <div id="linkIcon"></div> - <div id="backgroundImageAttribution1"> - [[backgroundImageAttribution1_]] + <div id="contentContainer"> + <div id="content"> + <ntp-untrusted-iframe id="oneGoogleBar" path="one-google-bar" + hidden$="[[!oneGoogleBarLoaded_]]"> + </ntp-untrusted-iframe> + <ntp-logo id="logo" doodle-allowed$="[[doodleAllowed_]]" + single-colored$="[[singleColoredLogo_]]"> + </ntp-logo> + <ntp-fakebox id="fakebox" on-open-voice-search="onVoiceSearchClick_"> + </ntp-fakebox> + <ntp-most-visited id="mostVisited" dark$="[[theme_.isDark]]"> + </ntp-most-visited> + <dom-if if="[[showCustomizeDialog_]]" restamp> + <template> + <ntp-customize-dialog on-close="onCustomizeDialogClose_" + theme="[[theme_]]" + background-selection="{{backgroundSelection_}}"> + </ntp-customize-dialog> + </template> + </dom-if> + <dom-if if="[[showVoiceSearchOverlay_]]" restamp> + <template> + <ntp-voice-search-overlay on-close="onVoiceSearchOverlayClose_"> + </ntp-voice-search-overlay> + </template> + </dom-if> + <ntp-untrusted-iframe id="promo" path="promo" hidden$="[[!promoLoaded_]]"> + </ntp-untrusted-iframe> + <!-- cr-button is transparent on hover. This leads to incorrect results + when a custom background is set. Therefore, wrap customize button in + container to enfore solid background color. --> + <div id="customizeButtonContainer"> + <cr-button id="customizeButton" on-click="onCustomizeClick_"> + <div id="customizeIcon"></div> + $i18n{customizeButton} + </cr-button> + </div> + <a id="backgroundImageAttribution" + href="[[backgroundImageAttributionUrl_]]" + hidden="[[!backgroundImageAttribution1_]]"> + <div id="backgroundImageAttribution1Container"> + <div id="linkIcon"></div> + <div id="backgroundImageAttribution1"> + [[backgroundImageAttribution1_]] + </div> </div> - </div> - <div id="backgroundImageAttribution2" - hidden="[[!backgroundImageAttribution2_]]"> - [[backgroundImageAttribution2_]] - </div> - </a> + <div id="backgroundImageAttribution2" + hidden="[[!backgroundImageAttribution2_]]"> + [[backgroundImageAttribution2_]] + </div> + </a> + </div> </div> - <ntp-untrusted-iframe id="oneGoogleBar" path="one-google-bar" - hidden$="[[!oneGoogleBarLoaded_]]"> - </ntp-untrusted-iframe> </div>
diff --git a/chrome/browser/resources/settings/a11y_page/captions_subpage.html b/chrome/browser/resources/settings/a11y_page/captions_subpage.html index 7739e9b3..2490e13 100644 --- a/chrome/browser/resources/settings/a11y_page/captions_subpage.html +++ b/chrome/browser/resources/settings/a11y_page/captions_subpage.html
@@ -1,5 +1,7 @@ -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> +<link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> <link rel="import" href="../appearance_page/fonts_browser_proxy.html"> <link rel="import" href="../controls/settings_dropdown_menu.html"> @@ -11,7 +13,7 @@ <dom-module id="settings-captions"> <template> - <style include="settings-shared"> + <style include="cr-shared-style settings-shared"> .preview-box { all: initial; align-items: center; @@ -27,8 +29,8 @@ text-align: center; } </style> - <div class="settings-box first"> - <h2 class="start">$i18n{captionsPreview}</h2> + <div class="cr-row first"> + <h2>$i18n{captionsPreview}</h2> </div> <div class="preview-box"> <span style=" @@ -47,12 +49,12 @@ $i18n{quickBrownFox} </span> </div> - <div class="settings-box continuation"> + <div class="cr-row continuation"> <h2 class="start">$i18n{captionsSettings}</h2> </div> <div class="list-frame"> <div class="list-item underbar first"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="start cr-padded-text" aria-hidden="true"> $i18n{captionsTextSize} </div> <settings-dropdown-menu id="captionsTextSize" @@ -62,7 +64,7 @@ </settings-dropdown-menu> </div> <div class="list-item underbar"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="start cr-padded-text" aria-hidden="true"> $i18n{captionsTextFont} </div> <settings-dropdown-menu id="captionsTextFont" @@ -72,7 +74,7 @@ </settings-dropdown-menu> </div> <div class="list-item underbar"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="start cr-padded-text" aria-hidden="true"> $i18n{captionsTextColor} </div> <settings-dropdown-menu id="captionsTextColor" @@ -82,7 +84,7 @@ </settings-dropdown-menu> </div> <div class="list-item underbar"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="start cr-padded-text" aria-hidden="true"> $i18n{captionsTextOpacity} </div> <settings-dropdown-menu id="captionsTextOpacity" @@ -92,7 +94,7 @@ </settings-dropdown-menu> </div> <div class="list-item underbar"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="start cr-padded-text" aria-hidden="true"> $i18n{captionsTextShadow} </div> <settings-dropdown-menu id="captionsTextShadow" @@ -102,7 +104,7 @@ </settings-dropdown-menu> </div> <div class="list-item underbar"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="start cr-padded-text" aria-hidden="true"> $i18n{captionsBackgroundColor} </div> <settings-dropdown-menu id="captionsBackgroundColor" @@ -112,7 +114,7 @@ </settings-dropdown-menu> </div> <div class="list-item"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="start cr-padded-text" aria-hidden="true"> $i18n{captionsBackgroundOpacity} </div> <settings-dropdown-menu id="captionsBackgroundOpacity"
diff --git a/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html b/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html index f1c688c..889c4848 100644 --- a/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html +++ b/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html
@@ -1,8 +1,10 @@ <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/cr_elements/cr_slider/cr_slider.html"> +<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> <link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html"> <link rel="import" href="fonts_browser_proxy.html"> <link rel="import" href="../controls/settings_slider.html"> <link rel="import" href="../controls/settings_dropdown_menu.html"> @@ -11,7 +13,7 @@ <dom-module id="settings-appearance-fonts-page"> <template> - <style include="settings-shared"> + <style include="cr-shared-style settings-shared iron-flex"> #minimumSize { align-items: flex-end; display: flex; @@ -22,8 +24,8 @@ text-align: end; } </style> - <div class="settings-box first"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="cr-row first"> + <div class="flex cr-padded-text" aria-hidden="true"> $i18n{fontSize} </div> <settings-slider id="sizeSlider" @@ -32,8 +34,8 @@ label-min="$i18n{tiny}" label-max="$i18n{huge}"> </settings-slider> </div> - <div class="settings-box"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="cr-row"> + <div class="flex cr-padded-text" aria-hidden="true"> $i18n{minimumFont} </div> <div id="minimumSize"> @@ -54,7 +56,7 @@ </div> </div> </div> - <div class="settings-box" aria-hidden="true"> + <div class="cr-row" aria-hidden="true"> <h2>$i18n{standardFont}</h2> </div> <div class="list-frame"> @@ -64,7 +66,7 @@ menu-options="[[fontOptions_]]"> </settings-dropdown-menu> </div> - <div class="list-item settings-box-text" + <div class="list-item cr-padded-text" style=" font-size:[[prefs.webkit.webprefs.default_font_size.value]]px; font-family: @@ -75,7 +77,7 @@ </span> </div> </div> - <div class="settings-box" aria-hidden="true"> + <div class="cr-row" aria-hidden="true"> <h2>$i18n{serifFont}</h2> </div> <div class="list-frame"> @@ -85,7 +87,7 @@ menu-options="[[fontOptions_]]"> </settings-dropdown-menu> </div> - <div class="list-item settings-box-text" + <div class="list-item cr-padded-text" style=" font-size:[[prefs.webkit.webprefs.default_font_size.value]]px; font-family: @@ -96,7 +98,7 @@ </span> </div> </div> - <div class="settings-box" aria-hidden="true"> + <div class="cr-row" aria-hidden="true"> <h2>$i18n{sansSerifFont}</h2> </div> <div class="list-frame"> @@ -106,7 +108,7 @@ menu-options="[[fontOptions_]]"> </settings-dropdown-menu> </div> - <div class="list-item settings-box-text" + <div class="list-item cr-padded-text" style=" font-size:[[prefs.webkit.webprefs.default_font_size.value]]px; font-family: @@ -117,7 +119,7 @@ </span> </div> </div> - <div class="settings-box" aria-hidden="true"> + <div class="cr-row" aria-hidden="true"> <h2>$i18n{fixedWidthFont}</h2> </div> <div class="list-frame"> @@ -127,7 +129,7 @@ menu-options="[[fontOptions_]]"> </settings-dropdown-menu> </div> - <div class="list-item settings-box-text" + <div class="list-item cr-padded-text" style=" font-size: [[prefs.webkit.webprefs.default_fixed_font_size.value]]px;
diff --git a/chrome/browser/resources/settings/appearance_page/appearance_page.html b/chrome/browser/resources/settings/appearance_page/appearance_page.html index f740905d..114860bc 100644 --- a/chrome/browser/resources/settings/appearance_page/appearance_page.html +++ b/chrome/browser/resources/settings/appearance_page/appearance_page.html
@@ -2,6 +2,7 @@ <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> <link rel="import" href="chrome://resources/cr_elements/cr_link_row/cr_link_row.html"> +<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> <link rel="import" href="chrome://resources/html/assert.html"> <link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/cr_elements/md_select_css.html"> @@ -23,7 +24,7 @@ <dom-module id="settings-appearance-page"> <template> - <style include="settings-shared md-select iron-flex"> + <style include="cr-shared-style settings-shared md-select iron-flex"> /* Lines up with cr-input. */ #custom-input { /* (cr-input line-height + cr-input top/bottom padding) / 2 - @@ -132,8 +133,8 @@ inverted> </settings-toggle-button> </if> - <div class="settings-box"> - <div class="start settings-box-text" aria-hidden="true"> + <div class="cr-row"> + <div class="flex cr-padded-text" aria-hidden="true"> $i18n{fontSize} </div> <settings-dropdown-menu id="defaultFontSize" label="$i18n{fontSize}" @@ -145,8 +146,8 @@ label="$i18n{customizeFonts}" on-click="onCustomizeFontsTap_" role-description="$i18n{subpageArrowRoleDescription}"> </cr-link-row> - <div class="settings-box" hidden="[[!pageVisibility.pageZoom]]"> - <div id="pageZoom" class="start settings-box-text" aria-hidden="true"> + <div class="cr-row" hidden="[[!pageVisibility.pageZoom]]"> + <div id="pageZoom" class="flex cr-padded-text" aria-hidden="true"> $i18n{pageZoom} </div> <select id="zoomLevel" class="md-select" aria-labelledby="pageZoom"
diff --git a/chrome/browser/resources/settings/default_browser_page/default_browser_page.html b/chrome/browser/resources/settings/default_browser_page/default_browser_page.html index 8be48c8..63a67911 100644 --- a/chrome/browser/resources/settings/default_browser_page/default_browser_page.html +++ b/chrome/browser/resources/settings/default_browser_page/default_browser_page.html
@@ -1,18 +1,20 @@ <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> +<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html"> <link rel="import" href="default_browser_browser_proxy.html"> <link rel="import" href="../icons.html"> <link rel="import" href="../settings_shared_css.html"> <dom-module id="settings-default-browser-page"> <template> - <style include="settings-shared"> + <style include="cr-shared-style settings-shared iron-flex"> </style> <template is="dom-if" if="[[maySetDefaultBrowser_]]"> - <div class="settings-box first"> - <div class="start settings-box-text"> + <div class="cr-row first"> + <div class="flex cr-padded-text"> <div id="canBeDefaultBrowser">$i18n{defaultBrowser}</div> <div class="secondary">$i18n{defaultBrowserMakeDefault}</div> </div> @@ -23,16 +25,16 @@ </div> </template> <template is="dom-if" if="[[!maySetDefaultBrowser_]]"> - <div class="settings-box first"> - <div class="start settings-box-text" hidden$="[[!isDefault_]]" + <div class="cr-row first"> + <div class="flex cr-padded-text" hidden$="[[!isDefault_]]" id="isDefault"> $i18n{defaultBrowserDefault} </div> - <div class="start settings-box-text" hidden$="[[!isSecondaryInstall_]]" + <div class="flex cr-padded-text" hidden$="[[!isSecondaryInstall_]]" id="isSecondaryInstall"> $i18n{defaultBrowserSecondary} </div> - <div class="start settings-box-text" hidden$="[[!isUnknownError_]]" + <div class="cr-padded-text" hidden$="[[!isUnknownError_]]" id="isUnknownError"> $i18n{defaultBrowserError} </div>
diff --git a/chrome/browser/resources/settings/downloads_page/downloads_page.html b/chrome/browser/resources/settings/downloads_page/downloads_page.html index a26cbfdc..9e6b7d07 100644 --- a/chrome/browser/resources/settings/downloads_page/downloads_page.html +++ b/chrome/browser/resources/settings/downloads_page/downloads_page.html
@@ -3,6 +3,8 @@ <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> <link rel="import" href="chrome://resources/html/util.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> +<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html"> <link rel="import" href="../controls/controlled_button.html"> <link rel="import" href="../controls/settings_toggle_button.html"> <link rel="import" href="../prefs/prefs_behavior.html"> @@ -11,13 +13,13 @@ <dom-module id="settings-downloads-page"> <template> - <style include="settings-shared"> + <style include="cr-shared-style settings-shared iron-flex"> #defaultDownloadPath { word-break: break-word; } </style> - <div class="settings-box first two-line"> - <div class="start settings-box-text"> + <div class="cr-row first"> + <div class="flex cr-padded-text"> <div>$i18n{downloadLocation}</div> <div class="secondary" id="defaultDownloadPath"> <if expr="not chromeos"> @@ -42,8 +44,8 @@ label="$i18n{promptForDownload}"> </settings-toggle-button> <template is="dom-if" if="[[autoOpenDownloads_]]" restamp> - <div class="settings-box"> - <div class="start">$i18n{openFileTypesAutomatically}</div> + <div class="cr-row"> + <div class="flex">$i18n{openFileTypesAutomatically}</div> <div class="separator"></div> <cr-button id="resetAutoOpenFileTypes" on-click="onClearAutoOpenFileTypesTap_">
diff --git a/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html b/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html index 054fd8cd..ddd9308b 100644 --- a/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html +++ b/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html
@@ -17,7 +17,7 @@ <dom-module id="settings-edit-dictionary-page"> <template> - <style include="settings-shared"> + <style include="cr-shared-style settings-shared"> :host { display: flex; flex-direction: column; @@ -36,7 +36,7 @@ flex: 1; } </style> - <div class="settings-box first"> + <div class="cr-row first"> <iron-a11y-keys id="keys" keys="enter esc" on-keys-pressed="onKeysPress_"></iron-a11y-keys> <cr-input id="newWord" value="{{newWordValue_}}" @@ -50,7 +50,7 @@ </cr-button> </cr-input> </div> - <div class="settings-box continuation block"> + <div class="cr-row continuation"> <h2>$i18n{customDictionaryWords}</h2> </div> <div class="list-frame">
diff --git a/chrome/browser/resources/settings/people_page/people_page.html b/chrome/browser/resources/settings/people_page/people_page.html index 4f8581a..e4602eb0 100644 --- a/chrome/browser/resources/settings/people_page/people_page.html +++ b/chrome/browser/resources/settings/people_page/people_page.html
@@ -6,6 +6,7 @@ <link rel="import" href="chrome://resources/cr_elements/cr_toast/cr_toast.html"> <link rel="import" href="chrome://resources/cr_elements/icons.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_indicator.html"> +<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/html/assert.html"> <link rel="import" href="chrome://resources/html/cr.html"> @@ -36,7 +37,7 @@ <dom-module id="settings-people-page"> <template> - <style include="settings-shared iron-flex"> + <style include="cr-shared-style settings-shared iron-flex"> .sync-row { align-items: center; flex: auto; @@ -108,42 +109,38 @@ </template> <template is="dom-if" if="[[!shouldShowSyncAccountControl_( syncStatus.syncSystemEnabled)]]" restamp> - <div id="picture-subpage-trigger" class="settings-box first two-line"> - <template is="dom-if" if="[[syncStatus]]"> - <div id="profile-icon" on-click="onProfileTap_" + <div id="profile-row" class="cr-row first two-line" actionable$="[[isProfileActionable_]]" + on-click="onProfileTap_"> + <template is="dom-if" if="[[syncStatus]]"> + <div id="profile-icon" style="background-image: [[getIconImageSet_( profileIconUrl_)]]"> </div> - <div class="middle two-line no-min-width" - id="profile-row" - on-click="onProfileTap_" - actionable$="[[isProfileActionable_]]"> - <div class="flex text-elide settings-box-text"> - <span id="profile-name">[[profileName_]]</span> + <div class="flex cr-row-gap cr-padded-text text-elide"> + <span id="profile-name">[[profileName_]]</span> <!-- When the user is signed-in, the settings-sync-account-control is always - shown on non-ChromeOS platforms --> +shown on non-ChromeOS platforms --> <if expr="chromeos"> - <div class="secondary" hidden="[[!syncStatus.signedIn]]"> - [[syncStatus.signedInUsername]] - </div> -</if> + <div class="secondary" hidden="[[!syncStatus.signedIn]]"> + [[syncStatus.signedInUsername]] </div> -<if expr="not chromeos"> - <cr-icon-button class="subpage-arrow" - aria-label="$i18n{editPerson}" - aria-describedby="profile-name" - aria-roledescription="$i18n{subpageArrowRoleDescription}"> - </cr-icon-button> -</if> -<if expr="chromeos"> - <cr-icon-button class="icon-external" - id="profile-subpage-arrow" - hidden="[[!isProfileActionable_]]" - aria-label="$i18n{accountManagerSubMenuLabel}" - aria-describedby="profile-name"></cr-icon-button> </if> </div> +<if expr="not chromeos"> + <cr-icon-button class="subpage-arrow" + aria-label="$i18n{editPerson}" + aria-describedby="profile-name" + aria-roledescription="$i18n{subpageArrowRoleDescription}"> + </cr-icon-button> +</if> +<if expr="chromeos"> + <cr-icon-button class="icon-external" + id="profile-subpage-arrow" + hidden="[[!isProfileActionable_]]" + aria-label="$i18n{accountManagerSubMenuLabel}" + aria-describedby="profile-name"></cr-icon-button> +</if> </template> </div> </template> <!-- if="[[!shouldShowSyncAccountControl_()]]" --> @@ -162,9 +159,9 @@ hidden="[[!shouldShowGoogleAccount_]]" on-click="openGoogleAccount_" external></cr-link-row> - <div class="settings-box" id="edit-profile" on-click="onProfileTap_" + <div class="cr-row" id="edit-profile" on-click="onProfileTap_" actionable> - <div class="start settings-box-text"> + <div class="flex cr-padded-text"> $i18n{profileNameAndPicture} </div> <cr-icon-button class="subpage-arrow" aria-label="$i18n{editPerson}"
diff --git a/chrome/browser/resources/settings/people_page/people_page.js b/chrome/browser/resources/settings/people_page/people_page.js index 7c74fd0..3621ec030 100644 --- a/chrome/browser/resources/settings/people_page/people_page.js +++ b/chrome/browser/resources/settings/people_page/people_page.js
@@ -127,7 +127,7 @@ map.set( settings.routes.MANAGE_PROFILE.path, this.signinAllowed_ ? '#edit-profile .subpage-arrow' : - '#picture-subpage-trigger .subpage-arrow'); + '#profile-row .subpage-arrow'); } // </if> return map; @@ -204,7 +204,7 @@ */ getEditPersonAssocControl_() { return this.signinAllowed_ ? assert(this.$$('#edit-profile')) : - assert(this.$$('#picture-subpage-trigger')); + assert(this.$$('#profile-row')); }, /**
diff --git a/chrome/browser/resources/settings/system_page/system_page.html b/chrome/browser/resources/settings/system_page/system_page.html index 6bfecea..2f625157 100644 --- a/chrome/browser/resources/settings/system_page/system_page.html +++ b/chrome/browser/resources/settings/system_page/system_page.html
@@ -3,6 +3,7 @@ <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> <link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html"> <link rel="import" href="../controls/extension_controlled_indicator.html"> <link rel="import" href="../controls/settings_toggle_button.html"> <link rel="import" href="../lifetime_browser_proxy.html"> @@ -12,7 +13,7 @@ <dom-module id="settings-system-page"> <template> - <style include="settings-shared"></style> + <style include="cr-shared-style settings-shared iron-flex"></style> <if expr="not is_macosx"> <settings-toggle-button pref="{{prefs.background_mode.enabled}}" @@ -30,16 +31,16 @@ </template> </settings-toggle-button> - <div id="proxy" class="settings-box" on-click="onProxyTap_" + <div id="proxy" class="cr-row" on-click="onProxyTap_" actionable$="[[isProxyDefault_]]"> - <div class="start settings-box-text" hidden$="[[!isProxyDefault_]]"> + <div class="flex cr-row-text" hidden$="[[!isProxyDefault_]]"> $i18n{proxySettingsLabel} </div> - <div class="start settings-box-text" + <div class="flex cr-row-text" hidden$="[[!prefs.proxy.extensionId]]"> $i18n{proxySettingsExtensionLabel} </div> - <div class="start settings-box-text" + <div class="flex cr-row-text" hidden$="[[!isProxyEnforcedByPolicy_]]"> $i18n{proxySettingsPolicyLabel} </div> @@ -53,8 +54,8 @@ </template> </div> <template is="dom-if" if="[[prefs.proxy.extensionId]]"> - <div class="settings-box continuation"> - <extension-controlled-indicator class="start" + <div class="cr-row continuation"> + <extension-controlled-indicator class="flex" extension-id="[[prefs.proxy.extensionId]]" extension-name="[[prefs.proxy.controlledByName]]" extension-can-be-disabled="[[prefs.proxy.extensionCanBeDisabled]]"
diff --git a/chrome/browser/ssl/ssl_blocking_page_unittest.cc b/chrome/browser/ssl/ssl_blocking_page_unittest.cc deleted file mode 100644 index 5dfe5e4edf..0000000 --- a/chrome/browser/ssl/ssl_blocking_page_unittest.cc +++ /dev/null
@@ -1,84 +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/browser/ssl/chrome_security_blocking_page_factory.h" - -#include "base/bind.h" -#include "base/strings/string_number_conversions.h" -#include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" -#include "chrome/browser/safe_browsing/test_extension_event_observer.h" -#include "chrome/common/extensions/api/safe_browsing_private.h" -#include "chrome/test/base/chrome_render_view_host_test_harness.h" -#include "net/test/cert_test_util.h" -#include "net/test/test_data_directory.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace OnSecurityInterstitialShown = - extensions::api::safe_browsing_private::OnSecurityInterstitialShown; -namespace OnSecurityInterstitialProceeded = - extensions::api::safe_browsing_private::OnSecurityInterstitialProceeded; - -class SSLBlockingPageTest : public ChromeRenderViewHostTestHarness { - public: - SSLBlockingPageTest() {} - - void SetUp() override { - ChromeRenderViewHostTestHarness::SetUp(); - test_event_router_ = - extensions::CreateAndUseTestEventRouter(browser_context()); - extensions::SafeBrowsingPrivateEventRouterFactory::GetInstance() - ->SetTestingFactory( - browser_context(), - base::BindRepeating( - &safe_browsing::BuildSafeBrowsingPrivateEventRouter)); - } - - extensions::TestEventRouter* test_event_router() { - return test_event_router_; - } - - private: - extensions::TestEventRouter* test_event_router_; -}; - -// TODO(1026557): This test currently fails, and it looks like it also tests -// the pre-committed interstitials flow. It needs to be updated, made to pass, -// and potentially componentized to live next to SSLBlockingPage. -TEST_F(SSLBlockingPageTest, - DISABLED_VerifySecurityInterstitialExtensionEvents) { - safe_browsing::TestExtensionEventObserver observer(test_event_router()); - - // Sets up elements needed for a SSL blcocking page. - GURL request_url("https://error.example.test"); - net::SSLInfo ssl_info; - ssl_info.cert = - net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); - ssl_info.cert_status = net::CERT_STATUS_DATE_INVALID; - - // Simulates the showing of a SSL blocking page. - ChromeSecurityBlockingPageFactory blocking_page_factory; - std::unique_ptr<SSLBlockingPage> blocking_page = - blocking_page_factory.CreateSSLPage( - web_contents(), net::ERR_CERT_DATE_INVALID, ssl_info, request_url, - /*options_mask=*/0, base::Time::NowFromSystemTime(), - /*support_url=*/GURL(), - /*ssl_cert_reporter=*/nullptr); - blocking_page->DontCreateViewForTesting(); - blocking_page->Show(); - - // Verifies that security interstitial shown event is observed. - observer.VerifyLatestSecurityInterstitialEvent( - OnSecurityInterstitialShown::kEventName, request_url, "SSL_ERROR", "", - net::ERR_CERT_DATE_INVALID); - - // Simulates a proceed action. - blocking_page->CommandReceived( - base::NumberToString(security_interstitials::CMD_PROCEED)); - - // Verifies that security interstitial proceeded event is observed. - observer.VerifyLatestSecurityInterstitialEvent( - OnSecurityInterstitialProceeded::kEventName, request_url, "SSL_ERROR", "", - net::ERR_CERT_DATE_INVALID); -}
diff --git a/chrome/browser/status_icons/status_icon_menu_model.cc b/chrome/browser/status_icons/status_icon_menu_model.cc index 35d5182..bc3cb821 100644 --- a/chrome/browser/status_icons/status_icon_menu_model.cc +++ b/chrome/browser/status_icons/status_icon_menu_model.cc
@@ -122,14 +122,11 @@ return base::string16(); } -bool StatusIconMenuModel::GetIconForCommandId(int command_id, - gfx::Image* image_skia) const { +ui::ImageModel StatusIconMenuModel::GetIconForCommandId(int command_id) const { auto iter = item_states_.find(command_id); - if (iter != item_states_.end() && !iter->second.icon.IsEmpty()) { - *image_skia = iter->second.icon; - return true; - } - return false; + if (iter != item_states_.end() && !iter->second.icon.IsEmpty()) + return ui::ImageModel::FromImage(iter->second.icon); + return ui::ImageModel(); } ////////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/status_icons/status_icon_menu_model.h b/chrome/browser/status_icons/status_icon_menu_model.h index f40a33f7..c69344a 100644 --- a/chrome/browser/status_icons/status_icon_menu_model.h +++ b/chrome/browser/status_icons/status_icon_menu_model.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" +#include "ui/base/models/image_model.h" #include "ui/base/models/simple_menu_model.h" namespace gfx { @@ -77,7 +78,7 @@ ui::Accelerator* accelerator) const override; bool IsItemForCommandIdDynamic(int command_id) const override; base::string16 GetLabelForCommandId(int command_id) const override; - bool GetIconForCommandId(int command_id, gfx::Image* icon) const override; + ui::ImageModel GetIconForCommandId(int command_id) const override; protected: // Overriden from ui::SimpleMenuModel:
diff --git a/chrome/browser/status_icons/status_icon_menu_model_unittest.cc b/chrome/browser/status_icons/status_icon_menu_model_unittest.cc index a258d03..9527141 100644 --- a/chrome/browser/status_icons/status_icon_menu_model_unittest.cc +++ b/chrome/browser/status_icons/status_icon_menu_model_unittest.cc
@@ -11,6 +11,7 @@ #include "chrome/browser/status_icons/status_tray.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/accelerators/accelerator.h" +#include "ui/base/models/image_model.h" #include "ui/gfx/image/image.h" #include "ui/gfx/image/image_unittest_util.h" @@ -20,26 +21,21 @@ public StatusIconMenuModel::Observer { public: void SetUp() override { - menu_.reset(new StatusIconMenuModel(NULL)); + menu_ = std::make_unique<StatusIconMenuModel>(nullptr); menu_->AddObserver(this); - changed_count_ = 0; } void TearDown() override { menu_->RemoveObserver(this); } - virtual int changed_count() { - return changed_count_; - } + int changed_count() const { return changed_count_; } - StatusIconMenuModel* menu_model() { - return menu_.get(); - } + StatusIconMenuModel* menu_model() { return menu_.get(); } private: void OnMenuStateChanged() override { ++changed_count_; } std::unique_ptr<StatusIconMenuModel> menu_; - int changed_count_; + int changed_count_ = 0; }; TEST_F(StatusIconMenuModelTest, ToggleBooleanProperties) { @@ -71,10 +67,10 @@ ui::Accelerator test_accel(ui::VKEY_A, ui::EF_NONE); gfx::Image test_image1 = gfx::test::CreateImage(16, 16); ui::Accelerator accel_arg; - gfx::Image image_arg; + ui::ImageModel image_arg; EXPECT_FALSE(menu_model()->GetAcceleratorForCommandId(0, &accel_arg)); - EXPECT_FALSE(menu_model()->GetIconForCommandId(0, &image_arg)); + EXPECT_TRUE(menu_model()->GetIconForCommandId(0).IsEmpty()); EXPECT_FALSE(menu_model()->IsItemForCommandIdDynamic(0)); // Set the accelerator and label for the first menu item. @@ -92,13 +88,15 @@ // Try setting icon image and changing it. menu_model()->ChangeIconForCommandId(1, test_image1); - EXPECT_TRUE(menu_model()->GetIconForCommandId(1, &image_arg)); - EXPECT_EQ(image_arg.ToImageSkia(), test_image1.ToImageSkia()); + image_arg = menu_model()->GetIconForCommandId(1); + EXPECT_FALSE(image_arg.IsEmpty()); + EXPECT_TRUE(image_arg.IsImage()); + EXPECT_EQ(image_arg.GetImage().ToImageSkia(), test_image1.ToImageSkia()); // Ensure changes to one menu item does not affect the other menu item. EXPECT_FALSE(menu_model()->GetAcceleratorForCommandId(1, &accel_arg)); EXPECT_EQ(base::string16(), menu_model()->GetLabelForCommandId(1)); - EXPECT_FALSE(menu_model()->GetIconForCommandId(0, &image_arg)); + EXPECT_TRUE(menu_model()->GetIconForCommandId(0).IsEmpty()); // Menu state should have changed 6 times in this test. EXPECT_EQ(6, changed_count());
diff --git a/chrome/browser/subresource_filter/ad_tagging_browsertest.cc b/chrome/browser/subresource_filter/ad_tagging_browsertest.cc index eb843b3..848f60fb 100644 --- a/chrome/browser/subresource_filter/ad_tagging_browsertest.cc +++ b/chrome/browser/subresource_filter/ad_tagging_browsertest.cc
@@ -526,9 +526,10 @@ // Test that the children of a frame with its initial load aborted due to a // window.stop are reported correctly as vanilla or ad frames. +// This test is flaky. See crbug.com/1069346. IN_PROC_BROWSER_TEST_F( AdTaggingBrowserTest, - ChildrenOfFrameWithWindowStopAbortedLoad_StillCorrectlyTagged) { + DISABLED_ChildrenOfFrameWithWindowStopAbortedLoad_StillCorrectlyTagged) { TestSubresourceFilterObserver observer(web_contents()); // Main frame.
diff --git a/chrome/browser/supervised_user/supervised_user_service.cc b/chrome/browser/supervised_user/supervised_user_service.cc index d5c4e9574..fa92ed2c 100644 --- a/chrome/browser/supervised_user/supervised_user_service.cc +++ b/chrome/browser/supervised_user/supervised_user_service.cc
@@ -129,7 +129,7 @@ prefs::kSupervisedUserExtensionsMayRequestPermissions, false); registry->RegisterDictionaryPref( prefs::kSupervisedUserApprovedExtensions, - user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); #endif registry->RegisterDictionaryPref(prefs::kSupervisedUserManualHosts); registry->RegisterDictionaryPref(prefs::kSupervisedUserManualURLs);
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 cc89b4f..abccc6b 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Skakel sinkronisering aan om jou boekmerke op al jou toestelle te kry</translation> <translation id="8110087112193408731">Wys jou Chrome-aktiwiteit in Digitale Welstand?</translation> +<translation id="8115259494083109761">Laat Chrome jou kamera gebruik om 'n QR-kode te skandeer</translation> <translation id="8116925261070264013">Gedemp</translation> <translation id="8127542551745560481">Wysig tuisblad</translation> <translation id="813082847718468539">Bekyk werfinligting</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 7320ac6..e6a380d 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
@@ -254,7 +254,7 @@ <translation id="2870560284913253234">الموقع</translation> <translation id="2874939134665556319">المقطع الصوتي السابق</translation> <translation id="2876369937070532032">يتم إرسال عناوين URL لبعض الصفحات التي تزورها إلى Google، عندما يكون أمانك في خطر</translation> -<translation id="2888126860611144412">لمحة عامة عن Chrome</translation> +<translation id="2888126860611144412">لمحة عن Chrome</translation> <translation id="2891154217021530873">إيقاف تحميل الصفحة</translation> <translation id="2893180576842394309">قد تستخدم Google سجلّك لتخصيص البحث وخدمات Google الأخرى.</translation> <translation id="2898264748040935573">تعديل كلمة المرور المخزنة</translation> @@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">للحصول على الإشارات المرجعية على جميع أجهزتك، يُرجى تفعيل المزامنة.</translation> <translation id="8110087112193408731">هل تريد عرض نشاط Chrome في الرفاهية الرقمية؟</translation> +<translation id="8115259494083109761">لمسح رمز استجابة سريعة ضوئيًا، يُرجى السماح لمتصفّح Chrome باستخدام الكاميرا.</translation> <translation id="8116925261070264013">مواقع الويب التي تم كتم الصوت فيها</translation> <translation id="8127542551745560481">تعديل الصفحة الرئيسية</translation> <translation id="813082847718468539">عرض معلومات الموقع</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 fca2359a..e1f1c22 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Da biste imali svoje oznake na svim svojim uređajima, uključite sinhronizaciju</translation> <translation id="8110087112193408731">Prikazati aktivnosti Chromea u Digitalnom blagostanju?</translation> +<translation id="8115259494083109761">Da skenirate QR kôd, dozvolite Chromeu korištenje kamere</translation> <translation id="8116925261070264013">Isključen zvuk</translation> <translation id="8127542551745560481">Uredite početnu stranicu</translation> <translation id="813082847718468539">Prikaz informacija o web lokaciji</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 d0c8276..31c536c 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Per accedir a les adreces d'interès des de tots els dispositius, activa la sincronització</translation> <translation id="8110087112193408731">Vols veure l'activitat de Chrome a Benestar digital?</translation> +<translation id="8115259494083109761">Per escanejar un codi QR, permet que Chrome utilitzi la càmera</translation> <translation id="8116925261070264013">Silenciats</translation> <translation id="8127542551745560481">Edita la pàgina d'inici</translation> <translation id="813082847718468539">Mostra la informació del lloc web</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 04bc7086..e32d816 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Chcete-li mít záložky ve všech zařízeních, zapněte synchronizaci</translation> <translation id="8110087112193408731">Zobrazovat vaši aktivitu v Chromu v digitální rovnováze?</translation> +<translation id="8115259494083109761">Chcete-li naskenovat QR kód, umožněte Chromu používat fotoaparát</translation> <translation id="8116925261070264013">Ztlumeno</translation> <translation id="8127542551745560481">Upravit domovskou stránku</translation> <translation id="813082847718468539">Zobrazit informace o stránkách</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 887139d4..fb56f2db 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Aktivér synkronisering for at få vist dine bogmærker på alle dine enheder</translation> <translation id="8110087112193408731">Vil du se din Chrome-aktivitet i Digital balance?</translation> +<translation id="8115259494083109761">Hvis du vil scanne en QR-kode, skal du give Chrome lov til at bruge dit kamera</translation> <translation id="8116925261070264013">Websites, hvor lyden er slået fra</translation> <translation id="8127542551745560481">Rediger startside</translation> <translation id="813082847718468539">Se websiteoplysninger</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 ca5e443..b66d6a8 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Aktivieren Sie die Synchronisierung, um Ihre Lesezeichen auf allen Ihren Geräten zu sehen</translation> <translation id="8110087112193408731">Ihre Chrome-Aktivitäten in Digital Wellbeing anzeigen?</translation> +<translation id="8115259494083109761">Wenn Sie einen QR-Code scannen möchten, erlauben Sie Chrome, Ihre Kamera zu verwenden</translation> <translation id="8116925261070264013">Stummgeschaltet</translation> <translation id="8127542551745560481">Startseite bearbeiten</translation> <translation id="813082847718468539">Website-Informationen anzeigen</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 302da91..8a7638b 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">To get your bookmarks on all your devices, turn on sync</translation> <translation id="8110087112193408731">Show your Chrome activity in Digital Wellbeing?</translation> +<translation id="8115259494083109761">To scan a QR code, let Chrome use your camera</translation> <translation id="8116925261070264013">Muted</translation> <translation id="8127542551745560481">Edit homepage</translation> <translation id="813082847718468539">View site information</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 a4294d81..f4acd573 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
@@ -756,7 +756,7 @@ <translation id="6538442820324228105"><ph name="GBS" /> GB deskargatu dira</translation> <translation id="6539092367496845964">Arazoren bat izan da. Saiatu berriro geroago.</translation> <translation id="6545017243486555795">Garbitu datu guztiak</translation> -<translation id="6545864417968258051">Bluetooth bidezko gailuak bilatzea</translation> +<translation id="6545864417968258051">Bluetooth bidezko gailuen bilaketa</translation> <translation id="6560414384669816528">Erabili Sogou bilatzaile gisa</translation> <translation id="656065428026159829">Ikusi gehiago</translation> <translation id="6561560012278703671">Erabili mezularitza isilagoa (jakinarazpenak blokeatzen ditu arretarik galaraz ez diezazuten)</translation> @@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Laster-markak gailu guztietan eskura izateko, aktibatu sinkronizazioa</translation> <translation id="8110087112193408731">Chrome-ko jarduerak Ongizate digitala programan agertzea nahi duzu?</translation> +<translation id="8115259494083109761">QR kodeak eskaneatzeko, eman Chrome-ri kamera erabiltzeko baimena</translation> <translation id="8116925261070264013">Audioa desaktibatuta</translation> <translation id="8127542551745560481">Editatu hasierako pantaila</translation> <translation id="813082847718468539">Ikusi webgunearen informazioa</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 78dc126b..464524c 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Ota synkronointi käyttöön, niin voit käyttää kirjanmerkkejä kaikilla laitteillasi</translation> <translation id="8110087112193408731">Näytetäänkö Chrome-toimintasi Digitaalisessa hyvinvoinnissa?</translation> +<translation id="8115259494083109761">Jos haluat lukea QR-koodin, anna Chromen käyttää kameraa.</translation> <translation id="8116925261070264013">Mykistetty</translation> <translation id="8127542551745560481">Muokkaa etusivua</translation> <translation id="813082847718468539">Näytä sivuston tiedot</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 cecd224..9efb7b0 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Pour synchroniser vos favoris sur tous vos appareils, activez la synchronisation</translation> <translation id="8110087112193408731">Afficher votre activité Chrome dans Bien-être numérique?</translation> +<translation id="8115259494083109761">Pour numériser un code QR, autorisez Chrome à utiliser votre appareil photo</translation> <translation id="8116925261070264013">Désactivés</translation> <translation id="8127542551745560481">Modifier la page d'accueil</translation> <translation id="813082847718468539">Afficher l'information sur le site</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 7f635ee..ae43677 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Activa a sincronización para ter os marcadores en todos os teus dispositivos</translation> <translation id="8110087112193408731">Queres mostrar a túa actividade de Chrome en Benestar dixital?</translation> +<translation id="8115259494083109761">Para escanear un código QR, permite que Chrome utilice a cámara</translation> <translation id="8116925261070264013">Silenciados</translation> <translation id="8127542551745560481">Editar páxina de inicio</translation> <translation id="813082847718468539">Consulta a información do sitio</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 41634ea..66bd2ec1 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Ha az összes eszközén szeretné elérni könyvjelzőit, kapcsolja be a szinkronizálást</translation> <translation id="8110087112193408731">Chrome-beli tevékenysége megjelenjen a digitális jóllét funkcióban?</translation> +<translation id="8115259494083109761">QR-kód beolvasásához engedélyezze a kamera használatát a Chrome számára</translation> <translation id="8116925261070264013">Némítva</translation> <translation id="8127542551745560481">Kezdőoldal szerkesztése</translation> <translation id="813082847718468539">Az oldalinformációk megtekintése</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 dbf2f940..9263f2a 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Ձեր ներդիրները բոլոր սարքերում օգտագործելու համար միացրեք համաժամացումը</translation> <translation id="8110087112193408731">Ցուցադրե՞լ Chrome-ի պատմությունը Թվային բարեկեցության մեջ</translation> +<translation id="8115259494083109761">QR կոդը սկանավորելու համար թույլ տվեք Chrome-ին օգտագործել ձեր տեսախցիկը</translation> <translation id="8116925261070264013">Անջատած ձայնով կայքեր</translation> <translation id="8127542551745560481">Փոփոխել գլխավոր էջը</translation> <translation id="813082847718468539">Դիտել կայքի տեղեկությունները</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 8af817b..a2fb6a3 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Kveiktu á samstillingu til að fá aðgang að bókamerkjunum þínum í öllum tækjum</translation> <translation id="8110087112193408731">Viltu sjá það sem þú gerir í Chrome í stafrænni vellíðan?</translation> +<translation id="8115259494083109761">Til að skanna QR-kóða skaltu leyfa Chrome að nota myndavélina</translation> <translation id="8116925261070264013">Þögguð</translation> <translation id="8127542551745560481">Breyta heimasíðu</translation> <translation id="813082847718468539">Skoða upplýsingar um vefsvæði</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 7e77fa9..b464f50 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">כדי שהסימניות יופיעו בכל המכשירים שלך, יש להפעיל את הסנכרון</translation> <translation id="8110087112193408731">להציג את הפעילות שלך ב-Chrome ב'שימוש חכם בדיגיטל'?</translation> +<translation id="8115259494083109761">כדי לסרוק קוד QR יש להתיר ל-Chrome להשתמש במצלמה</translation> <translation id="8116925261070264013">מושתקים</translation> <translation id="8127542551745560481">עריכת דף הבית</translation> <translation id="813082847718468539">הצג נתוני אתר</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 d2adb02..4fe96a64 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">ເພື່ອໃຊ້ບຸກມາກຂອງທ່ານຢູ່ໃນທຸກອຸປະກອນຂອງທ່ານ, ກະລຸນາເປີດການຊິ້ງຂໍ້ມູນກ່ອນ</translation> <translation id="8110087112193408731">ສະແດງການເຄື່ອນໄຫວໃນ Chrome ຂອງທ່ານຢູ່ໃນ Digital Wellbeing ບໍ?</translation> +<translation id="8115259494083109761">ເພື່ອສະແກນລະຫັດ QR, ກະລຸນາອະນຸຍາດໃຫ້ Chrome ໃຊ້ກ້ອງຂອງທ່ານ</translation> <translation id="8116925261070264013">ປິດສຽງແລ້ວ</translation> <translation id="8127542551745560481">ແກ້ໄຂໜ້າຫຼັກ</translation> <translation id="813082847718468539">ເບິ່ງຂໍ້ມູນເວັບໄຊທ໌</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 5a10a77..e662def6 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Lai grāmatzīmes būtu pieejamas visās jūsu ierīcēs, ieslēdziet sinhronizāciju.</translation> <translation id="8110087112193408731">Vai rādīt jūsu Chrome darbības Digitālajā labjutībā?</translation> +<translation id="8115259494083109761">Lai skenētu QR kodu, atļaujiet pārlūkprogrammai Chrome izmantot jūsu kameru</translation> <translation id="8116925261070264013">Izslēgta skaņa</translation> <translation id="8127542551745560481">Rediģēt sākumlapu</translation> <translation id="813082847718468539">Skatīt informāciju par vietni</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 7459efb..6391980 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">तुमच्या सर्व डिव्हाइसवरील तुमचे बुकमार्क मिळवण्यासाठी, सिंक सुरू करा</translation> <translation id="8110087112193408731">डिजिटल संतुलन मध्ये तुमची Chrome ॲक्टिव्हिटी दाखवायची का?</translation> +<translation id="8115259494083109761">QR कोड स्कॅन करण्यासाठी, Chrome ला तुमचा कॅमेरा वापरू द्या</translation> <translation id="8116925261070264013">म्यूट केले</translation> <translation id="8127542551745560481">होमपेज संपादित करा</translation> <translation id="813082847718468539">साइटची माहिती पहा</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 a6e9ec8..165935d 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Hidupkan penyegerakan untuk mendapatkan penanda halaman pada semua peranti anda</translation> <translation id="8110087112193408731">Tunjukkan aktiviti Chrome anda dalam Kesejahteraan Digital?</translation> +<translation id="8115259494083109761">Untuk mengimbas kod QR, benarkan Chrome menggunakan kamera anda</translation> <translation id="8116925261070264013">Diredam</translation> <translation id="8127542551745560481">Edit halaman utama</translation> <translation id="813082847718468539">Lihat maklumat tapak</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 b903381..e2845a76 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
@@ -964,6 +964,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">သင်၏ဝဘ်လိပ်စာများကို စက်အားလုံးတွင် ရယူနိုင်ရန် စင့်ခ်လုပ်ခြင်းကို ဖွင့်ပါ</translation> <translation id="8110087112193408731">'ဒစ်ဂျစ်တယ် အာရောဂျံ' အတွင်း သင်၏ Chrome လုပ်ဆောင်ချက်ကို ပြစေလိုပါသလား။</translation> +<translation id="8115259494083109761">QR ကုဒ်ကို စကင်ဖတ်ရန် Chrome အား သင့်ကင်မရာ သုံးခွင့်ပြုပါ</translation> <translation id="8116925261070264013">ဖျောက်ထားသည်</translation> <translation id="8127542551745560481">ပင်မစာမျက်နှာအား တည်းဖြတ်ရန်</translation> <translation id="813082847718468539">ဆိုက် အချက်အလက်များကို ကြည့်ရန်</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 451de8b76..43215dc 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Schakel synchronisatie in om op al je apparaten toegang tot je bladwijzers te hebben</translation> <translation id="8110087112193408731">Je Chrome-activiteit weergeven in Digitaal welzijn?</translation> +<translation id="8115259494083109761">Als je een QR-code wilt scannen, moet je Chrome toestemming geven om je camera te gebruiken</translation> <translation id="8116925261070264013">Gedempt</translation> <translation id="8127542551745560481">Homepage bewerken</translation> <translation id="813082847718468539">Sitegegevens bekijken</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 2b72fa8..8152d099 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">For å få bokmerkene dine på alle enhetene dine, slå på synkronisering</translation> <translation id="8110087112193408731">Vil du vise Chrome-aktiviteten din i Digital balanse?</translation> +<translation id="8115259494083109761">For å skanne QR-koder, la Chrome bruke kameraet</translation> <translation id="8116925261070264013">Kuttet lyd</translation> <translation id="8127542551745560481">Endre startsiden</translation> <translation id="813082847718468539">Vis nettstedsinformasjon</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 b1778b1..4ab3277 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Aby korzystać ze swoich zakładek na wszystkich urządzeniach, włącz synchronizację</translation> <translation id="8110087112193408731">Pokazywać Twoją aktywność w Chrome w Cyfrowej równowadze?</translation> +<translation id="8115259494083109761">Aby zeskanować kod QR, zezwól Chrome na używanie aparatu</translation> <translation id="8116925261070264013">Wyciszone</translation> <translation id="8127542551745560481">Edytuj stronę główną</translation> <translation id="813082847718468539">Wyświetl informacje o witrynie</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 ecd18aa..52c916be 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
@@ -966,6 +966,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Para ter seus favoritos em todos os seus dispositivos, ative a sincronização</translation> <translation id="8110087112193408731">Mostrar sua atividade do Chrome no Bem-estar digital?</translation> +<translation id="8115259494083109761">Para ler um código QR, permita que o Chrome use sua câmera</translation> <translation id="8116925261070264013">Com som desativado</translation> <translation id="8127542551745560481">Editar página inicial</translation> <translation id="813082847718468539">Visualizar informações do site</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 94d45a1..9979d148 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Para obter os seus marcadores em todos os dispositivos, ative a sincronização.</translation> <translation id="8110087112193408731">Pretende apresentar a sua atividade do Chrome no Bem-estar digital?</translation> +<translation id="8115259494083109761">Para ler um código QR, permita que o Chrome utilize a sua câmara.</translation> <translation id="8116925261070264013">Com som desativado</translation> <translation id="8127542551745560481">Editar página inicial</translation> <translation id="813082847718468539">Ver informações do Website</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 15671d9..821627d7 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Pentru a accesa marcajele pe toate dispozitivele, activează sincronizarea</translation> <translation id="8110087112193408731">Afișezi activitatea din Chrome în Bunăstare digitală?</translation> +<translation id="8115259494083109761">Pentru a scana un cod QR, permite ca Chrome să utilizeze camera</translation> <translation id="8116925261070264013">Cu sunetul dezactivat</translation> <translation id="8127542551745560481">Editează pagina de pornire</translation> <translation id="813082847718468539">Afișează informațiile privind site-ul</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 2d98180..8bfde01 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Чтобы получить доступ к закладкам на всех устройствах, включите синхронизацию.</translation> <translation id="8110087112193408731">Показать данные о ваших действиях в Chrome в сервисе "Цифровое благополучие"?</translation> +<translation id="8115259494083109761">Чтобы отсканировать QR-код, разрешите Chrome доступ к камере.</translation> <translation id="8116925261070264013">Сайты с отключенным звуком</translation> <translation id="8127542551745560481">Изменить главную страницу</translation> <translation id="813082847718468539">Сведения о сайте</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 df43456..8bf06ae 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">ඔබේ සියලු උපාංග මත ඇති ඔබේ පිටුසන් ලබා ගැනීමට, සමමුහුර්තය ක්රියාත්මක කරන්න</translation> <translation id="8110087112193408731">ඩිජිටල් සුවතාව තුළ ඔබේ Chrome ක්රියාකාරකම් පෙන්වන්න ද?</translation> +<translation id="8115259494083109761">QR කේතයක් ස්කෑන් කිරීමට, Chrome හට ඔබේ කැමරාව භාවිත කිරීමට ඉඩ දෙන්න</translation> <translation id="8116925261070264013">නිහඬයි</translation> <translation id="8127542551745560481">මුල් පිටුව සංස්කරණ කරන්න</translation> <translation id="813082847718468539">අඩවි තොරතුරු පෙන්වන්න</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 b04900c..9de3458 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /><ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Če želite dostopati do zaznamkov v vseh napravah, vklopite sinhronizacijo</translation> <translation id="8110087112193408731">Ali želite svojo dejavnost v Chromu prikazati v Digitalni dobrobiti?</translation> +<translation id="8115259494083109761">Če želite optično prebrati kodo QR, Chromu omogočite uporabo kamere</translation> <translation id="8116925261070264013">Prezrto</translation> <translation id="8127542551745560481">Urejanje domače strani</translation> <translation id="813082847718468539">Ogled podatkov o mestu</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 3cb9590f..2c536cd 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Aktivera synkronisering om du vill ha dina bokmärken tillgängliga på alla enheter</translation> <translation id="8110087112193408731">Vill du att din aktivitet i Chrome ska visas i Digitalt välmående?</translation> +<translation id="8115259494083109761">Tillåt att Chrome använder kameran om du vill skanna en QR-kod.</translation> <translation id="8116925261070264013">Ljudet avstängt</translation> <translation id="8127542551745560481">Redigera startsida</translation> <translation id="813082847718468539">Visa information om webbplatsen</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 33482716..bf99ea5 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Washa kipengele cha usawazishaji ili upate alamisho kwenye vifaa vyako vyote</translation> <translation id="8110087112193408731">Ungependa kuonyesha shughuli zako za Chrome katika mpango wa Nidhamu Dijitali?</translation> +<translation id="8115259494083109761">Ili uchanganue msimbo QR, iruhusu Chrome itumie kamera yako</translation> <translation id="8116925261070264013">Imezimwa</translation> <translation id="8127542551745560481">Badilisha ukurasa wa kwanza</translation> <translation id="813082847718468539">Angalia maelezo ya tovuti</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 91c7037..c833660c 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">เปิดการซิงค์เพื่อรับบุ๊กมาร์กในอุปกรณ์ทุกเครื่องของคุณ</translation> <translation id="8110087112193408731">ต้องการแสดงกิจกรรม Chrome ในไลฟ์สไตล์ดิจิทัลไหม</translation> +<translation id="8115259494083109761">โปรดอนุญาตให้ Chrome ใช้กล้องเพื่อสแกนคิวอาร์โค้ด</translation> <translation id="8116925261070264013">ปิดเสียง</translation> <translation id="8127542551745560481">แก้ไขหน้าแรก</translation> <translation id="813082847718468539">ดูข้อมูลเว็บไซต์</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 efdc179..1060e32 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Yer işaretlerinize tüm cihazlarınızda ulaşmak için senkronizasyonu açın</translation> <translation id="8110087112193408731">Chrome etkinliğiniz Dijital Denge'de gösterilsin mi?</translation> +<translation id="8115259494083109761">QR kodu taramak için Chrome'un kameranızı kullanmasına izin verin</translation> <translation id="8116925261070264013">Ses kapatıldı</translation> <translation id="8127542551745560481">Ana sayfayı düzenle</translation> <translation id="813082847718468539">Site bilgilerini görüntüle</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 74b4caf..b68d839 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Щоб мати доступ до закладок на всіх своїх пристроях, увімкніть синхронізацію</translation> <translation id="8110087112193408731">Показувати активність у Chrome у Цифровому добробуті?</translation> +<translation id="8115259494083109761">Щоб зісканувати QR-код, надайте Chrome доступ до камери</translation> <translation id="8116925261070264013">Звук вимкнено</translation> <translation id="8127542551745560481">Змінити головну сторінку</translation> <translation id="813082847718468539">Перегляд інформації про сайт</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 9c4cf2d..2c7aa16 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Boshqa qurilmalardagi xatcho‘plaringizni ko‘rish uchun sinxronizatsiyani yoqing</translation> <translation id="8110087112193408731">Raqamli muvozanat xizmatida Chrome amallari chiqsinmi?</translation> +<translation id="8115259494083109761">Chrome QR kodni skanerlashi uchun kameradan foydalanishga ruxsat bering</translation> <translation id="8116925261070264013">Ovozsiz</translation> <translation id="8127542551745560481">Bosh sahifani oʻzgartirish</translation> <translation id="813082847718468539">Sayt haqidagi ma’lumotlar</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 c707ba0..4ffde1c 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">如要將書籤同步到所有裝置,請開啟同步處理功能</translation> <translation id="8110087112193408731">要在「健康數碼生活」中顯示您的 Chrome 活動記錄嗎?</translation> +<translation id="8115259494083109761">如要掃瞄二維條碼,請允許 Chrome 使用攝錄機</translation> <translation id="8116925261070264013">已設為靜音的網站</translation> <translation id="8127542551745560481">編輯首頁</translation> <translation id="813082847718468539">檢視網站資料</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 256a938..5ecb9f9 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
@@ -965,6 +965,7 @@ <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">如要將書籤同步到所有裝置,請開啟同步處理功能</translation> <translation id="8110087112193408731">要在數位健康中顯示你的 Chrome 活動記錄嗎?</translation> +<translation id="8115259494083109761">如要掃描 QR 圖碼,請允許 Chrome 使用你的攝影機</translation> <translation id="8116925261070264013">已設為靜音</translation> <translation id="8127542551745560481">編輯首頁</translation> <translation id="813082847718468539">查看網站資訊</translation>
diff --git a/chrome/browser/ui/app_list/app_context_menu.cc b/chrome/browser/ui/app_list/app_context_menu.cc index 4eeaeba..6f1fa287 100644 --- a/chrome/browser/ui/app_list/app_context_menu.cc +++ b/chrome/browser/ui/app_list/app_context_menu.cc
@@ -10,7 +10,6 @@ #include "chrome/grit/generated_resources.h" #include "components/vector_icons/vector_icons.h" #include "ui/base/l10n/l10n_util.h" -#include "ui/base/models/image_model.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/vector_icon_types.h" #include "ui/views/vector_icons.h" @@ -68,19 +67,18 @@ } } -const gfx::VectorIcon* AppContextMenu::GetVectorIconForCommandId( - int command_id) const { +ui::ImageModel AppContextMenu::GetIconForCommandId(int command_id) const { DCHECK_EQ(command_id, ash::TOGGLE_PIN); const gfx::VectorIcon& icon = GetMenuItemVectorIcon(command_id, controller_->IsAppPinned(app_id_) ? IDS_APP_LIST_CONTEXT_MENU_UNPIN : IDS_APP_LIST_CONTEXT_MENU_PIN); - return &icon; + return ui::ImageModel::FromVectorIcon(icon); } -const gfx::VectorIcon& AppContextMenu::GetMenuItemVectorIcon( - int command_id, - int string_id) const { +// static +const gfx::VectorIcon& AppContextMenu::GetMenuItemVectorIcon(int command_id, + int string_id) { switch (command_id) { case ash::LAUNCH_NEW: if (string_id == IDS_APP_LIST_CONTEXT_MENU_NEW_WINDOW)
diff --git a/chrome/browser/ui/app_list/app_context_menu.h b/chrome/browser/ui/app_list/app_context_menu.h index ca179bd5..6dd21586 100644 --- a/chrome/browser/ui/app_list/app_context_menu.h +++ b/chrome/browser/ui/app_list/app_context_menu.h
@@ -11,6 +11,7 @@ #include "ash/public/cpp/app_menu_constants.h" #include "base/callback.h" #include "base/macros.h" +#include "ui/base/models/image_model.h" #include "ui/base/models/simple_menu_model.h" class AppListControllerDelegate; @@ -38,13 +39,12 @@ base::string16 GetLabelForCommandId(int command_id) const override; bool IsCommandIdEnabled(int command_id) const override; void ExecuteCommand(int command_id, int event_flags) override; - const gfx::VectorIcon* GetVectorIconForCommandId( - int command_id) const override; + ui::ImageModel GetIconForCommandId(int command_id) const override; // Helper method to get the gfx::VectorIcon for a |command_id|. Returns an // empty gfx::VectorIcon if there is no icon for this |command_id|. - const gfx::VectorIcon& GetMenuItemVectorIcon(int command_id, - int string_id) const; + static const gfx::VectorIcon& GetMenuItemVectorIcon(int command_id, + int string_id); protected: // Creates default items, derived class may override to add their specific
diff --git a/chrome/browser/ui/app_list/app_service/app_service_context_menu.cc b/chrome/browser/ui/app_list/app_service/app_service_context_menu.cc index c1738e2..4e24690 100644 --- a/chrome/browser/ui/app_list/app_service/app_service_context_menu.cc +++ b/chrome/browser/ui/app_list/app_service/app_service_context_menu.cc
@@ -223,12 +223,9 @@ auto menu_model = std::make_unique<ui::SimpleMenuModel>(this); submenu_ = std::make_unique<ui::SimpleMenuModel>(this); size_t index = 0; - // Unretained is safe here because PopulateNewItemFromMojoMenuItems should - // call GetVectorIcon synchronously. if (apps::PopulateNewItemFromMojoMenuItems( menu_items->items, menu_model.get(), submenu_.get(), - base::BindOnce(&AppServiceContextMenu::GetMenuItemVectorIcon, - base::Unretained(this)))) { + base::BindOnce(&AppServiceContextMenu::GetMenuItemVectorIcon))) { index = 1; }
diff --git a/chrome/browser/ui/app_list/extension_app_context_menu.cc b/chrome/browser/ui/app_list/extension_app_context_menu.cc index 89c931f8..bb46325 100644 --- a/chrome/browser/ui/app_list/extension_app_context_menu.cc +++ b/chrome/browser/ui/app_list/extension_app_context_menu.cc
@@ -19,7 +19,6 @@ #include "chrome/grit/generated_resources.h" #include "content/public/browser/context_menu_params.h" #include "ui/base/l10n/l10n_util.h" -#include "ui/base/models/image_model.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/controls/menu/menu_config.h" #include "ui/views/vector_icons.h" @@ -133,12 +132,14 @@ return AppContextMenu::GetLabelForCommandId(command_id); } -const gfx::VectorIcon* ExtensionAppContextMenu::GetVectorIconForCommandId( +ui::ImageModel ExtensionAppContextMenu::GetIconForCommandId( int command_id) const { - if (command_id == ash::LAUNCH_NEW) - return &GetMenuItemVectorIcon(ash::LAUNCH_NEW, GetLaunchStringId()); + if (command_id == ash::LAUNCH_NEW) { + return ui::ImageModel::FromVectorIcon( + GetMenuItemVectorIcon(ash::LAUNCH_NEW, GetLaunchStringId())); + } - return AppContextMenu::GetVectorIconForCommandId(command_id); + return AppContextMenu::GetIconForCommandId(command_id); } bool ExtensionAppContextMenu::IsItemForCommandIdDynamic(int command_id) const {
diff --git a/chrome/browser/ui/app_list/extension_app_context_menu.h b/chrome/browser/ui/app_list/extension_app_context_menu.h index 2de0d36..7907b199 100644 --- a/chrome/browser/ui/app_list/extension_app_context_menu.h +++ b/chrome/browser/ui/app_list/extension_app_context_menu.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "chrome/browser/ui/app_list/app_context_menu.h" +#include "ui/base/models/image_model.h" class AppListControllerDelegate; class Profile; @@ -42,8 +43,7 @@ // ui::SimpleMenuModel::Delegate overrides: base::string16 GetLabelForCommandId(int command_id) const override; - const gfx::VectorIcon* GetVectorIconForCommandId( - int command_id) const override; + ui::ImageModel GetIconForCommandId(int command_id) const override; bool IsItemForCommandIdDynamic(int command_id) const override; bool IsCommandIdChecked(int command_id) const override; bool IsCommandIdEnabled(int command_id) const override;
diff --git a/chrome/browser/ui/app_list/web_app_context_menu.cc b/chrome/browser/ui/app_list/web_app_context_menu.cc index f6e8c23..a862eb8 100644 --- a/chrome/browser/ui/app_list/web_app_context_menu.cc +++ b/chrome/browser/ui/app_list/web_app_context_menu.cc
@@ -17,7 +17,6 @@ #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" -#include "ui/base/models/image_model.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/controls/menu/menu_config.h" #include "ui/views/vector_icons.h" @@ -90,12 +89,13 @@ return AppContextMenu::GetLabelForCommandId(command_id); } -const gfx::VectorIcon* WebAppContextMenu::GetVectorIconForCommandId( - int command_id) const { - if (command_id == ash::LAUNCH_NEW) - return &GetMenuItemVectorIcon(ash::LAUNCH_NEW, GetLaunchStringId()); +ui::ImageModel WebAppContextMenu::GetIconForCommandId(int command_id) const { + if (command_id == ash::LAUNCH_NEW) { + return ui::ImageModel::FromVectorIcon( + GetMenuItemVectorIcon(ash::LAUNCH_NEW, GetLaunchStringId())); + } - return AppContextMenu::GetVectorIconForCommandId(command_id); + return AppContextMenu::GetIconForCommandId(command_id); } bool WebAppContextMenu::IsItemForCommandIdDynamic(int command_id) const {
diff --git a/chrome/browser/ui/app_list/web_app_context_menu.h b/chrome/browser/ui/app_list/web_app_context_menu.h index f03dad29..4c84ad5 100644 --- a/chrome/browser/ui/app_list/web_app_context_menu.h +++ b/chrome/browser/ui/app_list/web_app_context_menu.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "chrome/browser/ui/app_list/app_context_menu.h" +#include "ui/base/models/image_model.h" class AppListControllerDelegate; class Profile; @@ -39,8 +40,7 @@ // ui::SimpleMenuModel::Delegate overrides: base::string16 GetLabelForCommandId(int command_id) const override; - const gfx::VectorIcon* GetVectorIconForCommandId( - int command_id) const override; + ui::ImageModel GetIconForCommandId(int command_id) const override; bool IsItemForCommandIdDynamic(int command_id) const override; bool IsCommandIdChecked(int command_id) const override; bool IsCommandIdEnabled(int command_id) const override;
diff --git a/chrome/browser/ui/extensions/extension_action_view_controller.cc b/chrome/browser/ui/extensions/extension_action_view_controller.cc index ea575404..73647c9 100644 --- a/chrome/browser/ui/extensions/extension_action_view_controller.cc +++ b/chrome/browser/ui/extensions/extension_action_view_controller.cc
@@ -339,12 +339,9 @@ return false; CommandService* command_service = CommandService::Get(browser_->profile()); - if (extension_action_->action_type() == ActionInfo::TYPE_PAGE) { - return command_service->GetPageActionCommand( - extension_->id(), CommandService::ACTIVE, command, NULL); - } - return command_service->GetBrowserActionCommand( - extension_->id(), CommandService::ACTIVE, command, NULL); + return command_service->GetExtensionActionCommand( + extension_->id(), extension_action_->action_type(), + CommandService::ACTIVE, command, nullptr); } bool ExtensionActionViewController::CanHandleAccelerators() const {
diff --git a/chrome/browser/ui/extensions/extension_installed_bubble_model.cc b/chrome/browser/ui/extensions/extension_installed_bubble_model.cc index dc8958c9..7bbb7645 100644 --- a/chrome/browser/ui/extensions/extension_installed_bubble_model.cc +++ b/chrome/browser/ui/extensions/extension_installed_bubble_model.cc
@@ -32,18 +32,12 @@ auto* service = extensions::CommandService::Get(profile); extensions::Command command; - if (info->type == extensions::ActionInfo::TYPE_BROWSER && - service->GetBrowserActionCommand(extension->id(), - extensions::CommandService::ACTIVE, - &command, nullptr)) { + if (service->GetExtensionActionCommand(extension->id(), info->type, + extensions::CommandService::ACTIVE, + &command, nullptr)) { return command; } - if (info->type == extensions::ActionInfo::TYPE_PAGE && - service->GetPageActionCommand(extension->id(), - extensions::CommandService::ACTIVE, - &command, nullptr)) { - return command; - } + return base::nullopt; }
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc index 03e1ae46..214ba5e 100644 --- a/chrome/browser/ui/toolbar/app_menu_model.cc +++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -333,14 +333,14 @@ } } -bool AppMenuModel::GetIconForCommandId(int command_id, gfx::Image* icon) const { +ui::ImageModel AppMenuModel::GetIconForCommandId(int command_id) const { if (command_id == IDC_UPGRADE_DIALOG) { DCHECK(browser_defaults::kShowUpgradeMenuItem); DCHECK(app_menu_icon_controller_); - *icon = gfx::Image(app_menu_icon_controller_->GetIconImage(false)); - return true; + return ui::ImageModel::FromImageSkia( + app_menu_icon_controller_->GetIconImage(false)); } - return false; + return ui::ImageModel(); } void AppMenuModel::ExecuteCommand(int command_id, int event_flags) {
diff --git a/chrome/browser/ui/toolbar/app_menu_model.h b/chrome/browser/ui/toolbar/app_menu_model.h index b162d969..badd91e1 100644 --- a/chrome/browser/ui/toolbar/app_menu_model.h +++ b/chrome/browser/ui/toolbar/app_menu_model.h
@@ -134,7 +134,7 @@ // Overridden for both ButtonMenuItemModel::Delegate and SimpleMenuModel: bool IsItemForCommandIdDynamic(int command_id) const override; base::string16 GetLabelForCommandId(int command_id) const override; - bool GetIconForCommandId(int command_id, gfx::Image* icon) const override; + ui::ImageModel GetIconForCommandId(int command_id) const override; void ExecuteCommand(int command_id, int event_flags) override; bool IsCommandIdChecked(int command_id) const override; bool IsCommandIdEnabled(int command_id) const override;
diff --git a/chrome/browser/ui/views/accessibility/caption_bubble.cc b/chrome/browser/ui/views/accessibility/caption_bubble.cc index 1cae946..f3d14a1 100644 --- a/chrome/browser/ui/views/accessibility/caption_bubble.cc +++ b/chrome/browser/ui/views/accessibility/caption_bubble.cc
@@ -4,14 +4,20 @@ #include "chrome/browser/ui/views/accessibility/caption_bubble.h" +#include <algorithm> #include <memory> #include <string> #include <utility> #include <vector> +#include "chrome/grit/generated_resources.h" #include "ui/base/hit_test.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/geometry/insets.h" #include "ui/views/bubble/bubble_dialog_delegate_view.h" #include "ui/views/bubble/bubble_frame_view.h" +#include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/flex_layout.h" #include "ui/views/layout/flex_layout_types.h" @@ -20,12 +26,19 @@ namespace { // Formatting constants -static constexpr int kLineHeightDip = 18; +static constexpr int kLineHeightDip = 24; static constexpr int kMaxHeightDip = kLineHeightDip * 2; static constexpr int kCornerRadiusDip = 8; +static constexpr int kMaxWidthDip = 548; +static constexpr int kHorizontalMarginsDip = 6; +static constexpr int kVerticalMarginsDip = 8; static constexpr double kPreferredAnchorWidthPercentage = 0.8; -// Dark grey at 80% opacity. -static constexpr SkColor kCaptionBubbleColor = SkColorSetARGB(204, 30, 30, 30); +// 90% opacity. +static constexpr int kCaptionBubbleAlpha = 230; +static constexpr char kPrimaryFont[] = "Roboto"; +static constexpr char kSecondaryFont[] = "Arial"; +static constexpr char kTertiaryFont[] = "sans-serif"; +static constexpr int kFontSizePx = 16; // CaptionBubble implementation of BubbleFrameView. class CaptionBubbleFrameView : public views::BubbleFrameView { @@ -78,24 +91,44 @@ views::MaximumFlexSizeRule::kPreferred, /*adjust_height_for_width*/ true)); - set_color(kCaptionBubbleColor); + // TODO(crbug.com/1055150): Use system caption color scheme rather than + // hard-coding the colors. + SkColor caption_bubble_color_ = + SkColorSetA(gfx::kGoogleGrey900, kCaptionBubbleAlpha); + set_color(caption_bubble_color_); set_close_on_deactivate(false); - label_.SetMultiLine(true); - int max_width = GetAnchorView()->width() * kPreferredAnchorWidthPercentage; - label_.SetMaximumWidth(max_width); - label_.SetEnabledColor(SK_ColorWHITE); - label_.SetBackgroundColor(SK_ColorTRANSPARENT); - label_.SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT); - label_.SetLineHeight(kLineHeightDip); + auto label = std::make_unique<views::Label>(); + label->SetMultiLine(true); + label->SetMaximumWidth(kMaxWidthDip); + label->SetEnabledColor(SK_ColorWHITE); + label->SetBackgroundColor(SK_ColorTRANSPARENT); + label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT); + label->SetLineHeight(kLineHeightDip); - std::vector<std::string> font_names = {"Arial", "Helvetica"}; - label_.SetFontList(gfx::FontList(font_names, gfx::Font::FontStyle::NORMAL, 14, - gfx::Font::Weight::NORMAL)); + // TODO(crbug.com/1055150): Respect the user's font size and minimum font size + // settings rather than having a fixed font size. + const gfx::FontList font_list = gfx::FontList( + {kPrimaryFont, kSecondaryFont, kTertiaryFont}, + gfx::Font::FontStyle::NORMAL, kFontSizePx, gfx::Font::Weight::NORMAL); + label->SetFontList(font_list); - SetPreferredSize(gfx::Size(max_width, kMaxHeightDip)); + auto title = std::make_unique<views::Label>(); + title->SetEnabledColor(gfx::kGoogleGrey500); + title->SetBackgroundColor(SK_ColorTRANSPARENT); + title->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_CENTER); + title->SetLineHeight(kLineHeightDip); + title->SetFontList(font_list); + title->SetText(l10n_util::GetStringUTF16(IDS_LIVE_CAPTION_BUBBLE_TITLE)); - AddChildView(&label_); + // TODO(crbug.com/1055150): Resize responsively with anchor size changes. + int min_width = GetAnchorView()->width() * kPreferredAnchorWidthPercentage; + int width = std::min(min_width, kMaxWidthDip); + SetPreferredSize(gfx::Size(width, kMaxHeightDip)); + set_margins(gfx::Insets(kHorizontalMarginsDip, kVerticalMarginsDip)); + + title_ = AddChildView(std::move(title)); + label_ = AddChildView(std::move(label)); } bool CaptionBubble::ShouldShowCloseButton() const { @@ -106,7 +139,7 @@ views::Widget* widget) { CaptionBubbleFrameView* frame = new CaptionBubbleFrameView(); auto border = std::make_unique<views::BubbleBorder>( - views::BubbleBorder::FLOAT, views::BubbleBorder::NO_SHADOW, + views::BubbleBorder::FLOAT, views::BubbleBorder::DIALOG_SHADOW, gfx::kPlaceholderColor); border->SetCornerRadius(kCornerRadiusDip); frame->SetBubbleBorder(std::move(border)); @@ -114,7 +147,9 @@ } void CaptionBubble::SetText(const std::string& text) { - label_.SetText(base::ASCIIToUTF16(text)); + label_->SetText(base::ASCIIToUTF16(text)); + // Show the title if there is room for it. + title_->SetVisible(label_->GetPreferredSize().height() < kMaxHeightDip); } } // namespace captions
diff --git a/chrome/browser/ui/views/accessibility/caption_bubble.h b/chrome/browser/ui/views/accessibility/caption_bubble.h index f940aa5..c257f49c 100644 --- a/chrome/browser/ui/views/accessibility/caption_bubble.h +++ b/chrome/browser/ui/views/accessibility/caption_bubble.h
@@ -8,7 +8,10 @@ #include <string> #include "ui/views/bubble/bubble_dialog_delegate_view.h" -#include "ui/views/controls/label.h" + +namespace views { +class Label; +} namespace captions { @@ -37,7 +40,11 @@ private: friend class CaptionBubbleControllerViewsTest; - views::Label label_; + + // Unowned. Owned by views hierarchy. + views::Label* label_; + views::Label* title_; + base::ScopedClosureRunner destroyed_callback_; };
diff --git a/chrome/browser/ui/views/accessibility/caption_bubble_controller_views_browsertest.cc b/chrome/browser/ui/views/accessibility/caption_bubble_controller_views_browsertest.cc index 13a62fe..0e5bbf6 100644 --- a/chrome/browser/ui/views/accessibility/caption_bubble_controller_views_browsertest.cc +++ b/chrome/browser/ui/views/accessibility/caption_bubble_controller_views_browsertest.cc
@@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/ui/views/accessibility/caption_bubble_controller_views.h" @@ -12,6 +11,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/views/accessibility/caption_bubble.h" #include "chrome/test/base/in_process_browser_test.h" +#include "ui/views/controls/label.h" #include "ui/views/widget/widget.h" namespace captions { @@ -36,7 +36,11 @@ } views::Label* GetLabel() { - return controller_ ? &controller_->caption_bubble_->label_ : nullptr; + return controller_ ? controller_->caption_bubble_->label_ : nullptr; + } + + views::Label* GetTitle() { + return controller_ ? controller_->caption_bubble_->title_ : nullptr; } std::string GetLabelText() { @@ -93,4 +97,17 @@ GetBubble()->GetBoundsInScreen().bottom()); } +IN_PROC_BROWSER_TEST_F(CaptionBubbleControllerViewsTest, + CaptionTitleShownAtFirst) { + // With one line of text, the title is visible and positioned between the + // top of the bubble and top of the label. + GetController()->OnCaptionReceived("Cats rock"); + EXPECT_TRUE(GetTitle()->GetVisible()); + EXPECT_EQ(GetTitle()->GetBoundsInScreen().bottom(), + GetLabel()->GetBoundsInScreen().y()); + + GetController()->OnCaptionReceived("Cats rock\nDogs too"); + + EXPECT_FALSE(GetTitle()->GetVisible()); +} } // namespace captions
diff --git a/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc index 07499a83..25feca21 100644 --- a/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc +++ b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc
@@ -10,10 +10,17 @@ #include "base/callback.h" #include "components/image_fetcher/core/image_fetcher.h" #include "components/image_fetcher/core/image_fetcher_service.h" +#include "components/image_fetcher/core/request_metadata.h" +#include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/image/image.h" +using image_fetcher::ImageDataFetcherCallback; +using image_fetcher::ImageFetcher; +using image_fetcher::ImageFetcherParams; +using image_fetcher::RequestMetadata; + namespace upboarding { namespace { @@ -50,6 +57,13 @@ } })"); +ImageFetcherParams CreateImageFetcherParams() { + ImageFetcherParams params(kQueryTilesTrafficAnnotation, + kImageFetcherUmaClientName); + params.set_hold_for_expiration_interval(kImageCacheExpirationInterval); + return params; +} + void OnImageFetched(ImageLoader::BitmapCallback callback, const gfx::Image& image, const image_fetcher::RequestMetadata&) { @@ -57,22 +71,38 @@ std::move(callback).Run(image.AsBitmap()); } +void OnImageDataPrefetched(ImageLoader::SuccessCallback callback, + const std::string&, + const RequestMetadata& request_metadata) { + bool success = request_metadata.http_response_code == net::OK; + if (callback) + std::move(callback).Run(success); +} + } // namespace -CachedImageLoader::CachedImageLoader(image_fetcher::ImageFetcher* image_fetcher) - : image_fetcher_(image_fetcher) { - DCHECK(image_fetcher_); +CachedImageLoader::CachedImageLoader(ImageFetcher* cached_image_fetcher, + ImageFetcher* reduced_mode_image_fetcher) + : cached_image_fetcher_(cached_image_fetcher), + reduced_mode_image_fetcher_(reduced_mode_image_fetcher) { + DCHECK(cached_image_fetcher_); + DCHECK(reduced_mode_image_fetcher_); } CachedImageLoader::~CachedImageLoader() = default; void CachedImageLoader::FetchImage(const GURL& url, BitmapCallback callback) { // Fetch and decode the image from network or disk cache. - image_fetcher::ImageFetcherParams params(kQueryTilesTrafficAnnotation, - kImageFetcherUmaClientName); - params.set_hold_for_expiration_interval(kImageCacheExpirationInterval); - image_fetcher_->FetchImage( - url, base::BindOnce(&OnImageFetched, std::move(callback)), params); + cached_image_fetcher_->FetchImage( + url, base::BindOnce(&OnImageFetched, std::move(callback)), + CreateImageFetcherParams()); +} + +void CachedImageLoader::PrefetchImage(const GURL& url, + SuccessCallback callback) { + reduced_mode_image_fetcher_->FetchImageData( + url, base::BindOnce(&OnImageDataPrefetched, std::move(callback)), + CreateImageFetcherParams()); } } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h index 60ab17e..d99c5f30 100644 --- a/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h +++ b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h
@@ -20,16 +20,22 @@ // network data consumption. class CachedImageLoader : public ImageLoader { public: - explicit CachedImageLoader(image_fetcher::ImageFetcher* image_fetcher); + CachedImageLoader(image_fetcher::ImageFetcher* cached_image_fetcher, + image_fetcher::ImageFetcher* reduced_mode_image_fetcher); ~CachedImageLoader() override; private: // ImageLoader implementation. void FetchImage(const GURL& url, BitmapCallback callback) override; + void PrefetchImage(const GURL& url, SuccessCallback callback) override; - // Owned by ImageFetcherService. Outlives TileService, the owner of this - // class. - image_fetcher::ImageFetcher* image_fetcher_; + // Used to load the image bitmap for UI. Owned by ImageFetcherService. + // Outlives TileService. + image_fetcher::ImageFetcher* cached_image_fetcher_; + + // Used to prefetch the image in reduced mode. The data is downloaded to disk + // without decoding. Owned by ImageFetcherService. Outlives TileService. + image_fetcher::ImageFetcher* reduced_mode_image_fetcher_; }; } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/internal/cached_image_loader_unittest.cc b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader_unittest.cc index a0d01ac..c757dac 100644 --- a/chrome/browser/upboarding/query_tiles/internal/cached_image_loader_unittest.cc +++ b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader_unittest.cc
@@ -8,13 +8,19 @@ #include <utility> #include "base/memory/weak_ptr.h" +#include "base/test/mock_callback.h" #include "base/test/task_environment.h" #include "components/image_fetcher/core/mock_image_fetcher.h" #include "components/image_fetcher/core/request_metadata.h" +#include "net/http/http_status_code.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/image/image.h" +using image_fetcher::ImageDataFetcherCallback; +using image_fetcher::ImageFetcherCallback; +using image_fetcher::ImageFetcherParams; +using image_fetcher::RequestMetadata; using ::testing::_; using ::testing::Invoke; @@ -27,7 +33,8 @@ ~CachedImageLoaderTest() override = default; void SetUp() override { - image_loader_ = std::make_unique<CachedImageLoader>(&mock_fetcher_); + image_loader_ = std::make_unique<CachedImageLoader>( + &mock_fetcher_, &mock_reduced_mode_fetcher_); } protected: @@ -38,8 +45,28 @@ weak_ptr_factory_.GetWeakPtr())); } + void PrefetchImage(int http_response_code, bool expected_success) { + base::MockCallback<ImageLoader::SuccessCallback> mock_callback; + EXPECT_CALL(mock_callback, Run(expected_success)); + EXPECT_CALL(*mock_reduced_mode_fetcher(), FetchImageAndData_(_, _, _, _)) + .WillRepeatedly( + Invoke([http_response_code]( + const GURL&, ImageDataFetcherCallback* data_callback, + ImageFetcherCallback*, ImageFetcherParams) { + RequestMetadata request_metadata; + request_metadata.http_response_code = http_response_code; + std::move(*data_callback).Run("test_data", request_metadata); + })); + image_loader_->PrefetchImage(GURL("https://www.example.com/dummy_image"), + mock_callback.Get()); + } + image_fetcher::MockImageFetcher* mock_fetcher() { return &mock_fetcher_; } + image_fetcher::MockImageFetcher* mock_reduced_mode_fetcher() { + return &mock_reduced_mode_fetcher_; + } + const SkBitmap& result() const { return result_; } private: @@ -47,6 +74,7 @@ base::test::TaskEnvironment task_environment_; image_fetcher::MockImageFetcher mock_fetcher_; + image_fetcher::MockImageFetcher mock_reduced_mode_fetcher_; std::unique_ptr<ImageLoader> image_loader_; SkBitmap result_; @@ -63,17 +91,20 @@ auto image = gfx::Image::CreateFrom1xBitmap(bitmap); EXPECT_CALL(*mock_fetcher(), FetchImageAndData_(_, _, _, _)) - .WillRepeatedly( - Invoke([&image](const GURL&, image_fetcher::ImageDataFetcherCallback*, - image_fetcher::ImageFetcherCallback* fetch_callback, - image_fetcher::ImageFetcherParams) { - std::move(*fetch_callback) - .Run(image, image_fetcher::RequestMetadata()); - })); + .WillRepeatedly(Invoke([&image](const GURL&, ImageDataFetcherCallback*, + ImageFetcherCallback* fetch_callback, + ImageFetcherParams) { + std::move(*fetch_callback).Run(image, image_fetcher::RequestMetadata()); + })); FetchImage(); EXPECT_FALSE(result().empty()); EXPECT_EQ(result().width(), 32); } +TEST_F(CachedImageLoaderTest, PrefetchImage) { + PrefetchImage(net::OK, true /*expected_succes*/); + PrefetchImage(net::HTTP_NOT_FOUND, false /*expected_succes*/); +} + } // namespace } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/internal/image_loader.h b/chrome/browser/upboarding/query_tiles/internal/image_loader.h index 4d01903..004eae4 100644 --- a/chrome/browser/upboarding/query_tiles/internal/image_loader.h +++ b/chrome/browser/upboarding/query_tiles/internal/image_loader.h
@@ -20,6 +20,7 @@ class ImageLoader { public: using BitmapCallback = base::OnceCallback<void(SkBitmap bitmap)>; + using SuccessCallback = base::OnceCallback<void(bool)>; ImageLoader() = default; virtual ~ImageLoader() = default; @@ -29,6 +30,11 @@ // Fetches the bitmap of an image based on its URL. Callback will be invoked // with the bitmap of the image, or an empty bitmap on failure. virtual void FetchImage(const GURL& url, BitmapCallback callback) = 0; + + // Prefetches the image data. The decoding will be deferred to next full + // browser mode launch. Must be called in reduced mode. The |callback| will be + // invoked after network fetch is done. + virtual void PrefetchImage(const GURL& url, SuccessCallback callback) = 0; }; } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/tile_service_factory.cc b/chrome/browser/upboarding/query_tiles/tile_service_factory.cc index 1d92b9f..d2b30ab 100644 --- a/chrome/browser/upboarding/query_tiles/tile_service_factory.cc +++ b/chrome/browser/upboarding/query_tiles/tile_service_factory.cc
@@ -33,11 +33,8 @@ std::unique_ptr<KeyedService> TileServiceFactory::BuildServiceInstanceFor( SimpleFactoryKey* key) const { - // TODO(xingliu): Add reduced mode image fetcher for prefetch. - auto* image_fetcher = - ImageFetcherServiceFactory::GetForKey(key)->GetImageFetcher( - image_fetcher::ImageFetcherConfig::kDiskCacheOnly); - return CreateTileService(image_fetcher); + auto* image_fetcher_service = ImageFetcherServiceFactory::GetForKey(key); + return CreateTileService(image_fetcher_service); } } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.cc b/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.cc index db074b8..c3fef3bf92 100644 --- a/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.cc +++ b/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.cc
@@ -6,13 +6,19 @@ #include "chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h" #include "chrome/browser/upboarding/query_tiles/internal/tile_service_impl.h" +#include "components/image_fetcher/core/image_fetcher_service.h" #include "components/keyed_service/core/keyed_service.h" namespace upboarding { std::unique_ptr<TileService> CreateTileService( - image_fetcher::ImageFetcher* image_fetcher) { - auto image_loader = std::make_unique<CachedImageLoader>(image_fetcher); + image_fetcher::ImageFetcherService* image_fetcher_service) { + auto* cached_image_fetcher = image_fetcher_service->GetImageFetcher( + image_fetcher::ImageFetcherConfig::kDiskCacheOnly); + auto* reduced_mode_image_fetcher = image_fetcher_service->GetImageFetcher( + image_fetcher::ImageFetcherConfig::kReducedMode); + auto image_loader = std::make_unique<CachedImageLoader>( + cached_image_fetcher, reduced_mode_image_fetcher); return std::make_unique<TileServiceImpl>(std::move(image_loader)); }
diff --git a/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h b/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h index d0f3de8..6760e2fe 100644 --- a/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h +++ b/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h
@@ -8,7 +8,7 @@ #include <memory> namespace image_fetcher { -class ImageFetcher; +class ImageFetcherService; } // namespace image_fetcher namespace upboarding { @@ -16,7 +16,7 @@ class TileService; std::unique_ptr<TileService> CreateTileService( - image_fetcher::ImageFetcher* image_fetcher); + image_fetcher::ImageFetcherService* image_fetcher_service); } // namespace upboarding
diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc index 4fae2ef..da9f21e0 100644 --- a/chrome/common/chrome_content_client.cc +++ b/chrome/common/chrome_content_client.cc
@@ -661,8 +661,7 @@ {}, {media::EncryptionScheme::kCenc, media::EncryptionScheme::kCbcs}, {media::CdmSessionType::kTemporary, media::CdmSessionType::kPersistentLicense, - media::CdmSessionType::kPersistentUsageRecord}, - {}); + media::CdmSessionType::kPersistentUsageRecord}); // Register kExternalClearKeyDifferentGuidTestKeySystem first separately. // Otherwise, it'll be treated as a sub-key-system of normal
diff --git a/chrome/common/extensions/api/extension_action/action_info_test_util.cc b/chrome/common/extensions/api/extension_action/action_info_test_util.cc index 0ea3ce5..515d433 100644 --- a/chrome/common/extensions/api/extension_action/action_info_test_util.cc +++ b/chrome/common/extensions/api/extension_action/action_info_test_util.cc
@@ -4,6 +4,8 @@ #include "chrome/common/extensions/api/extension_action/action_info_test_util.h" +#include "components/version_info/channel.h" +#include "extensions/common/features/feature_channel.h" #include "extensions/common/manifest_constants.h" namespace extensions { @@ -31,4 +33,22 @@ return (action_info && action_info->type == type) ? action_info : nullptr; } +std::unique_ptr<ScopedCurrentChannel> GetOverrideChannelForActionType( + ActionInfo::Type action_type) { + std::unique_ptr<ScopedCurrentChannel> channel; + // The "action" key is currently restricted to trunk. Use a fake channel iff + // we're testing that key, so that we still get multi-channel coverage for + // browser and page actions. + switch (action_type) { + case ActionInfo::TYPE_ACTION: + channel = std::make_unique<ScopedCurrentChannel>( + version_info::Channel::UNKNOWN); + break; + case ActionInfo::TYPE_PAGE: + case ActionInfo::TYPE_BROWSER: + break; + } + return channel; +} + } // namespace extensions
diff --git a/chrome/common/extensions/api/extension_action/action_info_test_util.h b/chrome/common/extensions/api/extension_action/action_info_test_util.h index 04dd248..aaa49f3e 100644 --- a/chrome/common/extensions/api/extension_action/action_info_test_util.h +++ b/chrome/common/extensions/api/extension_action/action_info_test_util.h
@@ -5,10 +5,13 @@ #ifndef CHROME_COMMON_EXTENSIONS_API_EXTENSION_ACTION_ACTION_INFO_TEST_UTIL_H_ #define CHROME_COMMON_EXTENSIONS_API_EXTENSION_ACTION_ACTION_INFO_TEST_UTIL_H_ +#include <memory> + #include "chrome/common/extensions/api/extension_action/action_info.h" namespace extensions { class Extension; +class ScopedCurrentChannel; // Retrieves the manifest key for the given action |type|. const char* GetManifestKeyForActionType(ActionInfo::Type type); @@ -20,6 +23,14 @@ const ActionInfo* GetActionInfoOfType(const Extension& extension, ActionInfo::Type type); +// Returns a ScopedCurrentChannel object to use in tests if one is necessary for +// the given |action_type| specified in the manifest. This will only return +// non-null if the "action" manifest key is used. +// TODO(https://crbug.com/893373): Remove this once the "action" key is launched +// to stable. +std::unique_ptr<ScopedCurrentChannel> GetOverrideChannelForActionType( + ActionInfo::Type action_type); + } // namespace extensions #endif // CHROME_COMMON_EXTENSIONS_API_EXTENSION_ACTION_ACTION_INFO_TEST_UTIL_H_
diff --git a/chrome/common/extensions/extension_test_util.cc b/chrome/common/extensions/extension_test_util.cc index 4c15af9..d0474a2d 100644 --- a/chrome/common/extensions/extension_test_util.cc +++ b/chrome/common/extensions/extension_test_util.cc
@@ -13,10 +13,8 @@ #include "base/values.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" -#include "components/version_info/channel.h" #include "extensions/common/extension.h" #include "extensions/common/extensions_client.h" -#include "extensions/common/features/feature_channel.h" #include "extensions/common/manifest_constants.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -95,22 +93,4 @@ extensions::ExtensionsClient::Get()->InitializeWebStoreUrls(command_line); } -std::unique_ptr<extensions::ScopedCurrentChannel> -GetOverrideChannelForActionType(extensions::ActionInfo::Type action_type) { - std::unique_ptr<extensions::ScopedCurrentChannel> channel; - // The "action" key is currently restricted to trunk. Use a fake channel iff - // we're testing that key, so that we still get multi-channel coverage for - // browser and page actions. - switch (action_type) { - case extensions::ActionInfo::TYPE_ACTION: - channel = std::make_unique<extensions::ScopedCurrentChannel>( - version_info::Channel::UNKNOWN); - break; - case extensions::ActionInfo::TYPE_PAGE: - case extensions::ActionInfo::TYPE_BROWSER: - break; - } - return channel; -} - } // namespace extension_test_util
diff --git a/chrome/common/extensions/extension_test_util.h b/chrome/common/extensions/extension_test_util.h index 0c20ba4..dc747e1b 100644 --- a/chrome/common/extensions/extension_test_util.h +++ b/chrome/common/extensions/extension_test_util.h
@@ -9,14 +9,12 @@ #include <string> #include "base/memory/ref_counted.h" -#include "chrome/common/extensions/api/extension_action/action_info.h" #include "extensions/common/manifest.h" class GURL; namespace extensions { class Extension; -class ScopedCurrentChannel; } namespace extension_test_util { @@ -57,14 +55,6 @@ void SetGalleryUpdateURL(const GURL& new_url); -// Returns a ScopedCurrentChannel object to use in tests if one is necessary for -// the given |action_type| specified in the manifest. This will only return -// non-null if the "action" manifest key is used. -// TODO(https://crbug.com/893373): Remove this one the "action" key is launched -// to stable. -std::unique_ptr<extensions::ScopedCurrentChannel> -GetOverrideChannelForActionType(extensions::ActionInfo::Type action_type); - } // namespace extension_test_util #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_TEST_UTIL_H_
diff --git a/chrome/common/media/cdm_manifest.cc b/chrome/common/media/cdm_manifest.cc index ec28f599..aeede07 100644 --- a/chrome/common/media/cdm_manifest.cc +++ b/chrome/common/media/cdm_manifest.cc
@@ -24,7 +24,6 @@ #include "media/base/content_decryption_module.h" #include "media/base/decrypt_config.h" #include "media/base/video_codecs.h" -#include "media/cdm/cdm_proxy.h" #include "media/cdm/supported_cdm_versions.h" #include "media/media_buildflags.h" @@ -42,7 +41,6 @@ // x-cdm-codecs // x-cdm-persistent-license-support // x-cdm-supported-encryption-schemes -// x-cdm-supported-cdm-proxy-protocols // What they represent is listed below. They should never have non-backwards // compatible changes. All values are strings. All values that are lists are // delimited by commas. No trailing commas. For example, "1,2,4". @@ -66,9 +64,6 @@ // The list of supported encryption schemes (e.g. ["cenc","cbcs"]). const char kCdmSupportedEncryptionSchemesName[] = "x-cdm-supported-encryption-schemes"; -// The list of supported proxy protocols (e.g. ["intel"]). -const char kCdmSupportedCdmProxyProtocolsName[] = - "x-cdm-supported-cdm-proxy-protocols"; // The following strings are used to specify supported codecs in the // parameter |kCdmCodecsListName|. @@ -89,10 +84,6 @@ const char kCdmSupportedEncryptionSchemeCenc[] = "cenc"; const char kCdmSupportedEncryptionSchemeCbcs[] = "cbcs"; -// The following string(s) are used to specify supported CdmProxy protocols in -// the parameter |kCdmSupportedCdmProxyProtocolsName|. -const char kCdmSupportedCdmProxyProtocolIntel[] = "intel"; - typedef bool (*VersionCheckFunc)(int version); // Returns whether the CDM's API version, as specified in the manifest by @@ -265,47 +256,6 @@ return true; } -// Returns true and updates |cdm_proxy_protocols| if the appropriate manifest -// entry is valid. Returns false and does not modify |cdm_proxy_protocols| if -// the manifest entry is incorrectly formatted. Incorrect types in the manifest -// entry will log the error and fail. Unrecognized values will be reported but -// otherwise ignored. -bool GetCdmProxyProtocols( - const base::Value& manifest, - base::flat_set<media::CdmProxy::Protocol>* cdm_proxy_protocols) { - DCHECK(manifest.is_dict()); - const auto* value = manifest.FindKey(kCdmSupportedCdmProxyProtocolsName); - if (!value) - return true; - - if (!value->is_list()) { - DLOG(ERROR) << "CDM manifest entry " << kCdmSupportedCdmProxyProtocolsName - << " is not a list."; - return false; - } - - base::flat_set<media::CdmProxy::Protocol> result; - for (const auto& item : value->GetList()) { - if (!item.is_string()) { - DLOG(ERROR) << "Unrecognized item type in CDM manifest entry " - << kCdmSupportedCdmProxyProtocolsName; - return false; - } - - const std::string& protocol = item.GetString(); - if (protocol == kCdmSupportedCdmProxyProtocolIntel) { - result.insert(media::CdmProxy::Protocol::kIntel); - } else { - DLOG(WARNING) << "Unrecognized CdmProxy protocol '" << protocol - << "' in CDM manifest entry " - << kCdmSupportedCdmProxyProtocolsName; - } - } - - cdm_proxy_protocols->swap(result); - return true; -} - bool GetVersion(const base::Value& manifest, base::Version* version) { DCHECK(manifest.is_dict()); auto* version_string = @@ -346,8 +296,7 @@ return GetCodecs(manifest, &capability->video_codecs, &capability->supports_vp9_profile2) && GetEncryptionSchemes(manifest, &capability->encryption_schemes) && - GetSessionTypes(manifest, &capability->session_types) && - GetCdmProxyProtocols(manifest, &capability->cdm_proxy_protocols); + GetSessionTypes(manifest, &capability->session_types); } bool ParseCdmManifestFromPath(const base::FilePath& manifest_path,
diff --git a/chrome/common/media/cdm_manifest_unittest.cc b/chrome/common/media/cdm_manifest_unittest.cc index 1d24b893f..627397d 100644 --- a/chrome/common/media/cdm_manifest_unittest.cc +++ b/chrome/common/media/cdm_manifest_unittest.cc
@@ -37,8 +37,6 @@ "x-cdm-persistent-license-support"; const char kCdmSupportedEncryptionSchemesName[] = "x-cdm-supported-encryption-schemes"; -const char kCdmSupportedCdmProxyProtocolsName[] = - "x-cdm-supported-cdm-proxy-protocols"; // Version checking does change over time. Deriving these values from constants // in the code to ensure they change when the CDM interface changes. @@ -82,7 +80,6 @@ dict.SetBoolKey(kCdmPersistentLicenseSupportName, true); dict.SetKey(kCdmSupportedEncryptionSchemesName, MakeListValue("cenc", "cbcs")); - dict.SetKey(kCdmSupportedCdmProxyProtocolsName, MakeListValue("intel")); // The following are dependent on what the current code supports. EXPECT_TRUE(media::IsSupportedCdmModuleVersion(kSupportedCdmModuleVersion)); @@ -123,15 +120,6 @@ } } -void CheckProxyProtocols( - const base::flat_set<media::CdmProxy::Protocol>& actual, - const std::vector<media::CdmProxy::Protocol>& expected) { - EXPECT_EQ(expected.size(), actual.size()); - for (const auto& proxy_protocol : expected) { - EXPECT_TRUE(base::Contains(actual, proxy_protocol)); - } -} - void WriteManifestToFile(const base::Value& manifest, const base::FilePath& file_path) { EXPECT_FALSE(base::PathExists(file_path)); @@ -202,8 +190,6 @@ CheckSessionTypes(capability.session_types, {media::CdmSessionType::kTemporary, media::CdmSessionType::kPersistentLicense}); - CheckProxyProtocols(capability.cdm_proxy_protocols, - {media::CdmProxy::Protocol::kIntel}); } TEST(CdmManifestTest, EmptyManifest) { @@ -215,7 +201,6 @@ {media::EncryptionScheme::kCenc}); CheckSessionTypes(capability.session_types, {media::CdmSessionType::kTemporary}); - CheckProxyProtocols(capability.cdm_proxy_protocols, {}); } TEST(CdmManifestTest, ManifestCodecs) { @@ -385,41 +370,6 @@ } } -TEST(CdmManifestTest, ManifestProxyProtocols) { - auto manifest = DefaultManifest(); - - { - // Try only supported value. - CdmCapability capability; - manifest.SetKey(kCdmSupportedCdmProxyProtocolsName, MakeListValue("intel")); - EXPECT_TRUE(ParseCdmManifest(manifest, &capability)); - CheckProxyProtocols(capability.cdm_proxy_protocols, - {media::CdmProxy::Protocol::kIntel}); - } - { - // Unrecognized values are ignored. - CdmCapability capability; - manifest.SetKey(kCdmSupportedCdmProxyProtocolsName, - MakeListValue("unknown", "intel")); - EXPECT_TRUE(ParseCdmManifest(manifest, &capability)); - CheckProxyProtocols(capability.cdm_proxy_protocols, - {media::CdmProxy::Protocol::kIntel}); - } - { - // Wrong types are an error. - CdmCapability capability; - manifest.SetStringKey(kCdmSupportedCdmProxyProtocolsName, "intel"); - EXPECT_FALSE(ParseCdmManifest(manifest, &capability)); - } - { - // Missing values are OK. - CdmCapability capability; - EXPECT_TRUE(manifest.RemoveKey(kCdmSupportedCdmProxyProtocolsName)); - EXPECT_TRUE(ParseCdmManifest(manifest, &capability)); - CheckProxyProtocols(capability.cdm_proxy_protocols, {}); - } -} - TEST(CdmManifestTest, FileManifest) { const char kVersion[] = "1.2.3.4"; @@ -446,8 +396,6 @@ CheckSessionTypes(capability.session_types, {media::CdmSessionType::kTemporary, media::CdmSessionType::kPersistentLicense}); - CheckProxyProtocols(capability.cdm_proxy_protocols, - {media::CdmProxy::Protocol::kIntel}); } TEST(CdmManifestTest, FileManifestNoVersion) { @@ -525,7 +473,6 @@ {media::EncryptionScheme::kCenc}); CheckSessionTypes(capability.session_types, {media::CdmSessionType::kTemporary}); - CheckProxyProtocols(capability.cdm_proxy_protocols, {}); } TEST(CdmManifestTest, FileManifestNotDictionary) {
diff --git a/chrome/common/pdf_util.cc b/chrome/common/pdf_util.cc index cda7621..012049a95 100644 --- a/chrome/common/pdf_util.cc +++ b/chrome/common/pdf_util.cc
@@ -19,9 +19,9 @@ } std::string GetPDFPlaceholderHTML(const GURL& pdf_url) { - std::string template_html = ui::ResourceBundle::GetSharedInstance() - .GetRawDataResource(IDR_PDF_PLUGIN_HTML) - .as_string(); + std::string template_html = + ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( + IDR_PDF_PLUGIN_HTML); webui::AppendWebUiCssTextDefaults(&template_html); base::DictionaryValue values;
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_bn.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_bn.xtb index 2c70263..baf288b 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_bn.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_bn.xtb
@@ -18,6 +18,7 @@ <translation id="4744575902940448763">আপনার অফিস অ্যাকাউন্টের পাসওয়ার্ড আপনার Windows প্রোফাইলে সিঙ্ক করে রাখা যায়নি, কারণ আপনার সংস্থা চায় না আপনার ডিভাইসে পাসওয়ার্ড আপডেট করে রাখা হোক। সহায়তার জন্য আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation> <translation id="5186761973554910131">পাসওয়ার্ড পরিবর্তনের চেষ্টা করার সময় কম্পিউটারের নাম ভুল দেওয়া হয়েছে। আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation> <translation id="5265714013989877288">আপনার Windows-এর পাসওয়ার্ড পরিবর্তন করার সময় একটি সমস্যা হওয়ার কারণে আর আগে কোনও কাজ করা যাচ্ছে না। আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation> +<translation id="5581861273642234526">আগে থেকেই এই ডিভাইসে আরেকটি কাজের অ্যাকাউন্ট যোগ করা আছে। আপনার Windows অ্যাকাউন্ট দিয়ে সাইন-ইন করুন।</translation> <translation id="6033715878377252112">Windows সহায়তাকারীর জন্য Google ক্রেডেনশিয়াল প্রোভাইডার</translation> <translation id="6149399665202317746">Windows-এর জন্য Google ক্রেডেনশিয়াল প্রোভাইডার</translation> <translation id="6243062314475217481">নিরাপত্তা সুনিশ্চিত করার জন্য, Windows-এ পাসওয়ার্ডের ক্ষেত্রে যে জটিলতার প্রয়োজনীয়তা স্থির করা হয়েছে, তার সাথে আপনার অফিস অ্যাকাউন্টের পাসওয়ার্ড মানানসই নয়। সহায়তার জন্য আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_iw.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_iw.xtb index 85cca0d3..49d29cb 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_iw.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_iw.xtb
@@ -18,6 +18,7 @@ <translation id="4744575902940448763">לא ניתן לסנכרן את סיסמת החשבון שלך לצורכי עבודה עם הפרופיל שלך ב-Windows, מאחר שעדכון הסיסמאות במכשיר הוגבל על ידי הארגון. יש לפנות אל מנהל המערכת כדי לקבל עזרה.</translation> <translation id="5186761973554910131">בזמן הניסיון לשנות סיסמה צוין שם מחשב לא חוקי. עליך לפנות למנהל המערכת.</translation> <translation id="5265714013989877288">לא ניתן להמשיך, מאחר שאירעה שגיאה במהלך החלפת הסיסמה שלך ל-Windows. יש לפנות למנהל המערכת.</translation> +<translation id="5581861273642234526">כבר יש חשבון אחר לצורכי עבודה המשויך למכשיר הזה. עליך להיכנס עם חשבון Windows שלך.</translation> <translation id="6033715878377252112">כלי העזרה של ספק פרטי הכניסה של Google ל-Windows</translation> <translation id="6149399665202317746">ספק פרטי הכניסה של Google ל-Windows</translation> <translation id="6243062314475217481">סיסמת החשבון שלך לצורכי עבודה לא עומדת בדרישות המורכבות של Windows. יש לפנות אל מנהל המערכת כדי לקבל עזרה.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ta.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ta.xtb index 66a8efd..5314d58 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ta.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ta.xtb
@@ -18,6 +18,7 @@ <translation id="4744575902940448763">நிறுவனம் உங்கள் சாதனத்தில் கடவுச்சொல் புதுப்பிப்புகளைக் கட்டுப்படுத்தி உள்ளதால் Windows சுயவிவரத்துடன் உங்கள் பணிக் கணக்கின் கடவுச்சொல்லை ஒத்திசைக்க முடியவில்லை. உதவிக்கு உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation> <translation id="5186761973554910131">கடவுச்சொல்லை மாற்ற முயலும்போது தவறான கம்ப்யூட்டர் பெயர் வழங்கப்பட்டது. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation> <translation id="5265714013989877288">உங்கள் Windows கடவுச்சொல்லை மாற்றும்போது பிழை ஏற்பட்டதால் தொடர முடியவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation> +<translation id="5581861273642234526">இந்த சாதனத்துடன் ஏற்கனவே வேறொரு பணிக் கணக்கு இணைக்கப்பட்டுள்ளது. உங்கள் Windows கணக்கைப் பயன்படுத்தி உள்நுழையவும்.</translation> <translation id="6033715878377252112">Windowsஸுக்கான Google அனுமதிச் சான்று வழங்குநர் உதவி நிரல்</translation> <translation id="6149399665202317746">Windowsஸுக்கான Google அனுமதிச் சான்று வழங்குநர்</translation> <translation id="6243062314475217481">உங்கள் பணிக் கணக்கின் கடவுச்சொல் Windows கடினத்தன்மை தொடர்பான தேவைகளுடன் பொருந்தவில்லை. உதவிக்கு உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
diff --git a/chrome/gpu/BUILD.gn b/chrome/gpu/BUILD.gn index 1a36a3c..6eb72c7 100644 --- a/chrome/gpu/BUILD.gn +++ b/chrome/gpu/BUILD.gn
@@ -20,25 +20,6 @@ "chrome_content_gpu_client.h", ] - if (enable_cdm_proxy) { - deps += [ - "//media/cdm:cdm_paths", - "//media/cdm/library_cdm/clear_key_cdm:clear_key_cdm_proxy", - ] - - if (enable_widevine && is_win) { - sources += [ - "widevine_cdm_proxy_factory.cc", - "widevine_cdm_proxy_factory.h", - ] - deps += [ - "//media", - "//media/gpu", - ] - libs = [ "d3d11.lib" ] - } - } - if (is_chromeos) { deps += [ "//components/arc/mojom:media",
diff --git a/chrome/gpu/OWNERS b/chrome/gpu/OWNERS index 9f3bbe0..015071a1 100644 --- a/chrome/gpu/OWNERS +++ b/chrome/gpu/OWNERS
@@ -2,7 +2,6 @@ file://media/OWNERS per-file chrome_content_gpu_client*=file://components/arc/video_accelerator/OWNERS -per-file widevine_cdm_proxy*=file://media/OWNERS # For security review per-file browser_exposed_gpu_interfaces.cc=set noparent
diff --git a/chrome/gpu/chrome_content_gpu_client.cc b/chrome/gpu/chrome_content_gpu_client.cc index 89991152..25a38cb 100644 --- a/chrome/gpu/chrome_content_gpu_client.cc +++ b/chrome/gpu/chrome_content_gpu_client.cc
@@ -18,16 +18,6 @@ #include "content/public/common/service_names.mojom.h" #include "media/media_buildflags.h" -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/cdm/cdm_paths.h" -#include "media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.h" -#include "third_party/widevine/cdm/buildflags.h" -#if BUILDFLAG(ENABLE_WIDEVINE) && defined(OS_WIN) -#include "chrome/gpu/widevine_cdm_proxy_factory.h" -#include "third_party/widevine/cdm/widevine_cdm_common.h" -#endif // BUILDFLAG(ENABLE_WIDEVINE) && defined(OS_WIN) -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - #if defined(OS_CHROMEOS) #include "components/arc/video_accelerator/protected_buffer_manager.h" #include "ui/ozone/public/ozone_platform.h" @@ -91,21 +81,6 @@ metrics::CallStackProfileParams::COMPOSITOR_THREAD)); } -#if BUILDFLAG(ENABLE_CDM_PROXY) -std::unique_ptr<media::CdmProxy> ChromeContentGpuClient::CreateCdmProxy( - const base::Token& cdm_guid) { - if (cdm_guid == media::kClearKeyCdmGuid) - return std::make_unique<media::ClearKeyCdmProxy>(); - -#if BUILDFLAG(ENABLE_WIDEVINE) && defined(OS_WIN) - if (cdm_guid == kWidevineCdmGuid) - return CreateWidevineCdmProxy(); -#endif // BUILDFLAG(ENABLE_WIDEVINE) && defined(OS_WIN) - - return nullptr; -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - #if defined(OS_CHROMEOS) scoped_refptr<arc::ProtectedBufferManager> ChromeContentGpuClient::GetProtectedBufferManager() {
diff --git a/chrome/gpu/chrome_content_gpu_client.h b/chrome/gpu/chrome_content_gpu_client.h index 90a407b..acffe95 100644 --- a/chrome/gpu/chrome_content_gpu_client.h +++ b/chrome/gpu/chrome_content_gpu_client.h
@@ -34,11 +34,6 @@ void PostCompositorThreadCreated( base::SingleThreadTaskRunner* task_runner) override; -#if BUILDFLAG(ENABLE_CDM_PROXY) - std::unique_ptr<media::CdmProxy> CreateCdmProxy( - const base::Token& cdm_guid) override; -#endif - #if defined(OS_CHROMEOS) scoped_refptr<arc::ProtectedBufferManager> GetProtectedBufferManager(); #endif
diff --git a/chrome/gpu/widevine_cdm_proxy_factory.cc b/chrome/gpu/widevine_cdm_proxy_factory.cc deleted file mode 100644 index 9e1fee3a..0000000 --- a/chrome/gpu/widevine_cdm_proxy_factory.cc +++ /dev/null
@@ -1,70 +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/gpu/widevine_cdm_proxy_factory.h" - -#include <comdef.h> -#include <initguid.h> - -#include "base/logging.h" -#include "base/stl_util.h" -#include "build/build_config.h" -#include "media/cdm/cdm_proxy.h" -#include "media/gpu/windows/d3d11_cdm_proxy.h" - -namespace { - -// Alias for printing HRESULT. -const auto PrintHr = logging::SystemErrorCodeToString; - -// clang-format off -DEFINE_GUID(kD3DCryptoTypeIntelWidevine, - 0x586e681, 0x4e14, 0x4133, 0x85, 0xe5, 0xa1, 0x4, 0x1f, 0x59, 0x9e, 0x26); -// clang-format on - -} // namespace - -std::unique_ptr<media::CdmProxy> CreateWidevineCdmProxy() { - Microsoft::WRL::ComPtr<ID3D11Device> device; - Microsoft::WRL::ComPtr<ID3D11VideoDevice> video_device; - - // D3D11CdmProxy requires D3D_FEATURE_LEVEL_11_1. - const D3D_FEATURE_LEVEL feature_levels[] = {D3D_FEATURE_LEVEL_11_1}; - - // Create device and pupulate |device|. - HRESULT hresult = D3D11CreateDevice( - nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, feature_levels, - base::size(feature_levels), D3D11_SDK_VERSION, device.GetAddressOf(), - nullptr, nullptr); - - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to create the D3D11Device: " << PrintHr(hresult); - return nullptr; - } - - hresult = device.CopyTo(video_device.GetAddressOf()); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to get ID3D11VideoDevice: " << PrintHr(hresult); - return nullptr; - } - - D3D11_VIDEO_CONTENT_PROTECTION_CAPS caps = {}; - - // Check whether kD3DCryptoTypeIntelWidevine is supported. - // We do not care about decoder support so just use a null decoder profile. - hresult = video_device->GetContentProtectionCaps(&kD3DCryptoTypeIntelWidevine, - nullptr, &caps); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to GetContentProtectionCaps: " << PrintHr(hresult); - return nullptr; - } - - media::D3D11CdmProxy::FunctionIdMap function_id_map{ - {media::CdmProxy::Function::kIntelNegotiateCryptoSessionKeyExchange, - 0x90000001}}; - - return std::make_unique<media::D3D11CdmProxy>( - kD3DCryptoTypeIntelWidevine, media::CdmProxy::Protocol::kIntel, - std::move(function_id_map)); -}
diff --git a/chrome/gpu/widevine_cdm_proxy_factory.h b/chrome/gpu/widevine_cdm_proxy_factory.h deleted file mode 100644 index e2b3b05..0000000 --- a/chrome/gpu/widevine_cdm_proxy_factory.h +++ /dev/null
@@ -1,16 +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_GPU_WIDEVINE_CDM_PROXY_FACTORY_H_ -#define CHROME_GPU_WIDEVINE_CDM_PROXY_FACTORY_H_ - -#include <memory> - -namespace media { -class CdmProxy; -} - -std::unique_ptr<media::CdmProxy> CreateWidevineCdmProxy(); - -#endif // CHROME_GPU_WIDEVINE_CDM_PROXY_FACTORY_H_
diff --git a/chrome/gpu/widevine_cdm_proxy_factory_unittest.cc b/chrome/gpu/widevine_cdm_proxy_factory_unittest.cc deleted file mode 100644 index 41270dc..0000000 --- a/chrome/gpu/widevine_cdm_proxy_factory_unittest.cc +++ /dev/null
@@ -1,14 +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/gpu/widevine_cdm_proxy_factory.h" - -#include "media/cdm/cdm_proxy.h" -#include "testing/gtest/include/gtest/gtest.h" - -TEST(WidevineCdmProxyFactoryTest, CreateWidevineCdmProxy) { - // This fucntion may return null on unsupported devices. Hence ignore the - // return value and just make sure we do not crash in all cases. - CreateWidevineCdmProxy(); -}
diff --git a/chrome/renderer/media/chrome_key_systems.cc b/chrome/renderer/media/chrome_key_systems.cc index b1c80064..045f2d62 100644 --- a/chrome/renderer/media/chrome_key_systems.cc +++ b/chrome/renderer/media/chrome_key_systems.cc
@@ -81,8 +81,6 @@ "org.chromium.externalclearkey.storageidtest"; static const char kExternalClearKeyDifferentGuidTestKeySystem[] = "org.chromium.externalclearkey.differentguid"; - static const char kExternalClearKeyCdmProxyKeySystem[] = - "org.chromium.externalclearkey.cdmproxy"; // TODO(xhwang): Actually use |capability| to determine capabilities. media::mojom::KeySystemCapabilityPtr capability; @@ -135,10 +133,6 @@ // A key system that is registered with a different CDM GUID. concrete_key_systems->emplace_back(new cdm::ExternalClearKeyProperties( kExternalClearKeyDifferentGuidTestKeySystem)); - - // A key system that requires the use of CdmProxy. - concrete_key_systems->emplace_back( - new cdm::ExternalClearKeyProperties(kExternalClearKeyCdmProxyKeySystem)); } #if BUILDFLAG(ENABLE_WIDEVINE)
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 74203b8..4afb971 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4701,11 +4701,6 @@ "../browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_test_utils.h", "../browser/safe_browsing/test_extension_event_observer.cc", "../browser/safe_browsing/test_extension_event_observer.h", - - # TODO(1026557): The below test depends on TestExtensionEventObserver. - # Maybe it should be changed to not use that class so that it could be - # run on all platforms and hopefully componentized? - "../browser/ssl/ssl_blocking_page_unittest.cc", "../browser/sync/glue/extensions_activity_monitor_unittest.cc", "../browser/sync_file_system/drive_backend/callback_helper_unittest.cc", "../browser/sync_file_system/drive_backend/callback_tracker_unittest.cc", @@ -5457,10 +5452,6 @@ ] } - if (enable_cdm_proxy && enable_widevine && is_win) { - sources += [ "../gpu/widevine_cdm_proxy_factory_unittest.cc" ] - } - if (enable_widevine_cdm_component && is_desktop_linux) { sources += [ "../common/media/component_widevine_cdm_hint_file_linux_unittest.cc" ] @@ -5689,6 +5680,7 @@ "../browser/extensions/extension_keybinding_apitest.cc", "../browser/extensions/omnibox_focus_interactive_test.cc", "../browser/extensions/window_open_interactive_apitest.cc", + "../browser/focus_ring_browsertest.cc", "../browser/global_keyboard_shortcuts_mac_browsertest.mm", "../browser/mouse_events_interactive_uitest.cc", "../browser/notifications/platform_notification_service_interactive_uitest.cc",
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_anchor.png b/chrome/test/data/focus_rings/focus_ring_browsertest_anchor.png new file mode 100644 index 0000000..ea3d026 --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_anchor.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_anchor_mac.png b/chrome/test/data/focus_rings/focus_ring_browsertest_anchor_mac.png new file mode 100644 index 0000000..d8cc1c5 --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_anchor_mac.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_anchor_win.png b/chrome/test/data/focus_rings/focus_ring_browsertest_anchor_win.png new file mode 100644 index 0000000..638deaa --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_anchor_win.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_button.png b/chrome/test/data/focus_rings/focus_ring_browsertest_button.png new file mode 100644 index 0000000..0ab3f0e --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_button.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_button_mac.png b/chrome/test/data/focus_rings/focus_ring_browsertest_button_mac.png new file mode 100644 index 0000000..d5d47b4 --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_button_mac.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_button_win.png b/chrome/test/data/focus_rings/focus_ring_browsertest_button_win.png new file mode 100644 index 0000000..e3c735b --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_button_win.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox.png b/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox.png new file mode 100644 index 0000000..73ec818 --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox_mac.png b/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox_mac.png new file mode 100644 index 0000000..784322f --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox_mac.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox_win.png b/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox_win.png new file mode 100644 index 0000000..73ec818 --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_checkbox_win.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_radio.png b/chrome/test/data/focus_rings/focus_ring_browsertest_radio.png new file mode 100644 index 0000000..0f7250a --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_radio.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_radio_mac.png b/chrome/test/data/focus_rings/focus_ring_browsertest_radio_mac.png new file mode 100644 index 0000000..42feacec --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_radio_mac.png Binary files differ
diff --git a/chrome/test/data/focus_rings/focus_ring_browsertest_radio_win.png b/chrome/test/data/focus_rings/focus_ring_browsertest_radio_win.png new file mode 100644 index 0000000..0f7250a --- /dev/null +++ b/chrome/test/data/focus_rings/focus_ring_browsertest_radio_win.png Binary files differ
diff --git a/chrome/test/data/webui/settings/incompatible_applications_page_test.js b/chrome/test/data/webui/settings/incompatible_applications_page_test.js index b8d27fa..20d4c61 100644 --- a/chrome/test/data/webui/settings/incompatible_applications_page_test.js +++ b/chrome/test/data/webui/settings/incompatible_applications_page_test.js
@@ -3,7 +3,7 @@ // found in the LICENSE file. // clang-format off -// #import {IncompatibleApplicationsBrowserProxyImpl, IncompatibleApplication} from 'chrome://settings/settings.js'; +// #import {IncompatibleApplicationsBrowserProxyImpl, IncompatibleApplication} from 'chrome://settings/lazy_load.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js'; // #import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js';
diff --git a/chrome/test/data/webui/settings/people_page_test.js b/chrome/test/data/webui/settings/people_page_test.js index ea333cd..7802700b 100644 --- a/chrome/test/data/webui/settings/people_page_test.js +++ b/chrome/test/data/webui/settings/people_page_test.js
@@ -117,7 +117,7 @@ // The correct /manageProfile link row is shown. assertFalse(!!peoplePage.$$('#edit-profile')); - assertTrue(!!peoplePage.$$('#picture-subpage-trigger')); + assertTrue(!!peoplePage.$$('#profile-row')); // Control element doesn't exist when policy forbids sync. sync_test_util.simulateSyncStatus({ @@ -165,7 +165,7 @@ // The correct /manageProfile link row is shown. assertTrue(!!peoplePage.$$('#edit-profile')); - assertFalse(!!peoplePage.$$('#picture-subpage-trigger')); + assertFalse(!!peoplePage.$$('#profile-row')); sync_test_util.simulateSyncStatus({ signedIn: false,
diff --git a/chrome/test/data/webui/settings/people_page_test_cros.js b/chrome/test/data/webui/settings/people_page_test_cros.js index 5615d4b..a4b8b8da 100644 --- a/chrome/test/data/webui/settings/people_page_test_cros.js +++ b/chrome/test/data/webui/settings/people_page_test_cros.js
@@ -136,9 +136,6 @@ }); // Profile row opens account manager, so the row is actionable. - const profileIcon = peoplePage.$$('#profile-icon'); - assertTrue(!!profileIcon); - assertTrue(profileIcon.hasAttribute('actionable')); const profileRow = peoplePage.$$('#profile-row'); assertTrue(!!profileRow); assertTrue(profileRow.hasAttribute('actionable'));
diff --git a/chromecast/bindings/bindings_manager_cast.cc b/chromecast/bindings/bindings_manager_cast.cc index bdebecf3..4c3c6be 100644 --- a/chromecast/bindings/bindings_manager_cast.cc +++ b/chromecast/bindings/bindings_manager_cast.cc
@@ -28,7 +28,7 @@ BindingsManagerCast::BindingsManagerCast() : cast_web_contents_(nullptr) { // NamedMessagePortConnector binding will be injected into page first. AddBinding(kNamedMessagePortConnectorBindingsId, - ui::ResourceBundle::GetSharedInstance().GetRawDataResource( + ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( IDR_PORT_CONNECTOR_JS)); }
diff --git a/chromecast/crash/linux/crash_uploader.cc b/chromecast/crash/linux/crash_uploader.cc index a01d97dc..a52b977 100644 --- a/chromecast/crash/linux/crash_uploader.cc +++ b/chromecast/crash/linux/crash_uploader.cc
@@ -32,6 +32,8 @@ int main(int argc, char** argv) { base::AtExitManager exit_manager; base::CommandLine::Init(argc, argv); + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + chromecast::RebootUtil::Initialize(command_line->argv()); chromecast::RegisterPathProvider(); logging::InitLogging(logging::LoggingSettings()); @@ -47,7 +49,6 @@ std::unique_ptr<chromecast::CastSysInfo> sys_info = chromecast::CreateSysInfo(); - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); std::string server_url( command_line->GetSwitchValueASCII(switches::kCrashServerUrl)); chromecast::MinidumpUploader uploader(sys_info.get(), server_url);
diff --git a/chromecast/crash/linux/minidump_uploader.cc b/chromecast/crash/linux/minidump_uploader.cc index 4d0c114..f2d785d 100644 --- a/chromecast/crash/linux/minidump_uploader.cc +++ b/chromecast/crash/linux/minidump_uploader.cc
@@ -264,6 +264,8 @@ // Save our state by flushing our dumps to the lockfile // We'll come back around later and try again. LOG(ERROR) << "Upload report failed. response: " << response; + // The increment will happen when it retries the upload. + DecrementNumDumpsInCurrentPeriod(); SetCurrentDumps(dumps); return true; }
diff --git a/chromecast/crash/linux/synchronized_minidump_manager.cc b/chromecast/crash/linux/synchronized_minidump_manager.cc index 459bc3e..6527bf3 100644 --- a/chromecast/crash/linux/synchronized_minidump_manager.cc +++ b/chromecast/crash/linux/synchronized_minidump_manager.cc
@@ -391,6 +391,15 @@ return SetRatelimitPeriodDumps(metadata_.get(), last_dumps + 1); } +bool SynchronizedMinidumpManager::DecrementNumDumpsInCurrentPeriod() { + DCHECK(metadata_); + int last_dumps = GetRatelimitPeriodDumps(metadata_.get()); + if (last_dumps > 0) { + return SetRatelimitPeriodDumps(metadata_.get(), last_dumps - 1); + } + return true; +} + bool SynchronizedMinidumpManager::CanUploadDump() { base::Time cur_time = base::Time::Now(); base::Time period_start = GetRatelimitPeriodStart(metadata_.get());
diff --git a/chromecast/crash/linux/synchronized_minidump_manager.h b/chromecast/crash/linux/synchronized_minidump_manager.h index 34608ab..a84f2597 100644 --- a/chromecast/crash/linux/synchronized_minidump_manager.h +++ b/chromecast/crash/linux/synchronized_minidump_manager.h
@@ -92,6 +92,10 @@ // Returns true on success, false on error. bool IncrementNumDumpsInCurrentPeriod(); + // Decrement the number of dumps in the current ratelimit period. + // Returns true on success, false on error. + bool DecrementNumDumpsInCurrentPeriod(); + // Returns true when dumps uploaded in current rate limit period is less than // |kRatelimitPeriodMaxDumps|. Resets rate limit period if period time has // elapsed.
diff --git a/components/BUILD.gn b/components/BUILD.gn index 73c4e934..bbfe136 100644 --- a/components/BUILD.gn +++ b/components/BUILD.gn
@@ -278,6 +278,7 @@ "//components/subresource_filter/content/common:unit_tests", "//components/subresource_filter/content/renderer:unit_tests", "//components/tracing:unit_tests", + "//components/translate/content/browser:unit_tests", "//components/translate/content/renderer:unit_tests", "//components/ukm/content:unit_tests", "//components/visitedlink/test:unit_tests",
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.cc index d679a586..688345e 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.cc
@@ -37,7 +37,7 @@ registry->RegisterInt64Pref(prefs::kDataReductionProxyLastConfigRetrievalTime, 0L); - registry->RegisterIntegerPref(prefs::kThisWeekNumber, false); + registry->RegisterIntegerPref(prefs::kThisWeekNumber, 0); registry->RegisterDictionaryPref( prefs::kThisWeekServicesDownstreamBackgroundKB, PrefRegistry::LOSSY_PREF); registry->RegisterDictionaryPref( @@ -79,7 +79,7 @@ registry->RegisterInt64Pref(prefs::kDataReductionProxyLastConfigRetrievalTime, 0L); - registry->RegisterIntegerPref(prefs::kThisWeekNumber, false); + registry->RegisterIntegerPref(prefs::kThisWeekNumber, 0); registry->RegisterDictionaryPref( prefs::kThisWeekServicesDownstreamBackgroundKB, PrefRegistry::LOSSY_PREF); registry->RegisterDictionaryPref(
diff --git a/components/dbus/menu/menu_property_list_unittest.cc b/components/dbus/menu/menu_property_list_unittest.cc index 588e7a2f..bd4b90b 100644 --- a/components/dbus/menu/menu_property_list_unittest.cc +++ b/components/dbus/menu/menu_property_list_unittest.cc
@@ -67,12 +67,10 @@ EXPECT_LE(command_id, 0); return label_; } - bool GetIconForCommandId(int command_id, gfx::Image* icon) const override { + ui::ImageModel GetIconForCommandId(int command_id) const override { EXPECT_LE(command_id, 0); - if (icon_.IsEmpty()) - return false; - *icon = icon_; - return true; + return icon_.IsEmpty() ? ui::ImageModel() + : ui::ImageModel::FromImage(icon_); } void ExecuteCommand(int command_id, int event_flags) override { EXPECT_LE(command_id, 0);
diff --git a/components/feed/core/v2/feed_stream.cc b/components/feed/core/v2/feed_stream.cc index d8e8fac4..9cb985b 100644 --- a/components/feed/core/v2/feed_stream.cc +++ b/components/feed/core/v2/feed_stream.cc
@@ -296,6 +296,7 @@ void FeedStream::AttachSurface(SurfaceInterface* surface) { metrics_reporter_->SurfaceOpened(); + user_classifier_->OnEvent(UserClassifier::Event::kSuggestionsViewed); surfaces_.AddObserver(surface); surface_updater_->SurfaceAdded(surface); TriggerStreamLoad(); @@ -474,9 +475,11 @@ } void FeedStream::ReportOpenAction() { + user_classifier_->OnEvent(UserClassifier::Event::kSuggestionsUsed); metrics_reporter_->OpenAction(); } void FeedStream::ReportOpenInNewTabAction() { + user_classifier_->OnEvent(UserClassifier::Event::kSuggestionsUsed); metrics_reporter_->OpenInNewTabAction(); } void FeedStream::ReportSliceViewed(const std::string& slice_id) {
diff --git a/components/feed/core/v2/feed_stream_unittest.cc b/components/feed/core/v2/feed_stream_unittest.cc index 10a417a..b3b0198 100644 --- a/components/feed/core/v2/feed_stream_unittest.cc +++ b/components/feed/core/v2/feed_stream_unittest.cc
@@ -772,5 +772,28 @@ EXPECT_EQ(1, metrics_reporter_.slice_viewed_index); } +TEST_F(FeedStreamTest, OpeningTheFeedChangesUserClassification) { + ASSERT_EQ(UserClass::kActiveSuggestionsViewer, stream_->GetUserClass()); + for (int i = 0; i < 5; i++) { + TestSurface surface(stream_.get()); + task_environment_.FastForwardBy(base::TimeDelta::FromHours(100)); + } + ASSERT_EQ(UserClass::kRareSuggestionsViewer, stream_->GetUserClass()); + for (int i = 0; i < 5; i++) { + TestSurface surface(stream_.get()); + task_environment_.FastForwardBy(base::TimeDelta::FromHours(1)); + } + EXPECT_EQ(UserClass::kActiveSuggestionsViewer, stream_->GetUserClass()); +} + +TEST_F(FeedStreamTest, UsingTheFeedChangesUserClassification) { + ASSERT_EQ(UserClass::kActiveSuggestionsViewer, stream_->GetUserClass()); + for (int i = 0; i < 5; i++) { + task_environment_.FastForwardBy(base::TimeDelta::FromHours(1)); + stream_->ReportOpenAction(); + } + EXPECT_EQ(UserClass::kActiveSuggestionsConsumer, stream_->GetUserClass()); +} + } // namespace } // namespace feed
diff --git a/components/feed/core/v2/public/feed_stream_api.h b/components/feed/core/v2/public/feed_stream_api.h index 7c442c97..9a5934b 100644 --- a/components/feed/core/v2/public/feed_stream_api.h +++ b/components/feed/core/v2/public/feed_stream_api.h
@@ -56,8 +56,9 @@ // Rejects a change. Returns false if the change does not exist. virtual bool RejectEphemeralChange(EphemeralChangeId id) = 0; - // User interaction reporting. These should have no side-effects other than - // reporting metrics. + // User interaction reporting. These should have no side-effects other than: + // - reporting metrics + // - updating |UserClass| // A slice was viewed (2/3rds of it is in the viewport). Should be called // once for each viewed slice in the stream.
diff --git a/components/metrics/system_session_analyzer/system_session_analyzer_win.cc b/components/metrics/system_session_analyzer/system_session_analyzer_win.cc index 600fc82..f5833ca5 100644 --- a/components/metrics/system_session_analyzer/system_session_analyzer_win.cc +++ b/components/metrics/system_session_analyzer/system_session_analyzer_win.cc
@@ -113,8 +113,13 @@ SystemSessionAnalyzer::Status SystemSessionAnalyzer::IsSessionUnclean( base::Time timestamp) { - if (!EnsureInitialized()) + if (!EnsureInitialized()) { + // Insufficient events in the error log is a special-case with its own error + // code so that a truncated system log doesn't cause failures. + if (GetExtendedFailureStatus() == ExtendedStatus::EVENT_COUNT_MISMATCH) + return INSUFFICIENT_DATA; return INITIALIZE_FAILED; + } while (timestamp < coverage_start_ && sessions_queried_ < max_session_cnt_) { // Fetch the next session start and end events.
diff --git a/components/metrics/system_session_analyzer/system_session_analyzer_win.h b/components/metrics/system_session_analyzer/system_session_analyzer_win.h index f5d9708..21484603 100644 --- a/components/metrics/system_session_analyzer/system_session_analyzer_win.h +++ b/components/metrics/system_session_analyzer/system_session_analyzer_win.h
@@ -30,6 +30,7 @@ INITIALIZE_FAILED = 3, FETCH_EVENTS_FAILED = 4, PROCESS_SESSION_FAILED = 5, + INSUFFICIENT_DATA = 6, }; // Track internal details of what went wrong.
diff --git a/components/metrics/system_session_analyzer/system_session_analyzer_win_unittest.cc b/components/metrics/system_session_analyzer/system_session_analyzer_win_unittest.cc index 92a77c7..76d6129 100644 --- a/components/metrics/system_session_analyzer/system_session_analyzer_win_unittest.cc +++ b/components/metrics/system_session_analyzer/system_session_analyzer_win_unittest.cc
@@ -35,10 +35,19 @@ // session. TEST(SystemSessionAnalyzerTest, ValidateEvents) { SystemSessionAnalyzer analyzer(1U); - EXPECT_EQ(SystemSessionAnalyzer::CLEAN, - analyzer.IsSessionUnclean(base::Time::Now())) - << "Extended error code is: " - << static_cast<int>(analyzer.GetExtendedFailureStatus()); + auto is_session_unclean = analyzer.IsSessionUnclean(base::Time::Now()); + // If the system event log rate is high enough then there may not be enough + // events to make a clean/unclean determination. Check for this situation and + // don't treat it as a failure. See https://crbug.com/968440 for details. + if (is_session_unclean == SystemSessionAnalyzer::INSUFFICIENT_DATA) { + // This warning can be ignored, but it does mean that our clean/unclean + // check did not give an answer. + LOG(WARNING) << "Insufficient events found in ValidateEvents."; + } else { + EXPECT_EQ(SystemSessionAnalyzer::CLEAN, is_session_unclean) + << "Extended error code is: " + << static_cast<int>(analyzer.GetExtendedFailureStatus()); + } } // Stubs FetchEvents. @@ -96,7 +105,7 @@ TEST(SystemSessionAnalyzerTest, NoEvent) { StubSystemSessionAnalyzer analyzer(0U); - EXPECT_EQ(SystemSessionAnalyzer::INITIALIZE_FAILED, + EXPECT_EQ(SystemSessionAnalyzer::INSUFFICIENT_DATA, analyzer.IsSessionUnclean(base::Time::Now())); }
diff --git a/components/omnibox/browser/location_bar_model_impl.cc b/components/omnibox/browser/location_bar_model_impl.cc index abcf58ad..4897f32d 100644 --- a/components/omnibox/browser/location_bar_model_impl.cc +++ b/components/omnibox/browser/location_bar_model_impl.cc
@@ -70,6 +70,16 @@ if (base::FeatureList::IsEnabled(omnibox::kHideFileUrlScheme)) format_types |= url_formatter::kFormatUrlOmitFileScheme; + if (dom_distiller::url_utils::IsDistilledPage(GetURL())) { + // We explicitly elide the scheme here to ensure that HTTPS and HTTP will + // be removed for display: Reader mode pages should not display a scheme, + // and should only run on HTTP/HTTPS pages. + // Users will be able to see the scheme when the URL is focused or being + // edited in the omnibox. + format_types |= url_formatter::kFormatUrlOmitHTTP; + format_types |= url_formatter::kFormatUrlOmitHTTPS; + } + return GetFormattedURL(format_types); } @@ -87,10 +97,10 @@ GURL url(GetURL()); // Special handling for dom-distiller:. Instead of showing internal reader - // mode URLs, show the original article URL without a http or https scheme. - // Note that this does not disallow the user from copy-pasting the reader - // mode URL, or from seeing it in the view-source url. Note that this also - // impacts GetFormattedFullURL which uses GetFormattedURL as a helper. + // mode URLs, show the original article URL in the omnibox. + // Note that this does not disallow the user from seeing the distilled page + // URL in the view-source url or devtools. Note that this also impacts + // GetFormattedFullURL which uses GetFormattedURL as a helper. // Virtual URLs were not a good solution for Reader Mode URLs because some // security UI is based off of the virtual URL rather than the original URL, // and Reader Mode has its own security chip. In addition virtual URLs would @@ -98,13 +108,8 @@ // Reader Mode pages. // Note: if the URL begins with dom-distiller:// but is invalid we display it // as-is because it cannot be transformed into an article URL. - if (dom_distiller::url_utils::IsDistilledPage(url)) { - // Ensure that HTTPS and HTTP will be removed. Reader mode should not - // display a scheme, and should only run on HTTP/HTTPS pages. - format_types |= url_formatter::kFormatUrlOmitHTTP; - format_types |= url_formatter::kFormatUrlOmitHTTPS; + if (dom_distiller::url_utils::IsDistilledPage(url)) url = dom_distiller::url_utils::GetOriginalUrlFromDistillerUrl(url); - } // Note that we can't unescape spaces here, because if the user copies this // and pastes it into another program, that program may think the URL ends at
diff --git a/components/omnibox/browser/location_bar_model_impl_unittest.cc b/components/omnibox/browser/location_bar_model_impl_unittest.cc index e8bc0b5..9f9b0cf6 100644 --- a/components/omnibox/browser/location_bar_model_impl_unittest.cc +++ b/components/omnibox/browser/location_bar_model_impl_unittest.cc
@@ -149,13 +149,16 @@ EXPECT_EQ(originalDisplayUrl, model()->GetURLForDisplay()); EXPECT_EQ(originalFormattedFullUrl, model()->GetFormattedFullURL()); - // Similarly, https scheme should also be hidden. + // Similarly, https scheme should also be hidden, except from + // GetFormattedFullURL, because kFormatUrlOmitDefaults does not omit https. const GURL https_url("https://www.example.com/article.html"); distilled = dom_distiller::url_utils::GetDistillerViewUrlFromUrl( dom_distiller::kDomDistillerScheme, https_url, "title"); delegate()->SetURL(distilled); EXPECT_EQ(originalDisplayUrl, model()->GetURLForDisplay()); - EXPECT_EQ(originalFormattedFullUrl, model()->GetFormattedFullURL()); + EXPECT_EQ( + base::ASCIIToUTF16("https://www.example.com/article.html/TestSuffix"), + model()->GetFormattedFullURL()); // Invalid dom-distiller:// URLs should be shown, because they do not // correspond to any article.
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 25e8c91..1e644fa 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -15871,13 +15871,13 @@ }, 'example_value': ['https://mydomain.com/login.html', 'https://login.mydomain.com'], 'id': 423, - 'caption': '''Configure the list of enterprise login URLs where password protection service should capture fingerprint of password.''', + 'caption': '''Configure the list of enterprise login URLs where password protection service should capture salted hashes of passwords.''', 'tags': [], - 'desc': '''Configure the list of enterprise login URLs (HTTP and HTTPS schemes only). Fingerprint of password will be captured on these URLs and used for password reuse detection. - In order for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to correctly capture password fingerprints, please make sure your login pages follow the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms. + 'desc': '''Configure the list of enterprise login URLs (HTTP and HTTPS schemes only). Password protection service will capture salted hashes of passwords on these URLs and use them for password reuse detection. + In order for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to correctly capture password salted hashes, please make sure your login pages follow the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms. - If this setting is enabled, then password protection service will capture fingerprint of password on these URLs for password reuse detection purpose. - If this setting is disabled or not set, then password protection service will only capture password fingerprint on https://accounts.google.com. + If this setting is enabled, then password protection service will capture salted hashes of password on these URLs for password reuse detection purpose. + If this setting is disabled or not set, then password protection service will only capture password salted hashes on https://accounts.google.com. This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain. or Windows 10 Pro or Enterprise instances that enrolled for device management.''', }, { @@ -15895,7 +15895,7 @@ 'caption': '''Configure the change password URL.''', 'tags': [], 'desc': '''Configure the change password URL (HTTP and HTTPS schemes only). Password protection service will send users to this URL to change their password after seeing a warning in the browser. - In order for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to correctly capture the new password fingerprint on this change password page, please make sure your change password page follows the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms. + In order for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to correctly capture the salted hash of the new password on this change password page, please make sure your change password page follows the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms. If this setting is enabled, then password protection service will send users to this URL to change their password after seeing a warning in the browser. If this setting is disabled or not set, then password protection service will send users to https://myaccount.google.com to change their password.
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 775a14e..e83d257 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -358,6 +358,7 @@ Wenn die Richtlinie "EnableMediaRouter" auf "false" gesetzt ist, hat der Wert dieser Richtlinie keine Wirkung.</translation> <translation id="1509692106376861764">Diese Richtlinie wird ab <ph name="PRODUCT_NAME" />-Version 29 nicht mehr verwendet.</translation> <translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> aktivieren</translation> +<translation id="1515230621229117540">Aktiviert das unverankerte Menü für Bedienungshilfen</translation> <translation id="1515824657887788963">Einer Seite erlauben, während des Schließens synchrone XHR-Anfragen auszuführen.</translation> <translation id="1522425503138261032">Ermittlung des physischen Standorts des Nutzers durch Websites zulassen</translation> <translation id="1523774894176285446">Für konfigurierte Websites soll ein alternativer Browser geöffnet werden.</translation> @@ -3289,6 +3290,17 @@ Wenn diese Einstellung nicht festgelegt ist, verwendet <ph name="PRODUCT_NAME" /> einen Standardnamen für die Bibliothek.</translation> <translation id="5783009211970309878">Kopf- und Fußzeilen drucken</translation> +<translation id="5783576706065107606">Einschränkungen von <ph name="CORS" />-Prüfungen in der neuen <ph name="CORS" />-Implementierung erlauben, wodurch Erweiterungen kompatibles Verhalten beibehalten können und <ph name="PRODUCT_NAME" /> angegebene Header ohne <ph name="CORS" />-Prüfungen senden kann. + + Wird diese Liste leergelassen, versucht <ph name="PRODUCT_NAME" />, Erweiterungen auf kompatible Weise auszuführen und setzt keine <ph name="API" />-Änderungen für Version 79 von <ph name="PRODUCT_NAME" /> um, wie unter <ph name="WEB_REQUEST_API_MANUAL" /> erläutert. + + Wenn diese Liste die <ph name="HTTP" />-Headernamen von Anfragen enthält, werden diese bei der <ph name="CORS" />-Prüfung ignoriert und die Einschränkung von Prüfungen für Erweiterungen aktiviert. + + Ist die Liste nicht konfiguriert, wird keine der beiden zuvor beschriebenen Einschränkungen angewendet. + + Details zu <ph name="CORS" /> erhalten Sie unter <ph name="CORS_HELP_URL" />. + + Hinweis: Diese Richtlinie sollte ursprünglich planmäßig in <ph name="PRODUCT_NAME" />-Version 82 entfernt werden, wird jetzt aber erst in Version 84 entfernt.</translation> <translation id="5790763087505467169">Benachrichtigungen zum automatischen Start bei verwalteten Gastsitzungen reduzieren</translation> <translation id="5806128552675651249">Drucken nur ohne Hintergrundgrafiken zulassen</translation> <translation id="5809210507920527553">Legt die Einstellungen für den Linux-Container (Crostini) fest.</translation> @@ -3352,6 +3364,17 @@ Ist die Einstellung deaktiviert oder nicht festgelegt, wird der Standard-Domainname für das TalkGadget ("chromoting-host.talkgadget.google.com") für alle Hosts verwendet. Clients für den Remotezugriff sind von dieser Richtlinieneinstellung nicht betroffen. Diese verwenden immer "chromoting-client.talkgadget.google.com" für den Zugriff auf das TalkGadget.</translation> +<translation id="5888171512889380367">Alte <ph name="CORS" />-Implementierung statt des neuen <ph name="CORS" /> verwenden. + + Wenn diese Einstellung auf "true" festgelegt ist, wird die alte Implementierung verwendet, die kompatibel mit vorherigen Versionen sein sollte. + + Wird die Einstellung auf "false" gesetzt oder nicht konfiguriert, kommt die neue Implementierung zum Einsatz, die bei Enterprise-Nutzern Kompatibilitätsprobleme verursachen kann. + + Die Richtlinie wird nach einigen Meilensteinen entfernt. + + Details zu <ph name="CORS" /> erhalten Sie unter <ph name="CORS_HELP_URL" />. + + Hinweis: Diese Richtlinie sollte ursprünglich planmäßig in <ph name="PRODUCT_NAME" />-Version 82 entfernt werden, wird jetzt aber erst in Version 84 entfernt.</translation> <translation id="5893553533827140852">Wenn diese Einstellung aktiviert ist, wird für Anfragen zur Gnubby-Authentifizierung ein Proxy über eine Remote-Host-Verbindung verwendet. Wenn diese Einstellung deaktiviert oder nicht konfiguriert ist, wird kein Proxy für Anfragen zur Gnubby-Authentifizierung verwendet.</translation> @@ -3625,6 +3648,11 @@ Diese Richtlinie steht nur bei Windows-Instanzen zur Verfügung, die Teil einer <ph name="MS_AD_NAME" />-Domain sind, oder bei Windows 10 Pro- oder Enterprise-Instanzen, für die eine Geräteverwaltung eingerichtet ist.</translation> <translation id="6417265370957905582">Google Assistant</translation> +<translation id="6422575351619065453">Im Kioskmodus legt diese Einstellung fest, ob das unverankerte Menü für Bedienungshilfen angezeigt wird. + + Ist diese Richtlinie aktiviert, wird das unverankerte Menü für Bedienungshilfen immer angezeigt. + + Ist diese Richtlinie deaktiviert oder nicht konfiguriert, wird das unverankerte Menü für Bedienungshilfen nie angezeigt.</translation> <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation> <translation id="6426205278746959912">Android-Apps können nicht zur Verwendung eines Proxys gezwungen werden. Ein Teil der Proxyeinstellungen ist für Android-Apps verfügbar und kann auf freiwilliger Basis übernommen werden:
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index d0c0262..6fd58f2 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -4327,9 +4327,9 @@ このポリシーの値を設定しない場合は、この機能を許可しないものと見なされます。 - ユーザーのデバイスが管理対象の場合、この機能を使用できるかどうかは、対応するデバイス ポリシーの設定にも左右されます。 + ユーザーのデバイスが管理対象の場合、この機能を使用できるかどうかは、対応するデバイス ポリシーの設定にもよります。 - ユーザーのデバイスが管理対象でない場合、この機能を使用できるかどうかは、ユーザーがデバイスの所有者かどうかにも左右されます。</translation> + ユーザーのデバイスが管理対象でない場合、この機能を使用できるかどうかは、ユーザーがデバイスの所有者かどうかにもよります。</translation> <translation id="757395965347379751">この設定が有効になっていると、SHA-1 署名証明書が検証され、ローカルにインストールされた CA 証明書に関連付けされている限り、<ph name="PRODUCT_NAME" /> は SHA-1 署名証明書を許可します。 ただし、このポリシーは SHA-1 署名を許可するオペレーティング システムの証明書検証スタックにより異なります。OS のアップデートにより SHA-1 署名証明書を処理する OS が変更になると、このポリシーは効力を失います。さらに、このポリシーは一時的な措置として企業に SHA-1 から移行するための猶予期間を与えることを目的としています。このポリシーは 2019 年 1 月 1 日をめどに削除される予定です。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 17461d0..ce52522 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -3817,7 +3817,7 @@ 이 정책은 EnabledPlugins 및 DisabledPluginsExceptions에 의해 재정의될 수 있습니다. 아 정책을 설정하지 않으면 사용자가 시스템에 설치된 플러그인 중 하드 코딩되었으며 호환되지 않거나, 오래되었거나, 위험한 플러인을 제외한 모든 플러그인을 사용할 수 있습니다.</translation> -<translation id="6571871508154591774">카메라, 브라우저 설정 및 OS 설정 기능을 사용 중지로 구성</translation> +<translation id="6571871508154591774">카메라, 브라우저 설정 및 OS 설정 기능을 사용 중지로 설정</translation> <translation id="6573305661369899995">URL 제한의 외부 소스 설정</translation> <translation id="6583851521569686409">프린터 목록을 설정합니다.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 5130efd1..57474f5 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -360,6 +360,7 @@ Als het beleid EnableMediaRouter is ingesteld op 'False', heeft de waarde van dit beleid geen effect.</translation> <translation id="1509692106376861764">Dit beleid wordt niet meer gebruikt sinds <ph name="PRODUCT_NAME" /> versie 29.</translation> <translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> inschakelen</translation> +<translation id="1515230621229117540">Hiermee wordt het zwevende toegankelijkheidsmenu ingeschakeld</translation> <translation id="1515824657887788963">Hiermee wordt toegestaan dat een pagina synchrone XHR-verzoeken verstuurt tijdens de afwijzing van de pagina.</translation> <translation id="1522425503138261032">Sites toestaan de fysieke locatie van gebruikers bij te houden</translation> <translation id="1523774894176285446">Alternatieve browser die wordt gestart voor geconfigureerde websites.</translation> @@ -3345,6 +3346,17 @@ Als er geen instelling is opgegeven, gebruikt <ph name="PRODUCT_NAME" /> een standaard bibliotheeknaam.</translation> <translation id="5783009211970309878">Kop- en voetteksten afdrukken</translation> +<translation id="5783576706065107606">Schakel <ph name="CORS" />-controlebeperkingen voor de nieuwe <ph name="CORS" />-implementatie in, waardoor extensies geschikt gedrag kunnen behouden en <ph name="PRODUCT_NAME" /> toestemming heeft om opgegeven headers te verzenden zonder <ph name="CORS" />-controle. + + Als deze lijst leeg is, probeert <ph name="PRODUCT_NAME" /> extensies op geschikte manieren uit te voeren en worden er geen <ph name="API" />-wijzingen geïntroduceerd voor <ph name="PRODUCT_NAME" /> 79, zoals uitgelegd in <ph name="WEB_REQUEST_API_MANUAL" />. + + Als deze lijst is ingesteld voor headernamen van <ph name="HTTP" />-verzoeken, negeert de <ph name="CORS" />-controle de vermelde headers om de beperking voor extensies in te schakelen. + + Als deze lijst niet is ingesteld, worden beide beperkingen (zoals hierboven uitgelegd) niet toegepast. + + Ga naar <ph name="CORS_HELP_URL" /> voor meer informatie over <ph name="CORS" />. + + Het was aangekondigd dat dit beleid zou worden verwijderd in <ph name="PRODUCT_NAME" /> versie 82, maar dit plan is gewijzigd. Het beleid wordt nu verwijderd in versie 84.</translation> <translation id="5790763087505467169">Minder meldingen voor automatisch starten van beheerde gastsessies</translation> <translation id="5806128552675651249">Alleen afdrukken zonder achtergrondbeelden toestaan</translation> <translation id="5809210507920527553">Beheert instellingen voor de Linux-container (Crostini).</translation> @@ -3408,6 +3420,17 @@ Als deze instelling is uitgeschakeld of niet is ingesteld, wordt de standaarddomeinnaam voor het TalkGadget ('chromoting-host.talkgadget.google.com') gebruikt voor alle hosts. Deze beleidsinstelling is niet van toepassing op clients voor externe toegang. Deze clients gebruiken altijd 'chromoting-client.talkgadget.google.com' om toegang tot het TalkGadget te krijgen.</translation> +<translation id="5888171512889380367">Gebruik de verouderde <ph name="CORS" />-implementatie in plaats van de nieuwe <ph name="CORS" />. + + Als deze instelling is ingesteld op True, wordt de verouderde implementatie gebruikt die zou moeten werken met eerdere versies. + + Als deze instelling is ingesteld op False of niet is ingesteld, wordt de nieuwe implementatie gebruikt die mogelijk ondernemingsspecifieke compatibiliteitsproblemen kan veroorzaken. + + Dit beleid wordt na een aantal mijlpalen verwijderd. + + Ga naar <ph name="CORS_HELP_URL" /> voor meer informatie over <ph name="CORS" />. + + Het was aangekondigd dat dit beleid zou worden verwijderd in <ph name="PRODUCT_NAME" /> versie 82, maar dit plan is gewijzigd. Het beleid wordt nu verwijderd in versie 84.</translation> <translation id="5893553533827140852">Als deze instelling is ingeschakeld, worden gnubby-verificatieverzoeken verzonden via een proxy met een externe hostverbinding. Als deze instelling uitgeschakeld of niet geconfigureerd is, worden gnubby-verificatieverzoeken niet via een proxy verzonden.</translation> @@ -3681,6 +3704,11 @@ Dit beleid is alleen beschikbaar op Windows-instanties die gekoppeld zijn aan een <ph name="MS_AD_NAME" />-domein of op instanties van Windows 10 Pro of Enterprise die ingeschreven zijn voor apparaatbeheer.</translation> <translation id="6417265370957905582">Google Assistent</translation> +<translation id="6422575351619065453">In de kioskmodus beheert dit of het zwevende toegankelijkheidsmenu wordt weergegeven. + + Als dit beleid is ingeschakeld, wordt het zwevende toegankelijkheidsmenu altijd weergegeven. + + Als dit beleid is uitgeschakeld of niet is ingesteld, wordt het zwevende toegankelijkheidsmenu nooit weergegeven.</translation> <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation> <translation id="6426205278746959912">Je kunt Android-apps niet dwingen een proxy te gebruiken. Er is een subset met proxyinstellingen beschikbaar voor Android-apps. Deze kunnen ze op vrijwillige basis respecteren:
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 7fe7df5..d1eeb61d 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -356,6 +356,7 @@ Se a política EnableMediaRouter estiver definida como falsa, o valor desta política não terá nenhum efeito.</translation> <translation id="1509692106376861764">Esta política teve o uso suspenso a partir da versão 29 do <ph name="PRODUCT_NAME" />.</translation> <translation id="1514888685242892912">Ativar <ph name="PRODUCT_NAME" /></translation> +<translation id="1515230621229117540">Ativa o menu de acessibilidade flutuante</translation> <translation id="1515824657887788963">Permite que uma página execute solicitações XHR síncronas durante a dispensa de páginas.</translation> <translation id="1522425503138261032">Permitir que os sites rastreiem a localização física dos usuários</translation> <translation id="1523774894176285446">Navegador alternativo que será iniciado com sites configurados.</translation> @@ -693,7 +694,7 @@ Se a plataforma for compatível com notificações sobre políticas, o atraso de atualização será configurado para 24 horas (ignorando todos os padrões e o valor da política), pois espera-se que as notificações sobre políticas forcem uma atualização automaticamente sempre que a política for alterada, tornando as atualizações mais frequentes desnecessárias.</translation> <translation id="2024476116966025075">Configurar o nome de domínio obrigatório para clientes de acesso remoto</translation> <translation id="2030905906517501646">Palavra-chave do provedor de pesquisa padrão</translation> -<translation id="203096360153626918">Esta política não tem nenhum efeito sobre os apps Android. Eles poderão entrar no modo de tela cheia mesmo se a política estiver definida como <ph name="FALSE" />.</translation> +<translation id="203096360153626918">Esta política não tem nenhum efeito sobre os apps Android. Eles poderão entrar no modo tela cheia mesmo se a política estiver definida como <ph name="FALSE" />.</translation> <translation id="2043749682619281558">Ativa o destaque de cursor na tela de login</translation> <translation id="2043770014371753404">Impressoras empresariais desativadas</translation> <translation id="2050629715135525072">Controla a habilidade de um usuário de transferir arquivos entre o cliente e o host quando ele está conectado a um host de acesso remoto. Isso não se aplica a conexões de assistência remota, que não são compatíveis com transferência de arquivos. @@ -2565,7 +2566,7 @@ <translation id="4856471929724652373">Informar detalhes sobre a atualização do SO, por exemplo, o status da atualização, a versão da plataforma, a última verificação de atualização e a última reinicialização. Se a política for definida como falsa ou se não for definida, os detalhes sobre atualização do SO não serão informados. Se for definida como verdadeira, os detalhes sobre atualização do SO serão informados.</translation> -<translation id="4858735034935305895">Permitir modo de tela cheia</translation> +<translation id="4858735034935305895">Permitir modo tela cheia</translation> <translation id="4861767323695239729">Configurar os métodos de entrada permitidos em uma sessão de usuário</translation> <translation id="4869603341164509842">Os padrões dessa lista serão comparados com a origem de segurança do URL solicitante. Se uma correspondência for encontrada, o acesso aos dispositivos de captura de vídeo será concedido sem solicitação. @@ -3100,13 +3101,13 @@ Se esta política for definida como falsa ou não definida, os avisos aparecerão nesses computadores e sistemas operacionais incompatíveis.</translation> <translation id="5565178130821694365">É necessário digitar a senha a cada dois dias (48 horas)</translation> <translation id="5566210228171064229">Permitir impressão com e sem PIN</translation> -<translation id="556865034069957245">Esta política controla a disponibilidade do modo de tela cheia, em que toda a IU do <ph name="PRODUCT_NAME" /> fica oculta enquanto apenas o conteúdo da Web se encontra visível. +<translation id="556865034069957245">Esta política controla a disponibilidade do modo tela cheia, em que toda a IU do <ph name="PRODUCT_NAME" /> fica oculta enquanto apenas o conteúdo da Web se encontra visível. - Se esta política for definida como verdadeira ou não for configurada, o usuário, os apps e as extensões com as permissões apropriadas poderão entrar no modo de tela cheia. + Se esta política for definida como verdadeira ou não for configurada, o usuário, os apps e as extensões com as permissões apropriadas poderão entrar no modo tela cheia. - Se esta política for definida como falsa, nem o usuário, nem qualquer app ou extensão poderá ativar o modo de tela cheia. + Se esta política for definida como falsa, nem o usuário, nem qualquer app ou extensão poderá ativar o modo tela cheia. - Em todas as plataformas que não sejam o <ph name="PRODUCT_OS_NAME" />, o modo quiosque ficará indisponível quando o modo de tela cheia estiver desativado.</translation> + Em todas as plataformas que não sejam o <ph name="PRODUCT_OS_NAME" />, o modo quiosque ficará indisponível quando o modo tela cheia estiver desativado.</translation> <translation id="556941986578702361">Controla a ocultação automática da estante do <ph name="PRODUCT_OS_NAME" />. Se esta política estiver definida como "AlwaysAutoHideShelf", a estante sempre será ocultada automaticamente. @@ -3263,6 +3264,17 @@ Se nenhuma configuração for fornecida, o <ph name="PRODUCT_NAME" /> voltará a utilizar um nome de biblioteca padrão.</translation> <translation id="5783009211970309878">Imprimir cabeçalhos e rodapés</translation> +<translation id="5783576706065107606">Ative as mitigações de verificação de <ph name="CORS" /> na nova implementação de <ph name="CORS" />, permitindo que as extensões mantenham um comportamento compatível e permitindo que o <ph name="PRODUCT_NAME" /> envie cabeçalhos especificados sem verificações de <ph name="CORS" />. + + Se esta lista for definida como vazia, o <ph name="PRODUCT_NAME" /> tentará executar extensões de maneiras compatíveis e não introduzirá mudanças de <ph name="API" /> para o <ph name="PRODUCT_NAME" /> 79, conforme explicado em <ph name="WEB_REQUEST_API_MANUAL" />. + + Se esta lista for definida para ter nomes de cabeçalho de solicitação <ph name="HTTP" />, a inspeção <ph name="CORS" /> ignorará os cabeçalhos listados e ativará a mitigação para extensões. + + Se esta lista não for definida, nenhuma das mitigações explicadas acima será aplicada. + + Para ver detalhes sobre <ph name="CORS" />, acesse: <ph name="CORS_HELP_URL" />. + + Esta política seria removida na versão 82 do <ph name="PRODUCT_NAME" />, mas houve uma mudança de planos e a remoção ocorrerá na versão 84.</translation> <translation id="5790763087505467169">Reduzir notificações de lançamento automático para sessões de visitante gerenciadas</translation> <translation id="5806128552675651249">Permitir impressão apenas sem gráficos de segundo plano</translation> <translation id="5809210507920527553">Controla configurações do contêiner Linux (Crostini).</translation> @@ -3326,6 +3338,17 @@ Se esta configuração for desativada ou não for definida, o nome de domínio padrão do TalkGadget ('chromoting host.talkgadget.google.com') será usado para todos os hosts. Clientes de acesso remoto não são afetados pela definição desta política. Eles sempre usam "chromoting-client.talkgadget.google.com" para acessar o TalkGadget.</translation> +<translation id="5888171512889380367">Use a implementação legada de <ph name="CORS" /> em vez do novo <ph name="CORS" />. + + Se esta configuração for definida como "verdadeira", a implementação legada será usada e precisará ser compatível com versões anteriores. + + Se esta configuração for definida como "falsa" ou não for definida, a nova implementação será usada e poderá causar possíveis problemas de compatibilidade específicos da empresa. + + Esta política será removida depois de alguns marcos. + + Para ver detalhes sobre <ph name="CORS" />, acesse: <ph name="CORS_HELP_URL" />. + + Esta política seria removida na versão 82 do <ph name="PRODUCT_NAME" />, mas houve uma mudança de planos e a remoção ocorrerá na versão 84.</translation> <translation id="5893553533827140852">Quando essa configuração está ativada, as solicitações de autenticação gnubby são transmitidas por proxy por meio de uma conexão de host remoto. Se essa configuração não está ativada ou configurada, as solicitações de autenticação gnubby não são transmitidas por proxy.</translation> @@ -3609,6 +3632,11 @@ Esta política está disponível apenas em instâncias do Windows associadas a um domínio <ph name="MS_AD_NAME" /> ou instâncias do Windows 10 Pro ou Enterprise inscritas no gerenciamento de dispositivos.</translation> <translation id="6417265370957905582">Google Assistente</translation> +<translation id="6422575351619065453">No modo quiosque, controla a exibição do menu de acessibilidade flutuante. + + Se esta política for definida como ativada, o menu de acessibilidade flutuante sempre será exibido. + + Se esta política for definida como desativada ou não for definida, o menu de acessibilidade flutuante nunca será exibido.</translation> <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation> <translation id="6426205278746959912">Não é possível forçar apps Android a usar um proxy. Um subconjunto de configurações de proxy é disponibilizado para apps Android, o qual eles podem optar por respeitar voluntariamente:
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 4f9681d..b45f0d83 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -357,6 +357,7 @@ Если для правила EnableMediaRouter задано значение False, то правило MediaRouterCastAllowAllIPs работать не будет.</translation> <translation id="1509692106376861764">Это правило не поддерживается в <ph name="PRODUCT_NAME" /> версии 29 и будет исключено из более поздних версий.</translation> <translation id="1514888685242892912">Включить <ph name="PRODUCT_NAME" /></translation> +<translation id="1515230621229117540">Включает плавающее меню специальных возможностей</translation> <translation id="1515824657887788963">Отправка синхронных запросов XHR при закрытии страницы</translation> <translation id="1522425503138261032">Разрешить сайтам отслеживать местоположение пользователей</translation> <translation id="1523774894176285446">Запуск альтернативного браузера для сайтов из списка</translation> @@ -2938,7 +2939,7 @@ Если задано значение "true" или значение не задано, этот пользователь сможет создавать контролируемые профили и управлять ими.</translation> <translation id="5369937289900051171">Только цветная печать</translation> <translation id="5370279767682621504">Включить поддержку HTTP/0.9 для портов, не заданных по умолчанию</translation> -<translation id="5377606826822211923">Контроль за использованием приложений для Android из ненадежных источников</translation> +<translation id="5377606826822211923">Контролировать использование приложений для Android из ненадежных источников</translation> <translation id="5378985487213287085">Позволяет указать, каким сайтам разрешено отображать уведомления на рабочем столе. По умолчанию можно разрешить показ уведомлений, запретить его или настроить вывод запроса пользователю каждый раз, когда сайт должен показать уведомление. Если это правило не настроено, действует правило AskNotifications и пользователи могут самостоятельно изменить его значение.</translation> <translation id="5380329473151894945">Определяет режим по умолчанию для большого курсора на экране входа. @@ -3293,6 +3294,17 @@ Если настройки не определены, <ph name="PRODUCT_NAME" /> использует название библиотеки по умолчанию.</translation> <translation id="5783009211970309878">Печатать колонтитулы</translation> +<translation id="5783576706065107606">Позволяет смягчить проверки <ph name="CORS" /> в новой реализации <ph name="CORS" />, благодаря чему расширения продолжают работать в совместимом режиме, а <ph name="PRODUCT_NAME" /> может отправлять указанные заголовки без проверок <ph name="CORS" />. + + Если установлен пустой список, <ph name="PRODUCT_NAME" /> пробует запустить расширения в совместимом режиме и не вносит изменения в <ph name="API" /> для <ph name="PRODUCT_NAME" /> 79, как описано на странице <ph name="WEB_REQUEST_API_MANUAL" />. + + Если в списке заданы названия заголовков запроса <ph name="HTTP" />, то эти заголовки будут пропущены при проверке <ph name="CORS" />. Такая же смягченная проверка будет применяться и для расширений. + + Если значение для списка не задано, при проверке не будет применяться ни одно из описанных выше смягчений. + + Подробнее о технологии <ph name="CORS" />: <ph name="CORS_HELP_URL" />. + + Обратите внимание, что правило планировалось удалить из <ph name="PRODUCT_NAME" /> 82, однако было принято решение сделать это в версии 84.</translation> <translation id="5790763087505467169">Скрывать уведомления об автоматических запусках управляемых гостевых сеансов</translation> <translation id="5806128552675651249">Разрешить печать только без фоновых цветов и изображений</translation> <translation id="5809210507920527553">Регулирует настройки контейнера Linux (Crostini).</translation> @@ -3356,6 +3368,17 @@ Если этот параметр отключен или не настроен, для всех хостов используется имя домена TalkGadget по умолчанию (chromoting-host.talkgadget.google.com). Клиенты удаленного доступа всегда используют для доступа к TalkGadget имя chromoting-client.talkgadget.google.com вне зависимости от настроек этого правила.</translation> +<translation id="5888171512889380367">Позволяет назначить приоритет устаревшей версии <ph name="CORS" /> перед новой реализацией <ph name="CORS" />. + + Если задано значение True, используется устаревшая реализация, которая должна быть совместима с предыдущими версиями. + + Если задано значение False или правило не настроено, используется новая реализация. При этом могут возникнуть проблемы совместимости с некоторыми браузерами. + + Правило будет удалено после нескольких крупных обновлений. + + Подробнее о технологии <ph name="CORS" />: <ph name="CORS_HELP_URL" />. + + Обратите внимание, что правило планировалось удалить из <ph name="PRODUCT_NAME" /> 82, однако было принято решение сделать это в версии 84.</translation> <translation id="5893553533827140852">Если этот параметр включен, запросы на авторизацию Gnubby будут передаваться через подключение к удаленному хосту. Если этот параметр отключен или не задан, запросы на авторизацию Gnubby не будут передаваться через прокси.</translation> @@ -3643,6 +3666,11 @@ Правило можно установить только на устройствах Windows, входящих в домен <ph name="MS_AD_NAME" />, а также на устройствах Windows 10 Pro или Enterprise, зарегистрированных в консоли администратора.</translation> <translation id="6417265370957905582">Google Ассистент</translation> +<translation id="6422575351619065453">Управляет показом плавающего меню специальных возможностей в режиме киоска. + + Если правило включено, плавающее меню специальных возможностей будет показываться всегда. + + Если правило отключено или не настроено, плавающее меню специальных возможностей никогда не будет показываться.</translation> <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation> <translation id="6426205278746959912">Вы не можете принудить приложения Android использовать прокси-сервер. Приложения сами решают, делать это или нет, поскольку им доступна часть настроек прокси-сервера.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 05637e0f..c126089 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -359,6 +359,7 @@ หากตั้งค่านโยบาย "EnableMediaRouter" เป็น "เท็จ" ค่าของนโยบายนี้จะไม่มีผลบังคับใช้</translation> <translation id="1509692106376861764">นโยบายนี้ได้ถูกยกเลิกตั้งแต่ <ph name="PRODUCT_NAME" /> เวอร์ชัน 29</translation> <translation id="1514888685242892912">เปิดใช้ <ph name="PRODUCT_NAME" /></translation> +<translation id="1515230621229117540">เปิดใช้เมนูการช่วยเหลือพิเศษแบบลอย</translation> <translation id="1515824657887788963">อนุญาตให้หน้าเว็บส่งคำขอ XHR พร้อมกันในระหว่างการปิดหน้าเว็บ</translation> <translation id="1522425503138261032">อนุญาตให้ไซต์ติดตามตำแหน่งทางกายภาพของผู้ใช้</translation> <translation id="1523774894176285446">เบราว์เซอร์สำรองที่จะเปิดสำหรับเว็บไซต์ที่กำหนดค่า</translation> @@ -3271,6 +3272,17 @@ หากคุณไม่ได้ตั้งค่า <ph name="PRODUCT_NAME" /> จะกลับไปใช้ชื่อไลบรารีเริ่มต้น</translation> <translation id="5783009211970309878">ส่วนหัวและส่วนท้ายของการพิมพ์</translation> +<translation id="5783576706065107606">เปิดใช้การลดการตรวจสอบ <ph name="CORS" /> ในการนำ <ph name="CORS" /> ใหม่ไปใช้ เพื่อให้ส่วนขยายยังคงทำงานร่วมกันได้ และให้ <ph name="PRODUCT_NAME" /> ส่งส่วนหัวที่ระบุโดยไม่ต้องตรวจสอบ <ph name="CORS" /> + + หากตั้งค่ารายการนี้ให้ว่างเปล่า <ph name="PRODUCT_NAME" /> จะเรียกใช้ส่วนขยายในลักษณะการทำงานที่เข้ากันได้ และจะไม่แสดงการเปลี่ยนแปลง <ph name="API" /> สำหรับ <ph name="PRODUCT_NAME" /> 79 ดังที่อธิบายไว้ใน <ph name="WEB_REQUEST_API_MANUAL" /> + + หากตั้งค่ารายการนี้ให้มีชื่อส่วนหัวของคำขอ <ph name="HTTP" /> การตรวจสอบ <ph name="CORS" /> จะเพิกเฉยต่อส่วนหัวที่อยู่ในรายการ พร้อมทั้งเปิดใช้การลดการตรวจสอบสำหรับส่วนขยาย + + หากไม่ได้ตั้งค่ารายการนี้ไว้ ระบบจะไม่บังคับใช้การลดการตรวจสอบทั้ง 2 รายการที่อธิบายไว้ด้านบน + + ดูรายละเอียดเกี่ยวกับ <ph name="CORS" /> ได้ที่ <ph name="CORS_HELP_URL" /> + + โปรดทราบว่าได้มีการประกาศนำนโยบายนี้ออกใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 82 แต่ได้มีการเปลี่ยนแผนไปนำออกในเวอร์ชัน 84 แทน</translation> <translation id="5790763087505467169">ลดการแจ้งเตือนการเรียกใช้อัตโนมัติของเซสชันผู้เยี่ยมชมที่มีการจัดการ</translation> <translation id="5806128552675651249">อนุญาตเฉพาะการพิมพ์ที่ไม่มีกราฟิกพื้นหลังเท่านั้น</translation> <translation id="5809210507920527553">ควบคุมการตั้งค่าของคอนเทนเนอร์ Linux (Crostini)</translation> @@ -3334,6 +3346,17 @@ หากการตั้งค่านี้ปิดใช้งานอยู่หรือไม่ได้ตั้งค่า ชื่อโดเมน TalkGadget ที่เป็นค่าเริ่มต้น ('chromoting-host.talkgadget.google.com') จะถูกใช้สำหรับโฮสต์ทั้งหมด ไคลเอ็นต์การเข้าถึงระยะไกลจะไม่ได้รับผลกระทบจากการตั้งค่านโยบายนี้ โดยจะใช้ 'chromoting-client.talkgadget.google.com' เพื่อเข้าถึง TalkGadget เสมอ</translation> +<translation id="5888171512889380367">ควรใช้การใช้งาน <ph name="CORS" /> เดิมมากกว่า <ph name="CORS" /> ใหม่ + + หากตั้งค่านี้เป็น "จริง" ระบบจะใช้การใช้งานเดิมซึ่งควรจะเข้ากันได้กับเวอร์ชันก่อนหน้า + + หากตั้งค่าเป็น "เท็จ" หรือไม่ได้ตั้งค่า การใช้งานใหม่อาจก่อให้เกิดปัญหาด้านความเข้ากันได้เฉพาะสำหรับองค์กร + + เราจะนำนโยบายนี้ออกหลังจากเวลาผ่านไประยะหนึ่ง + + ดูรายละเอียดเกี่ยวกับ <ph name="CORS" /> ได้ที่ <ph name="CORS_HELP_URL" /> + + โปรดทราบว่าได้มีการประกาศนำนโยบายนี้ออกใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 82 แต่ได้มีการเปลี่ยนแผนไปนำออกในเวอร์ชัน 84 แทน</translation> <translation id="5893553533827140852">หากเปิดใช้การตั้งค่านี้ คำขอตรวจสอบสิทธิ์ Gnubby จะส่งผ่านพร็อกซีโดยใช้การเชื่อมต่อโฮสต์ระยะไกล หากปิดใช้การตั้งค่านี้หรือไม่ได้กำหนดค่า คำขอตรวจสอบสิทธิ์ Gnubby จะไม่ส่งผ่านพร็อกซี</translation> @@ -3617,6 +3640,11 @@ นโยบายนี้ใช้ได้เฉพาะในอินสแตนซ์ Windows ซึ่งเข้าร่วมโดเมน <ph name="MS_AD_NAME" /> หรืออินสแตนซ์ Windows 10 Pro หรือ Enterprise ที่เข้าร่วมการจัดการอุปกรณ์</translation> <translation id="6417265370957905582">Google Assistant</translation> +<translation id="6422575351619065453">ในโหมดคีออสก์ นโยบายนี้ควบคุมว่าเมนูการช่วยเหลือพิเศษแบบลอยจะแสดงหรือไม่ + + หากตั้งค่านโยบายนี้เป็นเปิดใช้ เมนูการช่วยเหลือพิเศษแบบลอยจะแสดงเสมอ + + หากตั้งค่านโยบายนี้เป็นปิดใช้หรือไม่ได้ตั้งค่า เมนูการช่วยเหลือพิเศษแบบลอยจะไม่แสดงเลย</translation> <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation> <translation id="6426205278746959912">คุณไม่สามารถบังคับให้แอป Android ใช้พร็อกซี แต่จะมีการตั้งค่าพร็อกซีชุดย่อยชุดหนึ่งที่ใช้ได้กับแอป Android ซึ่งแอปอาจเลือกที่จะปฏิบัติตาม:
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 2329932..d38471d 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -351,6 +351,7 @@ "EnableMediaRouter" politikası yanlış (false) değerine ayarlanırsa bu politikanın değerinin herhangi bir etkisi olmaz.</translation> <translation id="1509692106376861764">Bu politika, <ph name="PRODUCT_NAME" /> Sürüm 29 itibariyle kullanımdan kaldırılmıştır.</translation> <translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> ürününü etkinleştirin</translation> +<translation id="1515230621229117540">Kayan erişilebilirlik menüsünü etkinleştirir</translation> <translation id="1515824657887788963">Sayfa kapatma işlemi sırasında bir sayfanın eş zamanlı XHR istekleri gerçekleştirmesine izin verir.</translation> <translation id="1522425503138261032">Sitelerin, kullanıcıların fiziksel konumlarını izlemesine izin ver</translation> <translation id="1523774894176285446">Yapılandırılan web siteleri için başlatılacak alternatif tarayıcı.</translation> @@ -3350,6 +3351,17 @@ Herhangi bir ayar sağlanmazsa <ph name="PRODUCT_NAME" />, yedek seçenek olarak varsayılan bir kitaplık adını kullanır.</translation> <translation id="5783009211970309878">Üst Bilgileri ve Alt Bilgileri yazdır</translation> +<translation id="5783576706065107606">Yeni <ph name="CORS" /> uygulamasındaki çözümlerin <ph name="CORS" /> tarafından kontrol edilmesini sağlayarak Uzantıların uyumlu davranışı sürdürmesine ve belirtilen üstbilgilerin <ph name="PRODUCT_NAME" /> tarafından <ph name="CORS" /> kontrolleri olmadan gönderilmesine olanak tanıyın. + + Bu liste boş değere ayarlanırsa <ph name="PRODUCT_NAME" />, Uzantıları uyumlu şekillerde çalıştırmayı dener ve <ph name="WEB_REQUEST_API_MANUAL" /> içinde açıklanan <ph name="PRODUCT_NAME" /> 79 için <ph name="API" /> değişikliklerini uygulamaz. + + Bu liste <ph name="HTTP" /> istek üst bilgi adlarına sahip olacak şekilde ayarlanırsa <ph name="CORS" /> incelemesi, Uzantılar için çözüm sağlamaya ek olarak listelenen üst bilgileri de yoksayar. + + Bu liste ayarlanmazsa yukarıda açıklanan çözümlerin ikisi de uygulanmaz. + + <ph name="CORS" /> ile ilgili ayrıntılar için şu adresi ziyaret edin: <ph name="CORS_HELP_URL" />. + + Bu politikanın <ph name="PRODUCT_NAME" /> sürüm 82'de kaldırılacağı duyurulmuştu, ancak planlardaki değişiklik nedeniyle sürüm 84'de kaldırılacağını belirtmek isteriz.</translation> <translation id="5790763087505467169">Yönetilen misafir oturumu otomatik başlatma bildirimlerini azaltma</translation> <translation id="5806128552675651249">Yalnızca arka plan grafikleri olmadan yazdırmaya izin ver</translation> <translation id="5809210507920527553">Linux kapsayıcı (Crostini) ile ilgili ayarları kontrol eder.</translation> @@ -3413,6 +3425,17 @@ Bu ayar devre dışı bırakılır veya ayarlanmazsa, tüm ana makineler için varsayılan TalkGadget alan adı ('chromoting-host.talkgadget.google.com') kullanılır. Uzaktan erişim istemcileri bu politika ayarından etkilenmez. Bunlar, TalkGadget'a erişmek için her zaman 'chromoting-client.talkgadget.google.com' alan adını kullanır.</translation> +<translation id="5888171512889380367">Yeni <ph name="CORS" /> yerine eski <ph name="CORS" /> uygulamasını kullan. + + Bu ayar True (Doğru) değerine ayarlanırsa önceki sürümlerle uyumlu olması gereken eski uygulama kullanılır. + + Bu ayar False (Yanlış) değerine ayarlanır veya hiç ayarlanmazsa kuruma özel uyumluluk sorunlarına yol açabilecek yeni uygulama kullanılır. + + Bu politika, birkaç aşamadan sonra kaldırılacaktır. + + <ph name="CORS" /> ile ilgili ayrıntılar için şu adresi ziyaret edin: <ph name="CORS_HELP_URL" />. + + Bu politikanın <ph name="PRODUCT_NAME" /> sürüm 82'de kaldırılacağı duyurulmuştu, ancak planlardaki değişiklik nedeniyle sürüm 84'de kaldırılacağını belirtmek isteriz.</translation> <translation id="5893553533827140852">Bu ayar etkinleştirilirse gnubby kimlik doğrulama isteklerinde uzaktan ana bilgisayar bağlantısı üzerinden proxy kullanılır. Bu ayar devre dışı bırakılır veya yapılandırılmazsa gnubby kimlik doğrulama isteklerinde proxy kullanılmaz.</translation> @@ -3685,6 +3708,11 @@ Bu politika yalnızca bir <ph name="MS_AD_NAME" /> alan adına katılmış Windows örneklerinde veya cihaz yönetimine kaydolmuş Windows 10 Pro ya da Enterprise örneklerinde kullanılabilir.</translation> <translation id="6417265370957905582">Google Asistan</translation> +<translation id="6422575351619065453">Kiosk modunda, kayan erişilebilirlik menüsünün gösterilip gösterilmeyeceğini kontrol eder. + + Bu politika etkin olarak ayarlanırsa kayan erişilebilirlik menüsü her zaman gösterilir. + + Bu politika devre dışı olarak ayarlanırsa veya ayarlanmadan bırakılırsa kayan erişilebilirlik menüsü asla gösterilmez.</translation> <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation> <translation id="6426205278746959912">Android uygulamalarını proxy kullanmaya zorlayamazsınız. Proxy ayarlarının bir alt kümesi Android uygulamalarının kullanımına sunuldu. Bu uygulamalar, söz konusu proxy ayarını kendi tercihleriyle kullanmayı seçebilir:
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index d7bebcbd..599797c7 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -365,6 +365,7 @@ Якщо для правила EnableMediaRouter вибрано false, тоді значення в цьому правилі не діє.</translation> <translation id="1509692106376861764">Це правило не підтримується від 29-ї версії <ph name="PRODUCT_NAME" />.</translation> <translation id="1514888685242892912">Увімкнути <ph name="PRODUCT_NAME" /></translation> +<translation id="1515230621229117540">Вмикає плаваюче меню спеціальних можливостей</translation> <translation id="1515824657887788963">Дає змогу надсилати синхронні запити XHR під час закриття сторінки.</translation> <translation id="1522425503138261032">Дозволяти сайтам відстежувати фізичне місцезнаходження користувача</translation> <translation id="1523774894176285446">Альтернативний веб-переглядач, у якому мають відкриватися налаштовані веб-сайти.</translation> @@ -3319,6 +3320,17 @@ Якщо налаштування не вибрано, <ph name="PRODUCT_NAME" /> використовуватиме назву бібліотеки за умовчанням.</translation> <translation id="5783009211970309878">Друкувати верхні й нижні колонтитули</translation> +<translation id="5783576706065107606">Увімкнути для <ph name="CORS" /> зменшення кількості перевірок у новому застосуванні <ph name="CORS" />, що дає змогу розширенням надалі мати сумісну поведінку, а <ph name="PRODUCT_NAME" /> – надсилати вказані заголовки без перевірок <ph name="CORS" />. + + Якщо цей список порожній, <ph name="PRODUCT_NAME" /> намагається сумісно запускати розширення й не впроваджує зміни <ph name="API" /> для <ph name="PRODUCT_NAME" /> 79, як це описано на сторінці <ph name="WEB_REQUEST_API_MANUAL" />. + + Якщо для цього списку вказано назви заголовків запитів <ph name="HTTP" />, перевірка <ph name="CORS" /> ігноруватиме вказані заголовки, а також зменшить кількість перевірок для розширень. + + Якщо цей список не налаштовано, описані вище зменшення не застосовуються. + + Докладніше про <ph name="CORS" /> читайте на сторінці <ph name="CORS_HELP_URL" />. + + Зверніть увагу: раніше ми повідомляли, що вилучимо це правило в <ph name="PRODUCT_NAME" /> версії 82, але плани змінилися, тому правило буде вилучено у версії 84.</translation> <translation id="5790763087505467169">Зменшити кількість сповіщень про автоматичний запуск керованого сеансу в режимі "Гість"</translation> <translation id="5806128552675651249">Дозволити лише друк без фонових зображень</translation> <translation id="5809210507920527553">Керує налаштуваннями контейнера Linux (Crostini).</translation> @@ -3382,6 +3394,17 @@ Якщо це налаштування вимкнено чи не налаштовано, для всіх хостів використовується ім’я домену TalkGadget за умовчанням ("chromoting-host.talkgadget.google.com"). Налаштування цього правила не впливає на клієнтів віддаленого доступу. Вони завжди використовують "chromoting-client.talkgadget.google.com" для доступу до TalkGadget.</translation> +<translation id="5888171512889380367">Використовувати для <ph name="CORS" /> застаріле застосування <ph name="CORS" />, а не нове. + + Якщо вибрано значення true, використовується застаріле застосування, яке буде сумісним із попередніми версіями. + + Якщо для цього правила вибрано значення false або його не налаштовано, використовується нове застосування, яке потенційно може викликати проблеми із сумісністю для певних підприємств. + + Це правило буде вилучено через кілька версій. + + Докладніше про <ph name="CORS" /> читайте на сторінці <ph name="CORS_HELP_URL" />. + + Зверніть увагу: раніше ми повідомляли, що вилучимо це правило в <ph name="PRODUCT_NAME" /> версії 82, але плани змінилися, тому правило буде вилучено у версії 84.</translation> <translation id="5893553533827140852">Якщо цей параметр увімкнено, запити на автентифікацію розширення Gnubby надсилаються через віддалене з’єднанння з хостом. Якщо цей параметр вимкнено або не налаштовано, запити на автентифікацію розширення Gnubby не надсилаються.</translation> @@ -3665,6 +3688,11 @@ Це правило доступне лише у версіях Windows, зареєстрованих у домені <ph name="MS_AD_NAME" />, або Windows 10 Pro чи Enterprise, зареєстрованих для керування пристроєм.</translation> <translation id="6417265370957905582">Google Асистент</translation> +<translation id="6422575351619065453">Контролює, чи відображається плаваюче меню спеціальних можливостей у режимі термінала. + + Якщо для цього правила вибрано значення enabled, плаваюче меню спеціальних можливостей завжди відображатиметься. + + Якщо для цього правила вибрано значення disabled або його не налаштовано, плаваюче меню спеціальних можливостей ніколи не відображатиметься.</translation> <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation> <translation id="6426205278746959912">Не можна змусити додатки Android використовувати проксі. Додатки Android мають доступ до налаштувань проксі та можуть вибирати, чи застосовувати їх.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index c6deca32..292c79a 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -4262,7 +4262,7 @@ <translation id="7566878661979235378">SAML 登录身份验证类型</translation> <translation id="7567373982693549834">此政策可以控制每个用户对来源不受信任(来自 Google Play 商店之外)的 Android 应用的使用。 - 如果此政策的值未设置,则系统会视为不允许使用此功能。 + 如果未设置此政策的值,则系统会视为不允许使用此功能。 如果用户的设备为受管理设备,则此功能的可用性还取决于相应的设备政策。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index cb5f722..d437d8a 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -352,6 +352,7 @@ 如果將「EnableMediaRouter」政策設為 False,則這項政策的值不會有任何效果。</translation> <translation id="1509692106376861764">我們已於 <ph name="PRODUCT_NAME" /> 版本 29 中移除這項政策。</translation> <translation id="1514888685242892912">啟用 <ph name="PRODUCT_NAME" /></translation> +<translation id="1515230621229117540">啟用浮動式無障礙選單</translation> <translation id="1515824657887788963">允許頁面在關閉時執行同步 XHR 要求。</translation> <translation id="1522425503138261032">允許網站追蹤使用者的實際位置</translation> <translation id="1523774894176285446">要啟動的替代瀏覽器 (適用於已設定的網站)。</translation> @@ -3258,6 +3259,17 @@ 如未設定這項政策,<ph name="PRODUCT_NAME" /> 會改用預設程式庫名稱。</translation> <translation id="5783009211970309878">列印頁首和頁尾</translation> +<translation id="5783576706065107606">在新版 <ph name="CORS" /> 模式中啟用 <ph name="CORS" /> 檢查安全防護措施,讓擴充功能保持相容行為,並允許 <ph name="PRODUCT_NAME" /> 不需經過 <ph name="CORS" /> 檢查即可傳送指定標頭。 + + 如果將這份清單設為空白,<ph name="PRODUCT_NAME" /> 會嘗試以相容方式執行擴充功能,且不會採用 <ph name="PRODUCT_NAME" /> 第 79 版的 <ph name="API" /> 變更,詳情請參閱 <ph name="WEB_REQUEST_API_MANUAL" />。 + + 如果將這份清單設為具有 <ph name="HTTP" /> 要求標頭名稱,則 <ph name="CORS" /> 檢查將忽略此處列出的標頭,並啟用擴充功能的安全防護措施。 + + 如果未設定這份清單,則不會套用上述兩種安全防護措施。 + + 如要進一步瞭解 <ph name="CORS" />,請前往:<ph name="CORS_HELP_URL" />。 + + 請注意,我們之前宣布將在 <ph name="PRODUCT_NAME" /> 第 82 版中移除這項政策,但計畫有所變更,改為在第 84 版中移除。</translation> <translation id="5790763087505467169">減少顯示受管理訪客工作階段的自動啟動通知</translation> <translation id="5806128552675651249">只允許不使用背景圖形的列印模式</translation> <translation id="5809210507920527553">控管 Linux 容器 (Crostini) 的設定。</translation> @@ -3321,6 +3333,17 @@ 如果你停用這項設定或並未進行設置,則所有主機都會使用 TalkGadget 預設網域名稱 (「chromoting-host.talkgadget.google.com」)。 遠端存取用戶端不受這項政策設定所影響,而會一律採用「chromoting-client.talkgadget.google.com」來存取 TalkGadget。</translation> +<translation id="5888171512889380367">使用舊版 <ph name="CORS" /> 模式,而不使用新版 <ph name="CORS" />。 + + 如果將這項政策設為 True,系統會使用舊版模式,該模式應與先前的版本相容。 + + 如果將這項政策設為 False 或不予設定,系統會使用新版模式,這可能會導致企業特定的相容性問題。 + + 這項政策將在日後的版本中移除。 + + 如要進一步瞭解 <ph name="CORS" />,請前往:<ph name="CORS_HELP_URL" />。 + + 請注意,我們之前宣布將在 <ph name="PRODUCT_NAME" /> 第 82 版中移除這項政策,但計畫有所變更,改為在第 84 版中移除。</translation> <translation id="5893553533827140852">啟用這項設定時,系統將透過遠端主機連線以 Proxy 處理 gnubby 驗證要求。 如果停用或不設定這項設定,系統將不會以 Proxy 處理 gnubby 驗證要求。</translation> @@ -3593,6 +3616,11 @@ 這項政策僅適用於已加入 <ph name="MS_AD_NAME" /> 網域的 Windows 執行個體,或是已註冊裝置管理服務的 Windows 10 專業版或企業版執行個體。</translation> <translation id="6417265370957905582">Google 助理</translation> +<translation id="6422575351619065453">這項政策可控管是否在 Kiosk 模式中顯示浮動式無障礙選單。 + + 如果將這項政策設為啟用,系統會一律顯示浮動式無障礙選單。 + + 如果將這項政策設為停用或不予設定,系統一律不會顯示浮動式無障礙選單。</translation> <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation> <translation id="6426205278746959912">你無法強制 Android 應用程式使用 Proxy。有一部分 Proxy 設定可供 Android 應用程式使用,Android 應用程式可以選擇是否使用:
diff --git a/components/printing/resources/print_header_footer_template_page.html b/components/printing/resources/print_header_footer_template_page.html index 3c79b51a..8d71239 100644 --- a/components/printing/resources/print_header_footer_template_page.html +++ b/components/printing/resources/print_header_footer_template_page.html
@@ -4,12 +4,13 @@ <link rel="stylesheet" href="chrome://resources/css/text_defaults.css"> <style> body { - margin: 0; display: flex; flex-direction: column; + margin: 0; } - #header, #footer { + #header, + #footer { display: flex; flex: none; }
diff --git a/components/safe_browsing/core/realtime/url_lookup_service.cc b/components/safe_browsing/core/realtime/url_lookup_service.cc index 9a7887d..cc9a22d 100644 --- a/components/safe_browsing/core/realtime/url_lookup_service.cc +++ b/components/safe_browsing/core/realtime/url_lookup_service.cc
@@ -168,8 +168,6 @@ resource_request->url = GURL(kRealTimeLookupUrlPrefix); resource_request->load_flags = net::LOAD_DISABLE_CACHE; resource_request->method = "POST"; - // TODO(crbug.com/1041912): Verify if a header is still needed when oauth - // token is empty. if (access_token_info.has_value()) { resource_request->headers.SetHeader( net::HttpRequestHeaders::kAuthorization,
diff --git a/components/services/storage/public/mojom/service_worker_storage_control.mojom b/components/services/storage/public/mojom/service_worker_storage_control.mojom index bd2c1b8..965c43a 100644 --- a/components/services/storage/public/mojom/service_worker_storage_control.mojom +++ b/components/services/storage/public/mojom/service_worker_storage_control.mojom
@@ -145,4 +145,18 @@ // Clears user data specified by |registration_id| and |keys|. ClearUserData(int64 registration_id, array<string> keys) => (ServiceWorkerDatabaseStatus status); + + // Gets user data values associated with the given |registration_id| + // filtered by |key_prefix|. + GetUserDataByKeyPrefix(int64 registration_id, string key_prefix) => + (ServiceWorkerDatabaseStatus status, array<string> values); + // Gets user data associated with the given |registration_id| filtered by + // |key_prefix|. Returns user data as key-value pairs. + GetUserKeysAndDataByKeyPrefix(int64 registration_id, string key_prefix) => + (ServiceWorkerDatabaseStatus status, map<string, string> user_data); + // Clears user data associated with the given |registration_id| filtered by + // |key_prefix|. + ClearUserDataByKeyPrefixes(int64 registratation_id, + array<string> key_prefixes) => + (ServiceWorkerDatabaseStatus status); };
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 8e99faa..0fbb9189 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -52,7 +52,7 @@ <translation id="1197088940767939838">برتقالي</translation> <translation id="1201402288615127009">التالي</translation> <translation id="1201895884277373915">المزيد من هذا الموقع</translation> -<translation id="1205963431094182634">يُرجى تسجيل الدخول لاستخدام كلمة المرور المُخزّنة في حسابك على Google.</translation> +<translation id="1205963431094182634">يُرجى تسجيل الدخول لاستخدام كلمات المرور المُخزّنة في حسابك على Google.</translation> <translation id="1206967143813997005">توقيع أوَّلي سيئ</translation> <translation id="1209206284964581585">إخفاء الآن</translation> <translation id="121201262018556460">لقد حاولت الوصول إلى <ph name="DOMAIN" />، ولكن الخادم قدّم شهادة تحتوي على مفتاح ضعيف. ربما قام أحد المهاجمين باختراق المفتاح الخاص، ولا يكون الخادم هو الخادم الذي تتوقعه (قد تكون على اتصال بأحد المهاجمين).</translation> @@ -943,7 +943,7 @@ <translation id="5029568752722684782">محو النسخة</translation> <translation id="5030338702439866405">جهة الإصدار</translation> <translation id="503069730517007720">يلزم شهادة جذر لـ "<ph name="SOFTWARE_NAME" />" ولكن لم يتم تثبيتها. ينبغي على مشرف تقنية المعلومات أن يلقي نظرة على تعليمات التهيئة لـ "<ph name="SOFTWARE_NAME" />" لإصلاح تلك المشكلة. <ph name="FURTHER_EXPLANATION" /></translation> -<translation id="5031870354684148875">لمحة عامة عن "ترجمة Google"</translation> +<translation id="5031870354684148875">لمحة عن "ترجمة Google"</translation> <translation id="503498442187459473">يريد <ph name="HOST" /> استخدام الكاميرا والميكروفون.</translation> <translation id="5039804452771397117">سماح</translation> <translation id="5040262127954254034">الخصوصية</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 97fee770..8205efd 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -52,6 +52,7 @@ <translation id="1197088940767939838">কমলা</translation> <translation id="1201402288615127009">পরবর্তী</translation> <translation id="1201895884277373915">এই সাইট থেকে আরও</translation> +<translation id="1205963431094182634">আপনার Google অ্যাকাউন্টে স্টোর করা পাসওয়ার্ড ব্যবহার করার জন্য আবার সাইন-ইন করুন</translation> <translation id="1206967143813997005">নষ্ট প্রাথমিক স্বাক্ষর</translation> <translation id="1209206284964581585">এখনকার মতো লুকান</translation> <translation id="121201262018556460">আপনি <ph name="DOMAIN" /> অ্যাক্সেস করার চেষ্টা করেছেন, কিন্তু সার্ভার একটি দুর্বল কী সম্বলিত সার্টিফিকেট উপস্থাপন করেছে৷ কোনও আক্রমণকারী ব্যক্তিগত কী অ্যাক্সেস করে থাকতে পারে এবং সার্ভারটি আপনার প্রত্যাশিত সার্ভার নাও হতে পারে (হতে পারে আপনি একজন আক্রমণকারীর সাথে যোগাযোগ করছেন)৷</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 2d140a2c..2dd4d55 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -52,7 +52,7 @@ <translation id="1197088940767939838">Naranja</translation> <translation id="1201402288615127009">Siguiente</translation> <translation id="1201895884277373915">Más entradas de este sitio</translation> -<translation id="1205963431094182634">Iniciar sesión para poder usar las contraseñas almacenadas en tu cuenta de Google</translation> +<translation id="1205963431094182634">Inicia sesión para poder usar las contraseñas almacenadas en tu cuenta de Google</translation> <translation id="1206967143813997005">Firma inicial no válida</translation> <translation id="1209206284964581585">Ocultar por ahora</translation> <translation id="121201262018556460">Has intentado acceder a <ph name="DOMAIN" />, pero el servidor ha presentado un certificado que contiene una clave no segura. Es posible que alguien haya descifrado la clave privada y que hayas accedido a la página de esa persona en lugar de establecer conexión con el servidor.</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index 5d78cfd..a13e35a 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -1298,7 +1298,7 @@ <translation id="6529602333819889595">&Berregin ezabatzea</translation> <translation id="6534179046333460208">Web fisikoaren iradokizunak</translation> <translation id="6543609420755597723">Partekatu administratzailearekin Chrome Enterprise zerbitzuaren konektoreek markatutako segurtasun-gertaerei buruzko datuak. Datu horien artean baliteke hauek agertzea: bisitatzen dituzun orrien URLak, fitxategien izenak edo metadatuak, eta gailuan nahiz Chrome-n saioa hasteko erabiltzen duzun erabiltzaile-izena.</translation> -<translation id="6545864417968258051">Bluetooth bidezko gailuak bilatzea</translation> +<translation id="6545864417968258051">Bluetooth bidezko gailuen bilaketa</translation> <translation id="6547208576736763147">Bi zulo ezkerrean</translation> <translation id="6554795675067793129"><ph name="ENROLLMENT_DOMAIN" /> domeinuak kudeatzen du zure kontua.</translation> <translation id="6556866813142980365">Berregin</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index 571955a..0253541 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -52,6 +52,7 @@ <translation id="1197088940767939838">כתום</translation> <translation id="1201402288615127009">הבא</translation> <translation id="1201895884277373915">עוד מאתר זה</translation> +<translation id="1205963431094182634">עליך להיכנס כדי להשתמש בסיסמאות המאוחסנות בחשבון Google</translation> <translation id="1206967143813997005">חתימה ראשונית לא חוקית</translation> <translation id="1209206284964581585">הסתר בינתיים</translation> <translation id="121201262018556460">ניסית להגיע אל <ph name="DOMAIN" />, אך השרת הציג אישור המכיל מפתח חלש. ייתכן שתוקף פרץ את המפתח הפרטי, והשרת אינו השרת שרצית (ייתכן שאתה מתקשר עם תוקף).</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 0c323169..4bddfd95 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -52,7 +52,7 @@ <translation id="1197088940767939838">Оранжевый</translation> <translation id="1201402288615127009">Далее</translation> <translation id="1201895884277373915">Другие записи по этому сайту</translation> -<translation id="1205963431094182634">Чтобы использовать пароли, сохраненные в аккаунте Google, выполните вход.</translation> +<translation id="1205963431094182634">Чтобы использовать пароли, сохраненные в аккаунте Google, выполните вход</translation> <translation id="1206967143813997005">Начальная подпись недействительна</translation> <translation id="1209206284964581585">Скрыть</translation> <translation id="121201262018556460">Вы попытались перейти на сайт <ph name="DOMAIN" />, но сервер предоставил сертификат с ненадежным ключом. Возможно, частный ключ был взломан злоумышленником, а сервер выдает себя за другой (вероятно, это атака).</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index a80d9a0..2e2c86cb 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -52,6 +52,7 @@ <translation id="1197088940767939838">ஆரஞ்சு</translation> <translation id="1201402288615127009">அடுத்து</translation> <translation id="1201895884277373915">இந்தத் தளம் கூடுதலாக வழங்குபவை</translation> +<translation id="1205963431094182634">உங்கள் Google கணக்கில் சேமிக்கப்பட்டுள்ள கடவுச்சொற்களை உபயோகிக்க உள்நுழையவும்</translation> <translation id="1206967143813997005">தொடக்கக் கையொப்பம் சரியானதல்ல</translation> <translation id="1209206284964581585">இப்போதைக்கு மறை</translation> <translation id="121201262018556460">நீங்கள் <ph name="DOMAIN" /> ஐ அடைய முயற்சித்தீர்கள் ஆனால் சேவையகம் ஒரு வலுவற்ற விசை கொண்ட சான்றிதழை வழங்கியது. தனிப்பட்ட விசையை தீங்கிழைப்பவர் களவாடி இருப்பதால், சேவையகம் நீங்கள் எதிர்பார்த்த (தீங்கிழைப்பவருடன் நீங்கள் தகவல் பரிமாற்றம் செய்துகொண்டிருக்கலாம்) சேவையகமாக இல்லாமல் இருக்கலாம்.</translation>
diff --git a/components/translate/content/browser/BUILD.gn b/components/translate/content/browser/BUILD.gn index 6a3bb91..884e8a0 100644 --- a/components/translate/content/browser/BUILD.gn +++ b/components/translate/content/browser/BUILD.gn
@@ -10,6 +10,10 @@ "content_record_page_language.h", "content_translate_driver.cc", "content_translate_driver.h", + "content_translate_util.cc", + "content_translate_util.h", + "per_frame_content_translate_driver.cc", + "per_frame_content_translate_driver.h", ] public_deps = [ @@ -22,12 +26,25 @@ deps = [ "//components/language/core/browser", "//components/search_engines:search_engines", + "//components/translate/core/language_detection:language_detection", "//components/ukm/content", "//content/public/common", "//net", ] } +source_set("unit_tests") { + testonly = true + sources = [ "per_frame_content_translate_driver_unittest.cc" ] + + deps = [ + ":browser", + "//base", + "//content/test:test_support", + "//testing/gtest", + ] +} + static_library("test_support") { testonly = true
diff --git a/components/translate/content/browser/DEPS b/components/translate/content/browser/DEPS index f321c73..c51849f 100644 --- a/components/translate/content/browser/DEPS +++ b/components/translate/content/browser/DEPS
@@ -1,6 +1,14 @@ include_rules = [ "+content/public/browser", "+components/google/core/common", + "+components/translate/core/language_detection", "+components/ukm", "+services/metrics/public/cpp", + "+third_party/blink/public/common", ] + +specific_include_rules = { + '.*_[a-z]*test\.cc': [ + "+content/public/test", + ] +}
diff --git a/components/translate/content/browser/content_translate_driver.h b/components/translate/content/browser/content_translate_driver.h index aba35d5..018a1658 100644 --- a/components/translate/content/browser/content_translate_driver.h +++ b/components/translate/content/browser/content_translate_driver.h
@@ -122,6 +122,17 @@ const translate::LanguageDetectionDetails& details, bool page_needs_translation) override; + protected: + const base::ObserverList<Observer, true>::Unchecked& observer_list() const { + return observer_list_; + } + + TranslateManager* translate_manager() const { return translate_manager_; } + + language::UrlLanguageHistogram* language_histogram() const { + return language_histogram_; + } + private: void OnPageAway(int page_seq_no);
diff --git a/components/translate/content/browser/content_translate_util.cc b/components/translate/content/browser/content_translate_util.cc new file mode 100644 index 0000000..622bd34f --- /dev/null +++ b/components/translate/content/browser/content_translate_util.cc
@@ -0,0 +1,31 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/translate/content/browser/content_translate_util.h" + +#include "content/public/common/url_constants.h" +#include "url/gurl.h" + +namespace translate { + +bool IsTranslatableURL(const GURL& url) { + // A URLs is translatable unless it is one of the following: + // - empty (can happen for popups created with window.open("")) + // - an internal URL (chrome:// and others) + // - the devtools (which is considered UI) + // - about:blank + // - Chrome OS file manager extension [but not able to check here] + // - an FTP page (as FTP pages tend to have long lists of filenames that may + // confuse the CLD) + // Note: this is duplicated logic from TranslateService (missing a chromeos + // file manager check at this components level). + // TODO(1064974) Reuse this utility in TranslateService once subframe + // translation launched. Note that the chromeos checks in the + // TranslateService version will still need to be at the browser level. + return !url.is_empty() && !url.SchemeIs(content::kChromeUIScheme) && + !url.SchemeIs(content::kChromeDevToolsScheme) && !url.IsAboutBlank() && + !url.SchemeIs(url::kFtpScheme); +} + +} // namespace translate
diff --git a/components/translate/content/browser/content_translate_util.h b/components/translate/content/browser/content_translate_util.h new file mode 100644 index 0000000..6fdb727 --- /dev/null +++ b/components/translate/content/browser/content_translate_util.h
@@ -0,0 +1,17 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_UTIL_H_ +#define COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_UTIL_H_ + +class GURL; + +namespace translate { + +// Returns true if the URL is applicable for translation. +bool IsTranslatableURL(const GURL& url); + +} // namespace translate + +#endif // COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_UTIL_H_
diff --git a/components/translate/content/browser/per_frame_content_translate_driver.cc b/components/translate/content/browser/per_frame_content_translate_driver.cc new file mode 100644 index 0000000..d6407be --- /dev/null +++ b/components/translate/content/browser/per_frame_content_translate_driver.cc
@@ -0,0 +1,434 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/translate/content/browser/per_frame_content_translate_driver.h" + +#include <memory> +#include <string> +#include <utility> + +#include "base/bind.h" +#include "base/feature_list.h" +#include "base/location.h" +#include "base/logging.h" +#include "base/metrics/histogram_macros.h" +#include "base/single_thread_task_runner.h" +#include "base/strings/utf_string_conversions.h" +#include "base/supports_user_data.h" +#include "base/threading/thread_task_runner_handle.h" +#include "components/google/core/common/google_util.h" +#include "components/language/core/browser/url_language_histogram.h" +#include "components/translate/content/browser/content_record_page_language.h" +#include "components/translate/content/browser/content_translate_util.h" +#include "components/translate/core/browser/translate_browser_metrics.h" +#include "components/translate/core/browser/translate_download_manager.h" +#include "components/translate/core/browser/translate_manager.h" +#include "components/translate/core/common/translate_metrics.h" +#include "components/translate/core/language_detection/language_detection_util.h" +#include "components/ukm/content/source_url_recorder.h" +#include "content/public/browser/browser_context.h" +#include "content/public/browser/navigation_details.h" +#include "content/public/browser/navigation_entry.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/page_navigator.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/web_contents.h" +#include "content/public/common/referrer.h" +#include "content/public/common/web_preferences.h" +#include "net/http/http_status_code.h" +#include "services/metrics/public/cpp/ukm_source_id.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" +#include "ui/accessibility/ax_node.h" +#include "ui/accessibility/ax_tree.h" +#include "url/gurl.h" + +namespace translate { + +namespace { + +// Constants for UMA statistic collection. +static const char kTranslateCaptureText[] = "Translate.CaptureText"; +static const char kTranslateFrameCount[] = "Translate.TranslateFrameCount"; +static const char kTranslateSubframeSuccessPercentage[] = + "Translate.TranslateSubframe.SuccessPercentage"; +static const char kTranslateSubframeErrorType[] = + "Translate.TranslateSubframe.ErrorType"; + +// Overrides the hrefTranslate logic to auto-translate when the navigation is +// from any origin rather than only Google origins. Used for manual testing +// where the test page may reside on a test domain. +const base::Feature kAutoHrefTranslateAllOrigins{ + "AutoHrefTranslateAllOrigins", base::FEATURE_DISABLED_BY_DEFAULT}; + +// A helper function for CombineTextNodesAndMakeCallback() below. +// This is a copy of logic from macos specific RenderWidgetHostViewMac +// that was created in https://chromium-review.googlesource.com/956029 +// TODO(dougarnett): Factor this out into a utility class that can be +// shared here and with the original macos copy. +void AddTextNodesToVector(const ui::AXNode* node, + std::vector<base::string16>* strings) { + const ui::AXNodeData& node_data = node->data(); + + if (node_data.role == ax::mojom::Role::kStaticText) { + if (node_data.HasStringAttribute(ax::mojom::StringAttribute::kName)) { + strings->emplace_back( + node_data.GetString16Attribute(ax::mojom::StringAttribute::kName)); + } + return; + } + + for (const auto* child : node->children()) + AddTextNodesToVector(child, strings); +} + +using PageContentsCallback = base::OnceCallback<void(const base::string16&)>; +void CombineTextNodesAndMakeCallback(PageContentsCallback callback, + const ui::AXTreeUpdate& update) { + ui::AXTree tree; + if (!tree.Unserialize(update)) { + std::move(callback).Run(base::ASCIIToUTF16("")); + return; + } + + std::vector<base::string16> text_node_contents; + text_node_contents.reserve(update.nodes.size()); + + AddTextNodesToVector(tree.root(), &text_node_contents); + + std::move(callback).Run( + base::JoinString(text_node_contents, base::ASCIIToUTF16("\n"))); +} +} // namespace + +PerFrameContentTranslateDriver::PendingRequestStats::PendingRequestStats() = + default; +PerFrameContentTranslateDriver::PendingRequestStats::~PendingRequestStats() = + default; + +void PerFrameContentTranslateDriver::PendingRequestStats::Clear() { + sub_frame_request_count = 0; + main_frame_success = false; + sub_frame_success_count = 0; + sub_frame_errors.clear(); +} + +void PerFrameContentTranslateDriver::PendingRequestStats::Report() { + // Only called when main frame translate succeeds so total frame count is + // 1 for main frame plus the sub frame count. + UMA_HISTOGRAM_COUNTS_100(kTranslateFrameCount, (1 + sub_frame_request_count)); + if (main_frame_success) { + if (sub_frame_request_count > 0) { + int success_percentage_as_int = + (sub_frame_success_count * 100) / sub_frame_request_count; + UMA_HISTOGRAM_PERCENTAGE(kTranslateSubframeSuccessPercentage, + success_percentage_as_int); + } + for (TranslateErrors::Type error_type : sub_frame_errors) { + UMA_HISTOGRAM_ENUMERATION(kTranslateSubframeErrorType, error_type, + TranslateErrors::TRANSLATE_ERROR_MAX); + } + } +} + +PerFrameContentTranslateDriver::PerFrameContentTranslateDriver( + content::NavigationController* nav_controller, + language::UrlLanguageHistogram* url_language_histogram) + : ContentTranslateDriver(nav_controller, url_language_histogram) {} + +PerFrameContentTranslateDriver::~PerFrameContentTranslateDriver() = default; + +// TranslateDriver methods + +void PerFrameContentTranslateDriver::TranslatePage( + int page_seq_no, + const std::string& translate_script, + const std::string& source_lang, + const std::string& target_lang) { + if (!IsForCurrentPage(page_seq_no) || !main_frame_translate_agent_) + return; + + ReportUserActionDuration(language_determined_time_, base::TimeTicks::Now()); + stats_.Clear(); + + web_contents()->ForEachFrame(base::BindRepeating( + &PerFrameContentTranslateDriver::TranslateFrame, base::Unretained(this), + translate_script, source_lang, target_lang)); +} + +void PerFrameContentTranslateDriver::TranslateFrame( + const std::string& translate_script, + const std::string& source_lang, + const std::string& target_lang, + content::RenderFrameHost* render_frame_host) { + if (!render_frame_host->GetParent()) { + DCHECK(main_frame_translate_agent_); + main_frame_translate_agent_->TranslateFrame( + translate_script, source_lang, target_lang, + base::BindOnce(&PerFrameContentTranslateDriver::OnMainFrameTranslated, + weak_pointer_factory_.GetWeakPtr())); + } else { + mojo::AssociatedRemote<mojom::TranslateAgent> frame_agent; + render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface( + &frame_agent); + frame_agent->TranslateFrame( + translate_script, source_lang, target_lang, + base::BindOnce(&PerFrameContentTranslateDriver::OnSubFrameTranslated, + weak_pointer_factory_.GetWeakPtr())); + stats_.sub_frame_request_count++; + } + stats_.pending_request_count++; +} + +void PerFrameContentTranslateDriver::RevertTranslation(int page_seq_no) { + if (!IsForCurrentPage(page_seq_no) || !main_frame_translate_agent_) + return; + + web_contents()->ForEachFrame(base::BindRepeating( + &PerFrameContentTranslateDriver::RevertFrame, base::Unretained(this))); +} + +void PerFrameContentTranslateDriver::RevertFrame( + content::RenderFrameHost* render_frame_host) { + if (!render_frame_host->GetParent()) { + DCHECK(main_frame_translate_agent_); + main_frame_translate_agent_->RevertTranslation(); + } else { + mojo::AssociatedRemote<mojom::TranslateAgent> frame_agent; + render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface( + &frame_agent); + frame_agent->RevertTranslation(); + } +} + +// content::WebContentsObserver methods +void PerFrameContentTranslateDriver::NavigationEntryCommitted( + const content::LoadCommittedDetails& load_details) { + // Check whether this is a reload: When doing a page reload, the + // TranslateLanguageDetermined IPC is not sent so the translation needs to be + // explicitly initiated. + + content::NavigationEntry* entry = + web_contents()->GetController().GetLastCommittedEntry(); + if (!entry) { + NOTREACHED(); + return; + } + + // If the navigation happened while offline don't show the translate + // bar since there will be nothing to translate. + if (load_details.http_status_code == 0 || + load_details.http_status_code == net::HTTP_INTERNAL_SERVER_ERROR) { + return; + } + + if (!load_details.is_main_frame && + translate_manager()->GetLanguageState().translation_declined()) { + // Some sites (such as Google map) may trigger sub-frame navigations + // when the user interacts with the page. We don't want to show a new + // infobar if the user already dismissed one in that case. + return; + } + + // If not a reload, return. + if (!ui::PageTransitionCoreTypeIs(entry->GetTransitionType(), + ui::PAGE_TRANSITION_RELOAD) && + load_details.type != content::NAVIGATION_TYPE_SAME_PAGE) { + return; + } + + if (entry->GetTransitionType() & ui::PAGE_TRANSITION_FORWARD_BACK) { + // Workaround for http://crbug.com/653051: back navigation sometimes have + // the reload core type. Once http://crbug.com/669008 got resolved, we + // could revisit here for a thorough solution. + // + // This means that the new translation won't be started when the page + // is restored from back-forward cache, which is the right thing to do. + // TODO(crbug.com/1001087): Ensure that it stays disabled for + // back-forward navigations even when bug above is fixed. + return; + } + + if (!translate_manager()->GetLanguageState().page_needs_translation()) + return; + + // Note that we delay it as the ordering of the processing of this callback + // by WebContentsObservers is undefined and might result in the current + // infobars being removed. Since the translation initiation process might add + // an infobar, it must be done after that. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce( + &PerFrameContentTranslateDriver::InitiateTranslation, + weak_pointer_factory_.GetWeakPtr(), + translate_manager()->GetLanguageState().original_language(), 0)); +} + +void PerFrameContentTranslateDriver::DidFinishNavigation( + content::NavigationHandle* navigation_handle) { + if (!navigation_handle->HasCommitted()) + return; + + // Let the LanguageState clear its state. + const bool reload = + navigation_handle->GetReloadType() != content::ReloadType::NONE || + navigation_handle->IsSameDocument(); + + const base::Optional<url::Origin>& initiator_origin = + navigation_handle->GetInitiatorOrigin(); + + bool navigation_from_google = + initiator_origin.has_value() && + (google_util::IsGoogleDomainUrl(initiator_origin->GetURL(), + google_util::DISALLOW_SUBDOMAIN, + google_util::ALLOW_NON_STANDARD_PORTS) || + base::FeatureList::IsEnabled(kAutoHrefTranslateAllOrigins)); + + translate_manager()->GetLanguageState().DidNavigate( + navigation_handle->IsSameDocument(), navigation_handle->IsInMainFrame(), + reload, navigation_handle->GetHrefTranslate(), navigation_from_google); +} + +void PerFrameContentTranslateDriver::DOMContentLoaded( + content::RenderFrameHost* render_frame_host) { + if (render_frame_host->GetParent()) { + // Nothing to do for sub frames here. + return; + } + + // Main frame loaded, set new sequence number. + current_seq_no_ = (current_seq_no_ % 100000) + 1; + translate_manager()->set_current_seq_no(current_seq_no_); + + main_frame_translate_agent_.reset(); + web_contents()->GetMainFrame()->GetRemoteAssociatedInterfaces()->GetInterface( + &main_frame_translate_agent_); +} + +void PerFrameContentTranslateDriver::DocumentOnLoadCompletedInMainFrame() { + if (translate::IsTranslatableURL(web_contents()->GetURL())) + StartLanguageDetection(); +} + +void PerFrameContentTranslateDriver::StartLanguageDetection() { + DCHECK(main_frame_translate_agent_); + if (!main_frame_translate_agent_) + return; + + // Get page contents (via snapshot of a11y tree) for language determination. + // This will include subframe content for any subframes loaded at this point. + base::TimeTicks capture_begin_time = base::TimeTicks::Now(); + awaiting_contents_ = true; + web_contents()->RequestAXTreeSnapshot( + base::BindOnce( + CombineTextNodesAndMakeCallback, + base::BindOnce(&PerFrameContentTranslateDriver::OnPageContents, + weak_pointer_factory_.GetWeakPtr(), + capture_begin_time)), + ui::AXMode::kWebContents); + + // Kick off language detection by first requesting web language details. + details_ = LanguageDetectionDetails(); + main_frame_translate_agent_->GetWebLanguageDetectionDetails(base::BindOnce( + &PerFrameContentTranslateDriver::OnWebLanguageDetectionDetails, + weak_pointer_factory_.GetWeakPtr())); +} + +void PerFrameContentTranslateDriver::OnPageLanguageDetermined( + const LanguageDetectionDetails& details, + bool page_needs_translation) { + language_determined_time_ = base::TimeTicks::Now(); + + // If we have a language histogram (i.e. we're not in incognito), update it + // with the detected language of every page visited. + if (language_histogram() && details.is_cld_reliable) + language_histogram()->OnPageVisited(details.cld_language); + + if (translate_manager() && web_contents()) { + translate_manager()->GetLanguageState().LanguageDetermined( + details.adopted_language, page_needs_translation); + translate_manager()->InitiateTranslation(details.adopted_language); + } + + for (auto& observer : observer_list()) + observer.OnLanguageDetermined(details); +} + +void PerFrameContentTranslateDriver::OnWebLanguageDetectionDetails( + const std::string& content_language, + const std::string& html_lang, + const GURL& url, + bool has_notranslate_meta) { + details_.content_language = content_language; + details_.html_root_language = html_lang; + details_.url = url; + details_.has_notranslate = has_notranslate_meta; + + if (!awaiting_contents_) + ComputeActualPageLanguage(); +} + +void PerFrameContentTranslateDriver::OnPageContents( + base::TimeTicks capture_begin_time, + const base::string16& contents) { + awaiting_contents_ = false; + details_.contents = contents; + UMA_HISTOGRAM_TIMES(kTranslateCaptureText, + base::TimeTicks::Now() - capture_begin_time); + + if (!details_.url.is_empty()) + ComputeActualPageLanguage(); +} + +void PerFrameContentTranslateDriver::ComputeActualPageLanguage() { + // TODO(crbug.com/1063520): Move this language detection to a sandboxed + // utility process. + std::string language = DeterminePageLanguage( + details_.content_language, details_.html_root_language, details_.contents, + &details_.cld_language, &details_.is_cld_reliable); + + if (!language.empty()) { + details_.time = base::Time::Now(); + details_.adopted_language = language; + + OnPageLanguageDetermined(details_, + !details_.has_notranslate && !language.empty()); + } + details_ = LanguageDetectionDetails(); +} + +void PerFrameContentTranslateDriver::OnMainFrameTranslated( + bool cancelled, + const std::string& original_lang, + const std::string& translated_lang, + TranslateErrors::Type error_type) { + OnPageTranslated(cancelled, original_lang, translated_lang, error_type); + if (error_type == TranslateErrors::NONE) { + stats_.main_frame_success = true; + } + if (--stats_.pending_request_count == 0) { + stats_.Report(); + } +} + +void PerFrameContentTranslateDriver::OnSubFrameTranslated( + bool cancelled, + const std::string& original_lang, + const std::string& translated_lang, + TranslateErrors::Type error_type) { + if (error_type == TranslateErrors::NONE) { + stats_.sub_frame_success_count++; + } else { + stats_.sub_frame_errors.push_back(error_type); + } + if (--stats_.pending_request_count == 0) { + stats_.Report(); + } +} + +bool PerFrameContentTranslateDriver::IsForCurrentPage(int page_seq_no) { + return page_seq_no > 0 && page_seq_no == current_seq_no_; +} + +} // namespace translate
diff --git a/components/translate/content/browser/per_frame_content_translate_driver.h b/components/translate/content/browser/per_frame_content_translate_driver.h new file mode 100644 index 0000000..e394f9d7 --- /dev/null +++ b/components/translate/content/browser/per_frame_content_translate_driver.h
@@ -0,0 +1,137 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_TRANSLATE_CONTENT_BROWSER_PER_FRAME_CONTENT_TRANSLATE_DRIVER_H_ +#define COMPONENTS_TRANSLATE_CONTENT_BROWSER_PER_FRAME_CONTENT_TRANSLATE_DRIVER_H_ + +#include <map> +#include <string> + +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "components/translate/content/browser/content_translate_driver.h" +#include "components/translate/content/common/translate.mojom.h" +#include "components/translate/core/browser/translate_driver.h" +#include "components/translate/core/common/translate_errors.h" +#include "content/public/browser/web_contents_observer.h" +#include "mojo/public/cpp/bindings/pending_associated_remote.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver_set.h" +#include "services/metrics/public/cpp/ukm_source_id.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" + +namespace content { +class NavigationController; +class WebContents; +} // namespace content + +namespace language { +class UrlLanguageHistogram; +} // namespace language + +namespace translate { + +struct LanguageDetectionDetails; + +// Content implementation of TranslateDriver that support translation of sub +// frames. +class PerFrameContentTranslateDriver : public ContentTranslateDriver { + public: + PerFrameContentTranslateDriver( + content::NavigationController* nav_controller, + language::UrlLanguageHistogram* url_language_histogram); + ~PerFrameContentTranslateDriver() override; + + // TranslateDriver methods. + void TranslatePage(int page_seq_no, + const std::string& translate_script, + const std::string& source_lang, + const std::string& target_lang) override; + void RevertTranslation(int page_seq_no) override; + + // content::WebContentsObserver implementation. + void NavigationEntryCommitted( + const content::LoadCommittedDetails& load_details) override; + void DidFinishNavigation( + content::NavigationHandle* navigation_handle) override; + void DOMContentLoaded(content::RenderFrameHost* render_frame_host) override; + void DocumentOnLoadCompletedInMainFrame() override; + + void OnPageLanguageDetermined(const LanguageDetectionDetails& details, + bool page_needs_translation); + + private: + friend class PerFrameContentTranslateDriverTest; + friend class TranslateManagerRenderViewHostTest; + + struct PendingRequestStats { + public: + PendingRequestStats(); + ~PendingRequestStats(); + + void Clear(); + void Report(); + + int pending_request_count = 0; + bool main_frame_success = false; + int sub_frame_request_count = 0; + int sub_frame_success_count = 0; + std::vector<TranslateErrors::Type> sub_frame_errors; + }; + + void StartLanguageDetection(); + + void TranslateFrame(const std::string& translate_script, + const std::string& source_lang, + const std::string& target_lang, + content::RenderFrameHost* render_frame_host); + + void RevertFrame(content::RenderFrameHost* render_frame_host); + + void OnWebLanguageDetectionDetails(const std::string& content_language, + const std::string& html_lang, + const GURL& url, + bool has_no_translate_meta); + + void OnPageContents(base::TimeTicks capture_begin_time, + const base::string16& contents); + + void ComputeActualPageLanguage(); + + void OnMainFrameTranslated(bool cancelled, + const std::string& original_lang, + const std::string& translated_lang, + TranslateErrors::Type error_type); + + void OnSubFrameTranslated(bool cancelled, + const std::string& original_lang, + const std::string& translated_lang, + TranslateErrors::Type error_type); + + bool IsForCurrentPage(int page_seq_no); + + // Sequence number to track most recent main frame for associated WebContents. + int current_seq_no_ = 0; + + LanguageDetectionDetails details_; + + bool awaiting_contents_ = false; + + mojo::AssociatedRemote<mojom::TranslateAgent> main_frame_translate_agent_; + + // Time when a page language is determined. This is used to know a duration + // time from showing infobar to requesting translation. + base::TimeTicks language_determined_time_; + + PendingRequestStats stats_; + + base::WeakPtrFactory<PerFrameContentTranslateDriver> weak_pointer_factory_{ + this}; + + DISALLOW_COPY_AND_ASSIGN(PerFrameContentTranslateDriver); +}; + +} // namespace translate + +#endif // COMPONENTS_TRANSLATE_CONTENT_BROWSER_PER_FRAME_CONTENT_TRANSLATE_DRIVER_H_
diff --git a/components/translate/content/browser/per_frame_content_translate_driver_unittest.cc b/components/translate/content/browser/per_frame_content_translate_driver_unittest.cc new file mode 100644 index 0000000..2b14c6c --- /dev/null +++ b/components/translate/content/browser/per_frame_content_translate_driver_unittest.cc
@@ -0,0 +1,155 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/translate/content/browser/per_frame_content_translate_driver.h" + +#include "base/strings/utf_string_conversions.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/test_renderer_host.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace translate { + +class DriverObserver : public ContentTranslateDriver::Observer { + public: + void OnLanguageDetermined( + const translate::LanguageDetectionDetails& details) override { + details_ = details; + } + + const translate::LanguageDetectionDetails& GetObservedDetails() const { + return details_; + } + + private: + translate::LanguageDetectionDetails details_; +}; + +class PerFrameContentTranslateDriverTest + : public content::RenderViewHostTestHarness { + public: + void SetUp() override { + content::RenderViewHostTestHarness::SetUp(); + driver_ = std::make_unique<PerFrameContentTranslateDriver>( + &(web_contents()->GetController()), + nullptr /* url_language_histogram */); + driver_->AddObserver(&observer_); + } + + void TearDown() override { + driver_->RemoveObserver(&observer_); + driver_.reset(); + content::RenderViewHostTestHarness::TearDown(); + } + + void OnWebLanguageDetectionDetails(const std::string& content_language, + const std::string& html_lang, + const GURL& url, + bool has_no_translate_meta) { + driver_->OnWebLanguageDetectionDetails(content_language, html_lang, url, + has_no_translate_meta); + } + + void OnPageContents(const base::string16& contents) { + driver_->OnPageContents(base::TimeTicks::Now(), contents); + } + + const std::string& GetAdoptedLanguage() const { + return observer_.GetObservedDetails().adopted_language; + } + + bool HasGoodContentDetection() const { + return observer_.GetObservedDetails().is_cld_reliable; + } + + bool DoNotTranslate() const { + return observer_.GetObservedDetails().has_notranslate; + } + + private: + std::unique_ptr<PerFrameContentTranslateDriver> driver_; + DriverObserver observer_; +}; + +TEST_F(PerFrameContentTranslateDriverTest, + ComputeActualPageLanguage_MetaTagOverridesMinimalContent) { + base::string16 contents = + base::UTF8ToUTF16("El niño atrapó un dorado muy grande con cebo vivo."); + OnPageContents(contents); + OnWebLanguageDetectionDetails("en" /* meta */, "" /* html */, + GURL("https://whatever.com"), + false /* notranslate */); + EXPECT_FALSE(DoNotTranslate()); + EXPECT_FALSE(HasGoodContentDetection()); + EXPECT_EQ("en", GetAdoptedLanguage()); +} + +TEST_F(PerFrameContentTranslateDriverTest, + ComputeActualPageLanguage_HtmlLangOverridesMetaTag) { + base::string16 contents = + base::UTF8ToUTF16("El niño atrapó un dorado muy grande con cebo vivo."); + OnPageContents(contents); + OnWebLanguageDetectionDetails("en" /* meta */, "fr" /* html */, + GURL("https://whatever.com"), + false /* notranslate */); + EXPECT_EQ("fr", GetAdoptedLanguage()); +} + +TEST_F(PerFrameContentTranslateDriverTest, + ComputeActualPageLanguage_SufficientContentOverridesMetaTag) { + base::string16 contents = base::UTF8ToUTF16( + "El niño atrapó un dorado muy grande con cebo vivo. Fileteó el " + "pescado y lo asó a la parrilla. Sabía excelente. Espera pescar otro " + "buen pescado mañana."); + OnPageContents(contents); + OnWebLanguageDetectionDetails("en" /* meta */, "" /* html */, + GURL("https://whatever.com"), + false /* notranslate */); + EXPECT_TRUE(HasGoodContentDetection()); + EXPECT_EQ("es", GetAdoptedLanguage()); +} + +TEST_F(PerFrameContentTranslateDriverTest, + ComputeActualPageLanguage_SufficientContentOverridesHtmlLang) { + base::string16 contents = base::UTF8ToUTF16( + "El niño atrapó un dorado muy grande con cebo vivo. Fileteó el " + "pescado y lo asó a la parrilla. Sabía excelente. Espera pescar otro " + "buen pescado mañana."); + OnPageContents(contents); + OnWebLanguageDetectionDetails("en" /* meta */, "es-MX" /* html */, + GURL("https://whatever.com"), + false /* notranslate */); + EXPECT_EQ("es", GetAdoptedLanguage()); +} + +TEST_F(PerFrameContentTranslateDriverTest, + ComputeActualPageLanguage_NoTranslateMetaTag) { + base::string16 contents = base::UTF8ToUTF16( + "El niño atrapó un dorado muy grande con cebo vivo. Fileteó el " + "pescado y lo asó a la parrilla. Sabía excelente. Espera pescar otro " + "buen pescado mañana."); + OnPageContents(contents); + OnWebLanguageDetectionDetails("en" /* meta */, "" /* html */, + GURL("https://whatever.com"), + true /* notranslate */); + EXPECT_TRUE(DoNotTranslate()); + EXPECT_EQ("es", GetAdoptedLanguage()); +} + +TEST_F(PerFrameContentTranslateDriverTest, + ComputeActualPageLanguage_LanguageFormatVariants) { + OnPageContents(base::UTF8ToUTF16("Some content")); + OnWebLanguageDetectionDetails("ZH_tw" /* meta */, "" /* html */, + GURL("https://whatever.com"), + false /* notranslate */); + EXPECT_EQ("zh-TW", GetAdoptedLanguage()); + + OnPageContents(base::UTF8ToUTF16("Some other content")); + OnWebLanguageDetectionDetails(" fr , es,en " /* meta */, "" /* html */, + GURL("https://whatever.com"), + false /* notranslate */); + EXPECT_EQ("fr", GetAdoptedLanguage()); +} + +} // namespace translate
diff --git a/components/url_formatter/elide_url_unittest.cc b/components/url_formatter/elide_url_unittest.cc index eaa56982..8ea66aa 100644 --- a/components/url_formatter/elide_url_unittest.cc +++ b/components/url_formatter/elide_url_unittest.cc
@@ -636,7 +636,7 @@ L"file://", L"file://", L"file://"}, {"Invalid scheme 1", "twelve://www.cyber.org/wow.php", L"", L"", L""}, {"Invalid scheme 2", "://www.cyber.org/wow.php", L"", L"", L""}, - {"Invalid port 1", "https://173.194.65.103:000", L"", L"", L""}, + {"Invalid port 1", "https://173.194.65.103:99999", L"", L"", L""}, {"Invalid port 2", "https://173.194.65.103:gruffle", L"", L"", L""}, {"Blob URL", "blob:http://www.html5rocks.com/4d4ff040-6d61-4446-86d3-13ca07ec9ab9",
diff --git a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc index 6875a7a6f..d0d2a61 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc +++ b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
@@ -141,7 +141,6 @@ AccessibilityTreeFormatterAuraLinux::BuildAccessibilityTree( BrowserAccessibility* root) { DCHECK(root); - DCHECK(root->instance_active()); BrowserAccessibilityAuraLinux* platform_root = ToBrowserAccessibilityAuraLinux(root);
diff --git a/content/browser/accessibility/accessibility_tree_formatter_mac.mm b/content/browser/accessibility/accessibility_tree_formatter_mac.mm index 26c357b..43239c58 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_mac.mm +++ b/content/browser/accessibility/accessibility_tree_formatter_mac.mm
@@ -43,7 +43,6 @@ std::unique_ptr<base::DictionaryValue> PopulatePosition( const BrowserAccessibility& node) { - DCHECK(node.instance_active()); BrowserAccessibilityManager* root_manager = node.manager()->GetRootManager(); DCHECK(root_manager); @@ -283,7 +282,6 @@ AccessibilityTreeFormatterMac::BuildAccessibilityTree( BrowserAccessibility* root) { DCHECK(root); - DCHECK(root->instance_active()); std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue); BrowserAccessibilityCocoa* cocoa_root = ToBrowserAccessibilityCocoa(root);
diff --git a/content/browser/accessibility/accessibility_tree_formatter_win.cc b/content/browser/accessibility/accessibility_tree_formatter_win.cc index 3ffab5e..6b8e3a3 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_win.cc +++ b/content/browser/accessibility/accessibility_tree_formatter_win.cc
@@ -277,7 +277,6 @@ AccessibilityTreeFormatterWin::BuildAccessibilityTree( BrowserAccessibility* start_node) { DCHECK(start_node); - DCHECK(start_node->instance_active()); BrowserAccessibilityManager* root_manager = start_node->manager()->GetRootManager(); DCHECK(root_manager);
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc index b7c30ad..8542b65 100644 --- a/content/browser/accessibility/browser_accessibility.cc +++ b/content/browser/accessibility/browser_accessibility.cc
@@ -157,8 +157,6 @@ } bool BrowserAccessibility::CanFireEvents() const { - if (!instance_active()) - return false; // Allow events unless this object would be trimmed away. return !PlatformIsChildOfLeafIncludingIgnored(); } @@ -180,9 +178,6 @@ } BrowserAccessibility* BrowserAccessibility::PlatformGetParent() const { - if (!instance_active()) - return nullptr; - ui::AXNode* parent = node_->GetUnignoredParent(); if (parent) return manager_->GetFromAXNode(parent); @@ -393,15 +388,11 @@ } uint32_t BrowserAccessibility::InternalChildCount() const { - if (!instance_active()) - return 0; return node_->GetUnignoredChildCount(); } BrowserAccessibility* BrowserAccessibility::InternalGetChild( uint32_t child_index) const { - if (!node_ || !manager_) - return nullptr; ui::AXNode* child_node = node_->GetUnignoredChildAtIndex(child_index); if (!child_node) return nullptr; @@ -410,8 +401,6 @@ } BrowserAccessibility* BrowserAccessibility::InternalGetParent() const { - if (!node_ || !manager_) - return nullptr; ui::AXNode* child_node = node_->GetUnignoredParent(); if (!child_node) return nullptr; @@ -976,9 +965,6 @@ bool BrowserAccessibility::HasInheritedStringAttribute( ax::mojom::StringAttribute attribute) const { - if (!instance_active()) - return false; - if (GetData().HasStringAttribute(attribute)) return true; return PlatformGetParent() && @@ -1154,8 +1140,6 @@ } std::vector<int> BrowserAccessibility::GetLineStartOffsets() const { - if (!instance_active()) - return std::vector<int>(); return node()->GetOrComputeLineStartOffsets(); } @@ -1337,9 +1321,6 @@ ax::mojom::IntAttribute attr) { DCHECK(ui::IsNodeIdIntAttribute(attr)); - if (!node_) - return nullptr; - int target_id; if (!GetData().GetIntAttribute(attr, &target_id)) return nullptr; @@ -1504,9 +1485,6 @@ } gfx::NativeViewAccessible BrowserAccessibility::GetParent() { - if (!instance_active()) - return nullptr; - BrowserAccessibility* parent = PlatformGetParent(); if (parent) return parent->GetNativeViewAccessible(); @@ -1588,7 +1566,7 @@ const BrowserAccessibility* parent, BrowserAccessibility* child) : parent_(parent), platform_iterator(parent, child) { - DCHECK(parent && parent->instance_active()); + DCHECK(parent); } BrowserAccessibility::PlatformChildIterator::~PlatformChildIterator() = default; @@ -1604,27 +1582,22 @@ } void BrowserAccessibility::PlatformChildIterator::operator++() { - DCHECK(parent_->instance_active()); ++platform_iterator; } void BrowserAccessibility::PlatformChildIterator::operator++(int) { - DCHECK(parent_->instance_active()); ++platform_iterator; } void BrowserAccessibility::PlatformChildIterator::operator--() { - DCHECK(parent_->instance_active()); --platform_iterator; } void BrowserAccessibility::PlatformChildIterator::operator--(int) { - DCHECK(parent_->instance_active()); --platform_iterator; } BrowserAccessibility* BrowserAccessibility::PlatformChildIterator::get() const { - DCHECK(parent_->instance_active()); return platform_iterator.get(); } @@ -1634,7 +1607,6 @@ } int BrowserAccessibility::PlatformChildIterator::GetIndexInParent() const { - DCHECK(parent_->instance_active()); if (platform_iterator == parent_->PlatformChildrenEnd().platform_iterator) return parent_->PlatformChildCount(); @@ -1664,8 +1636,6 @@ gfx::NativeViewAccessible BrowserAccessibility::HitTestSync( int physical_pixel_x, int physical_pixel_y) const { - if (!instance_active()) - return nullptr; BrowserAccessibility* accessible = manager_->CachingAsyncHitTest( gfx::Point(physical_pixel_x, physical_pixel_y)); if (!accessible)
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h index f64af53..7adcc41c 100644 --- a/content/browser/accessibility/browser_accessibility.h +++ b/content/browser/accessibility/browser_accessibility.h
@@ -293,7 +293,6 @@ // BrowserAccessibilityManager* manager() const { return manager_; } - bool instance_active() const { return node_ && manager_; } ui::AXNode* node() const { return node_; } // These access the internal unignored accessibility tree, which doesn't
diff --git a/content/browser/accessibility/browser_accessibility_auralinux.cc b/content/browser/accessibility/browser_accessibility_auralinux.cc index 23fa1b0..a7463066 100644 --- a/content/browser/accessibility/browser_accessibility_auralinux.cc +++ b/content/browser/accessibility/browser_accessibility_auralinux.cc
@@ -50,9 +50,6 @@ } ui::AXPlatformNode* BrowserAccessibilityAuraLinux::GetAXPlatformNode() const { - if (!instance_active()) - return nullptr; - return GetNode(); }
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm index 7249acc6..571c2519 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -340,11 +340,6 @@ BrowserAccessibilityPositionInstance CreateTreePosition( const BrowserAccessibility& object, int offset) { - // A tree position is one for which the |offset| argument refers to a child - // index instead of a character offset inside a text object. - if (!object.instance_active()) - return BrowserAccessibilityPosition::CreateNullPosition(); - const BrowserAccessibilityManager* manager = object.manager(); DCHECK(manager); return BrowserAccessibilityPosition::CreateTreePosition( @@ -355,12 +350,6 @@ const BrowserAccessibility& object, int offset, ax::mojom::TextAffinity affinity) { - // A text position is one for which the |offset| argument refers to a - // character offset inside a text object. As such, text positions are only - // valid on platform leaf objects, e.g. static text nodes and text fields. - if (!object.instance_active()) - return BrowserAccessibilityPosition::CreateNullPosition(); - const BrowserAccessibilityManager* manager = object.manager(); DCHECK(manager); return BrowserAccessibilityPosition::CreateTextPosition( @@ -1836,7 +1825,7 @@ } - (BOOL)instanceActive { - return _owner && _owner->instance_active(); + return _owner != nullptr; } // internal
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc index 5a0c4606..ac6f91d 100644 --- a/content/browser/accessibility/browser_accessibility_manager.cc +++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -246,7 +246,6 @@ if (!focus) return; - DCHECK(focus->instance_active()); // Don't fire focus events if the window itself doesn't have focus. // Bypass this check for some tests. if (!never_suppress_or_delay_events_for_testing_ && @@ -1388,12 +1387,8 @@ BrowserAccessibilityManager* BrowserAccessibilityManager::GetRootManager() const { BrowserAccessibility* parent = GetParentNodeFromParentTree(); - if (parent) { - DCHECK(parent->instance_active()) - << "The BrowserAccessibility object in the parent tree that is hosting " - "this tree should not have been destroyed before its child tree."; + if (parent) return parent->manager() ? parent->manager()->GetRootManager() : nullptr; - } if (IsRootTree()) return const_cast<BrowserAccessibilityManager*>(this);
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc index ae9e40f..1f46176 100644 --- a/content/browser/accessibility/browser_accessibility_win.cc +++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -41,9 +41,6 @@ } ui::AXPlatformNode* BrowserAccessibilityWin::GetAXPlatformNode() const { - if (!instance_active()) - return nullptr; - return GetCOM(); }
diff --git a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc index 56fc227..9bb1380 100644 --- a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc +++ b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
@@ -2392,15 +2392,11 @@ ASSERT_EQ(download::DownloadItem::CANCELLED, download->GetState()); } -// Flakly on ChromeOS https://crbug.com/860312 -#if defined(OS_CHROMEOS) -#define MAYBE_MultiDownload DISABLED_MultiDownload -#else -#define MAYBE_MultiDownload MultiDownload -#endif +// Flaky on ChromeOS https://crbug.com/860312 +// Also flaky on Wndows and other platforms: http://crbug.com/1070302 // Check that downloading multiple (in this case, 2) files does not result in // corrupted files. -IN_PROC_BROWSER_TEST_F(DevToolsDownloadContentTest, MAYBE_MultiDownload) { +IN_PROC_BROWSER_TEST_F(DevToolsDownloadContentTest, DISABLED_MultiDownload) { base::ThreadRestrictions::SetIOAllowed(true); base::ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
diff --git a/content/browser/form_controls_browsertest.cc b/content/browser/form_controls_browsertest.cc index 051421ca..3321605 100644 --- a/content/browser/form_controls_browsertest.cc +++ b/content/browser/form_controls_browsertest.cc
@@ -3,37 +3,35 @@ // found in the LICENSE file. #include "base/path_service.h" -#include "base/run_loop.h" #include "base/test/scoped_feature_list.h" -#include "base/threading/thread_restrictions.h" -#include "build/build_config.h" -#include "cc/test/pixel_comparator.h" -#include "cc/test/pixel_test_utils.h" -#include "content/browser/renderer_host/render_widget_host_impl.h" +#include "content/public/browser/render_widget_host_view.h" #include "content/public/common/content_paths.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" +#include "content/public/test/screenshot_test_utils.h" #include "content/public/test/test_utils.h" #include "content/shell/browser/shell.h" #include "ui/base/ui_base_features.h" -#include "ui/display/display_switches.h" -#include "ui/gfx/image/image.h" -#include "ui/gfx/skbitmap_operations.h" -// To rebaseline this test on android: -// 1. Run a CQ+1 dry run -// 2. Click the failing android bot -// 3. Find the failing content_browsertests step -// 4. Click the "Deterministic failure" link for the failing test case -// 5. Copy the "Actual pixels" data url and paste into browser -// 6. Save the image into your chromium checkout in content/test/data/forms/ +// TODO(crbug.com/958242): Move the baselines to skia gold for easier +// rebaselining when all platforms are supported. + +// To rebaseline this test on all platforms: +// 1. Run a CQ+1 dry run. +// 2. Click the failing bots for android, windows, mac, and linux. +// 3. Find the failing interactive_ui_browsertests step. +// 4. Click the "Deterministic failure" link for the failing test case. +// 5. Copy the "Actual pixels" data url and paste into browser. +// 6. Save the image into your chromium checkout in content/test/data/forms/. namespace content { class FormControlsBrowserTest : public ContentBrowserTest { public: - FormControlsBrowserTest() = default; + FormControlsBrowserTest() { + feature_list_.InitWithFeatures({features::kFormControlsRefresh}, {}); + } void SetUp() override { EnablePixelOutput(); @@ -42,128 +40,61 @@ void SetUpCommandLine(base::CommandLine* command_line) override { ContentBrowserTest::SetUpCommandLine(command_line); - // The --force-device-scale-factor flag helps make the pixel output of - // different android trybots more similar. - command_line->AppendSwitchASCII(switches::kForceDeviceScaleFactor, "1.0"); - feature_list_ = std::make_unique<base::test::ScopedFeatureList>(); - feature_list_->InitWithFeatures({features::kFormControlsRefresh}, {}); + SetUpCommandLineForScreenshotTest(command_line); } - void TearDown() override { feature_list_.reset(); } - - void AsyncSnapshotCallback(const gfx::Image& image) { - got_snapshot_ = true; - snapshot_ = image; - } - - void RunFormControlsTest(const std::string& expected_filename, - const std::string& body_html, - int screenshot_width, - int screenshot_height) { + void RunTest(const std::string& screenshot_filename, + const std::string& body_html, + int screenshot_width, + int screenshot_height) { base::ScopedAllowBlockingForTesting allow_blocking; + ASSERT_TRUE(features::IsFormControlsRefreshEnabled()); - std::string url = - "data:text/html,<!DOCTYPE html>" - "<head>" - // The <meta name=viewport> tag helps make the pixel output of - // different android trybots more similar. - " <meta name=\"viewport\" content=\"width=640, initial-scale=1, " - " maximum-scale=1, minimum-scale=1\">" - "</head>" - "<body>" + - body_html + "</body>"; - ASSERT_TRUE(NavigateToURL(shell(), GURL(url))); - - RenderWidgetHostImpl* const rwh = - RenderWidgetHostImpl::From(shell() - ->web_contents() - ->GetRenderWidgetHostView() - ->GetRenderWidgetHost()); - CHECK(rwh); - rwh->GetSnapshotFromBrowser( - base::BindOnce(&FormControlsBrowserTest::AsyncSnapshotCallback, - base::Unretained(this)), - /* from_surface */ true); - while (!got_snapshot_) - base::RunLoop().RunUntilIdle(); - SkBitmap bitmap = SkBitmapOperations::CreateTiledBitmap( - *snapshot_.ToSkBitmap(), /* src_x */ 0, /* src_y */ 0, screenshot_width, - screenshot_height); - base::FilePath dir_test_data; ASSERT_TRUE(base::PathService::Get(DIR_TEST_DATA, &dir_test_data)); - std::string filename_with_extension = expected_filename; -#if defined(OS_ANDROID) - filename_with_extension += "_android"; -#endif - filename_with_extension += ".png"; - base::FilePath expected_path = - dir_test_data.AppendASCII("forms").AppendASCII(filename_with_extension); - SkBitmap expected_bitmap; - ASSERT_TRUE(cc::ReadPNGFile(expected_path, &expected_bitmap)); + base::FilePath golden_screenshot_filepath = + dir_test_data.AppendASCII("forms").AppendASCII(screenshot_filename + + ".png"); - EXPECT_TRUE(cc::MatchesBitmap( - bitmap, expected_bitmap, -#if defined(OS_MACOSX) - // The Mac 10.12 trybot has more significant subpixel rendering - // differences which we accommodate for here with a large avg/max - // per-pixel error limit. - // TODO(crbug.com/1037971): Remove this special case for mac once this - // bug is resolved. - cc::FuzzyPixelComparator(/* discard_alpha */ true, - /* error_pixels_percentage_limit */ 7.f, - /* small_error_pixels_percentage_limit */ 0.f, - /* avg_abs_error_limit */ 16.f, - /* max_abs_error_limit */ 79.f, - /* small_error_threshold */ 0))); -#else - // We use a fuzzy comparator to accommodate for slight - // differences between the kitkat and marshmallow trybots that aren't - // visible to the human eye. We use a very low error limit because the - // pixels that are different are very similar shades of color. - cc::FuzzyPixelComparator(/* discard_alpha */ true, - /* error_pixels_percentage_limit */ 6.f, - /* small_error_pixels_percentage_limit */ 0.f, - /* avg_abs_error_limit */ 4.f, - /* max_abs_error_limit */ 4.f, - /* small_error_threshold */ 0))); -#endif + ASSERT_TRUE(NavigateToURL( + shell()->web_contents(), + GURL("data:text/html,<!DOCTYPE html><body>" + body_html + "</body>"))); + + RunScreenshotTest(shell()->web_contents(), golden_screenshot_filepath, + screenshot_width, screenshot_height); } - bool got_snapshot_ = false; - gfx::Image snapshot_; - std::unique_ptr<base::test::ScopedFeatureList> feature_list_; + private: + base::test::ScopedFeatureList feature_list_; }; IN_PROC_BROWSER_TEST_F(FormControlsBrowserTest, Checkbox) { - RunFormControlsTest( - "form_controls_browsertest_checkbox", - "<input type=checkbox>" - "<input type=checkbox checked>" - "<input type=checkbox disabled>" - "<input type=checkbox checked disabled>" - "<input type=checkbox id=\"indeterminate\">" - "<script>" - " document.getElementById('indeterminate').indeterminate = true" - "</script>", - /* screenshot_width */ 130, - /* screenshot_height */ 40); + RunTest("form_controls_browsertest_checkbox", + "<input type=checkbox>" + "<input type=checkbox checked>" + "<input type=checkbox disabled>" + "<input type=checkbox checked disabled>" + "<input type=checkbox id=\"indeterminate\">" + "<script>" + " document.getElementById('indeterminate').indeterminate = true" + "</script>", + /* screenshot_width */ 130, + /* screenshot_height */ 40); } IN_PROC_BROWSER_TEST_F(FormControlsBrowserTest, Radio) { - RunFormControlsTest( - "form_controls_browsertest_radio", - "<input type=radio>" - "<input type=radio checked>" - "<input type=radio disabled>" - "<input type=radio checked disabled>" - "<input type=radio id=\"indeterminate\">" - "<script>" - " document.getElementById('indeterminate').indeterminate = true" - "</script>", - /* screenshot_width */ 140, - /* screenshot_height */ 40); + RunTest("form_controls_browsertest_radio", + "<input type=radio>" + "<input type=radio checked>" + "<input type=radio disabled>" + "<input type=radio checked disabled>" + "<input type=radio id=\"indeterminate\">" + "<script>" + " document.getElementById('indeterminate').indeterminate = true" + "</script>", + /* screenshot_width */ 140, + /* screenshot_height */ 40); } // TODO(jarhar): Add tests for other elements from
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc index 8ba4e1442..4f4b588 100644 --- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc +++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -10474,4 +10474,95 @@ EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType()); } +// Test for a navigation that is +// 1) initiated by a cross-site frame +// 2) same-document +// 3) to a http URL with port 0. +// This is the scenario behind https://crbug.com/1065532. +IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, + SameDocumentNavigationToHttpPortZero) { + GURL page_url(embedded_test_server()->GetURL( + "foo.com", "/navigation_controller/simple_page_1.html")); + EXPECT_TRUE(NavigateToURL(shell(), page_url)); + + // Inject a HTTP subframe. + const char kSubframeScriptTemplate[] = R"( + var iframe = document.createElement('iframe'); + iframe.src = $1; + document.body.appendChild(iframe); + )"; + GURL subframe_initial_url = + embedded_test_server()->GetURL("another-site.com", "/title2.html"); + { + TestNavigationObserver subframe_injection_observer(shell()->web_contents(), + 1); + ASSERT_TRUE(ExecJs( + shell(), JsReplace(kSubframeScriptTemplate, subframe_initial_url))); + subframe_injection_observer.WaitForNavigationFinished(); + ASSERT_TRUE(subframe_injection_observer.last_navigation_succeeded()); + } + + // From the main page initiate a navigation of the cross-site subframe to a + // http URL that has port=0. Note that this is valid port according to the + // URL spec (https://url.spec.whatwg.org/#port-state). + // + // Before the fix for SchemeHostPort's handling of port=0 the 2nd iteration + // below would produce a browser process CHECK/crash: + // - Iteration #1: The navigation will error out (because nothing is listening + // on port zero in the test case). Since + // RenderFrameHostImpl::FailedNavigation doesn't call + // GetOriginForURLLoaderFactory, this iteration wouldn't trigger a crash. + // - Iteration #2: The navigation will be treated as a same-document + // navigation, because |old_url| and |new_url| will be considered the same + // when inspected by GetNavigationType in navigation_controller_impl.cc. + // This will trigger a call to GetOriginForURLLoaderFactory which will + // crash if port=0 confuses url::Origin::Resolve. It is unclear if treating + // the 2nd iteration as same-document should be considered a bug (see also + // https://crbug.com/1065532#c4). + // + // After the fix for SchemeHostPort's handling of port=0, both iterations + // would trigger a CANNOT_COMMIT_ORIGIN kill (see below). + GURL::Replacements replace_port_and_ref; + replace_port_and_ref.SetPortStr("0"); + replace_port_and_ref.SetRefStr("someRef"); + GURL subframe_ref_url = + subframe_initial_url.ReplaceComponents(replace_port_and_ref); + // Doing 2 iterations, to test the same-document navigation case as outlined + // in the big comment above. This test coverage will be important if we ever + // fix the renderer kill that started happening after fixing SchemeHostPort's + // handling of port=0.. + for (int i = 0; i < 2; i++) { + SCOPED_TRACE(::testing::Message() << "Navigation #" << i); + + // TODO(lukasza): https://crbug.com/1065532: blink::KURL and + // blink::SecurityOrigin treat port=0 as an invalid port, which leads to + // committing an origin with port=80 rather than port=0 which leads to a + // CANNOT_COMMIT_ORIGIN renderer kill. This is bad, but not as bad as a + // browser crash from the bug, so let's keep things this way going forward. + ASSERT_EQ(2u, shell()->web_contents()->GetAllFrames().size()); + RenderProcessHostBadIpcMessageWaiter bad_ipc_waiter( + shell()->web_contents()->GetAllFrames()[1]->GetProcess()); + + TestNavigationObserver subframe_ref_observer(shell()->web_contents(), 1); + ASSERT_TRUE( + ExecJs(shell(), JsReplace("document.querySelector('iframe').src = $1;", + subframe_ref_url))); + +#if 1 + // TODO(lukasza): https://crbug.com/1065532: blink::KURL and + // blink::SecurityOrigin treat port=0 as an invalid port [...] + // (see the same comment above). + EXPECT_EQ(bad_message::RFH_INVALID_ORIGIN_ON_COMMIT, bad_ipc_waiter.Wait()); + if (!AreAllSitesIsolatedForTesting()) { + // Without site-per-process the main frame and the subframe are hosted in + // the same (killed) renderer process, which makes it difficult to + // continue the test after the first kill. + return; + } +#else + subframe_ref_url.WaitForNavigationFinished(); +#endif + } +} + } // namespace content
diff --git a/content/browser/media/cdm_registry_impl_unittest.cc b/content/browser/media/cdm_registry_impl_unittest.cc index e919de1..73e4d43e8 100644 --- a/content/browser/media/cdm_registry_impl_unittest.cc +++ b/content/browser/media/cdm_registry_impl_unittest.cc
@@ -27,7 +27,6 @@ using VideoCodec = media::VideoCodec; using EncryptionScheme = media::EncryptionScheme; using CdmSessionType = media::CdmSessionType; -using CdmProxy = media::CdmProxy; const char kTestCdmName[] = "Test CDM"; const char kAlternateCdmName[] = "Alternate CDM"; @@ -58,9 +57,6 @@ #define EXPECT_SESSION_TYPES(...) \ EXPECT_STL_EQ(cdm.capability.session_types, __VA_ARGS__) -#define EXPECT_CDM_PROXY_PROTOCOLS(...) \ - EXPECT_STL_EQ(cdm.capability.cdm_proxy_protocols, __VA_ARGS__) - } // namespace // For simplicity and to make failures easier to diagnose, this test uses @@ -77,8 +73,7 @@ base::FilePath::FromUTF8Unsafe(kTestPath), kTestFileSystemId, CdmCapability( {media::kCodecVP8, media::kCodecVP9}, {EncryptionScheme::kCenc}, - {CdmSessionType::kTemporary, CdmSessionType::kPersistentLicense}, - {CdmProxy::Protocol::kIntel}), + {CdmSessionType::kTemporary, CdmSessionType::kPersistentLicense}), kTestKeySystem, /*supports_sub_key_systems=*/true); } @@ -121,7 +116,6 @@ EXPECT_ENCRYPTION_SCHEMES(EncryptionScheme::kCenc); EXPECT_SESSION_TYPES(CdmSessionType::kTemporary, CdmSessionType::kPersistentLicense); - EXPECT_CDM_PROXY_PROTOCOLS(CdmProxy::Protocol::kIntel); EXPECT_EQ(kTestKeySystem, cdm.supported_key_system); EXPECT_TRUE(cdm.supports_sub_key_systems); }
diff --git a/content/browser/media/key_system_support_impl.cc b/content/browser/media/key_system_support_impl.cc index 51b7465..36980969 100644 --- a/content/browser/media/key_system_support_impl.cc +++ b/content/browser/media/key_system_support_impl.cc
@@ -80,7 +80,6 @@ void GetHardwareSecureDecryptionCaps( const std::string& key_system, - const base::flat_set<media::CdmProxy::Protocol>& cdm_proxy_protocols, std::vector<media::VideoCodec>* video_codecs, std::vector<media::EncryptionScheme>* encryption_schemes) { DCHECK(video_codecs->empty()); @@ -98,11 +97,6 @@ return; } - if (cdm_proxy_protocols.empty()) { - DVLOG(1) << "CDM does not support any CdmProxy protocols"; - return; - } - // Hardware secure video codecs need hardware video decoder support. // TODO(xhwang): Make sure this check is as close as possible to the check // in the render process. For example, also check check GPU features like @@ -123,8 +117,7 @@ base::flat_set<media::EncryptionScheme> encryption_scheme_set; GetContentClient()->browser()->GetHardwareSecureDecryptionCaps( - key_system, cdm_proxy_protocols, &video_codec_set, - &encryption_scheme_set); + key_system, &video_codec_set, &encryption_scheme_set); *video_codecs = SetToVector(video_codec_set); *encryption_schemes = SetToVector(encryption_scheme_set); @@ -184,7 +177,6 @@ SetToVector(cdm_info->capability.encryption_schemes); GetHardwareSecureDecryptionCaps(key_system, - cdm_info->capability.cdm_proxy_protocols, &capability->hw_secure_video_codecs, &capability->hw_secure_encryption_schemes);
diff --git a/content/browser/media/key_system_support_impl_unittest.cc b/content/browser/media/key_system_support_impl_unittest.cc index e687ae11..fb3a457e 100644 --- a/content/browser/media/key_system_support_impl_unittest.cc +++ b/content/browser/media/key_system_support_impl_unittest.cc
@@ -69,7 +69,7 @@ return CdmCapability( {VideoCodec::kCodecVP8, VideoCodec::kCodecVP9}, {EncryptionScheme::kCenc, EncryptionScheme::kCbcs}, - {CdmSessionType::kTemporary, CdmSessionType::kPersistentLicense}, {}); + {CdmSessionType::kTemporary, CdmSessionType::kPersistentLicense}); } // Registers |key_system| with |capability|. All other values for CdmInfo have
diff --git a/content/browser/media/media_interface_proxy.cc b/content/browser/media/media_interface_proxy.cc index 5352254b..1334603c 100644 --- a/content/browser/media/media_interface_proxy.cc +++ b/content/browser/media/media_interface_proxy.cc
@@ -47,10 +47,6 @@ #endif // defined(OS_MACOSX) #endif // BUILDFLAG(ENABLE_LIBRARY_CDMS) -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/mojo/mojom/cdm_proxy.mojom.h" -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - #if defined(OS_ANDROID) #include "content/browser/media/android/media_player_renderer.h" #include "content/browser/media/flinging_renderer.h" @@ -187,21 +183,10 @@ class FrameInterfaceFactoryImpl : public media::mojom::FrameInterfaceFactory { public: -#if BUILDFLAG(ENABLE_CDM_PROXY) - using CdmProxyCreator = base::RepeatingCallback< - void(const base::Token&, mojo::PendingReceiver<media::mojom::CdmProxy>)>; -#endif - FrameInterfaceFactoryImpl(RenderFrameHost* rfh, -#if BUILDFLAG(ENABLE_CDM_PROXY) - CdmProxyCreator cdm_proxy_creator, -#endif const base::Token& cdm_guid, const std::string& cdm_file_system_id) : render_frame_host_(rfh), -#if BUILDFLAG(ENABLE_CDM_PROXY) - cdm_proxy_creator_(std::move(cdm_proxy_creator)), -#endif cdm_guid_(cdm_guid), cdm_file_system_id_(cdm_file_system_id) { } @@ -230,13 +215,6 @@ #endif } -#if BUILDFLAG(ENABLE_CDM_PROXY) - void CreateCdmProxy( - mojo::PendingReceiver<media::mojom::CdmProxy> receiver) override { - cdm_proxy_creator_.Run(cdm_guid_, std::move(receiver)); - } -#endif - void BindEmbedderReceiver(mojo::GenericPendingReceiver receiver) override { GetContentClient()->browser()->BindMediaServiceReceiver( render_frame_host_, std::move(receiver)); @@ -244,9 +222,6 @@ private: RenderFrameHost* const render_frame_host_; -#if BUILDFLAG(ENABLE_CDM_PROXY) - CdmProxyCreator cdm_proxy_creator_; -#endif const base::Token cdm_guid_; const std::string cdm_file_system_id_; }; @@ -392,26 +367,13 @@ factory->CreateDecryptor(cdm_id, std::move(receiver)); } -#if BUILDFLAG(ENABLE_CDM_PROXY) -void MediaInterfaceProxy::CreateCdmProxy( - const base::Token& cdm_guid, - mojo::PendingReceiver<media::mojom::CdmProxy> receiver) { - NOTREACHED() << "The CdmProxy should only be created by a CDM."; -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - mojo::PendingRemote<media::mojom::FrameInterfaceFactory> MediaInterfaceProxy::GetFrameServices(const base::Token& cdm_guid, const std::string& cdm_file_system_id) { mojo::PendingRemote<media::mojom::FrameInterfaceFactory> factory; - frame_factories_.Add( - std::make_unique<FrameInterfaceFactoryImpl>( - render_frame_host_, -#if BUILDFLAG(ENABLE_CDM_PROXY) - base::BindRepeating(&CreateCdmProxyInternal, base::Unretained(this)), -#endif - cdm_guid, cdm_file_system_id), - factory.InitWithNewPipeAndPassReceiver()); + frame_factories_.Add(std::make_unique<FrameInterfaceFactoryImpl>( + render_frame_host_, cdm_guid, cdm_file_system_id), + factory.InitWithNewPipeAndPassReceiver()); return factory; } @@ -494,19 +456,6 @@ cdm_factory_map_.erase(cdm_guid); } -#if BUILDFLAG(ENABLE_CDM_PROXY) -void MediaInterfaceProxy::CreateCdmProxyInternal( - const base::Token& cdm_guid, - mojo::PendingReceiver<media::mojom::CdmProxy> receiver) { - DVLOG(1) << __func__; - DCHECK(thread_checker_.CalledOnValidThread()); - - InterfaceFactory* factory = media_interface_factory_ptr_->Get(); - if (factory) - factory->CreateCdmProxy(cdm_guid, std::move(receiver)); -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - #endif // BUILDFLAG(ENABLE_LIBRARY_CDMS) } // namespace content
diff --git a/content/browser/media/media_interface_proxy.h b/content/browser/media/media_interface_proxy.h index 378d90c..5f8a73e9 100644 --- a/content/browser/media/media_interface_proxy.h +++ b/content/browser/media/media_interface_proxy.h
@@ -81,11 +81,6 @@ void CreateDecryptor( int cdm_id, mojo::PendingReceiver<media::mojom::Decryptor> receiver) final; -#if BUILDFLAG(ENABLE_CDM_PROXY) - void CreateCdmProxy( - const base::Token& cdm_guid, - mojo::PendingReceiver<media::mojom::CdmProxy> receiver) final; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) private: // Gets services provided by the browser (at RenderFrameHost level) to the @@ -113,15 +108,6 @@ // Callback for connection error from the CdmFactoryPtr in the // |cdm_factory_map_| associated with |cdm_guid|. void OnCdmServiceConnectionError(const base::Token& cdm_guid); - -#if BUILDFLAG(ENABLE_CDM_PROXY) - // Creates a CdmProxy for the CDM in CdmService. Not implemented in - // CreateCdmProxy() because we don't want any client to be able to create - // a CdmProxy. - void CreateCdmProxyInternal( - const base::Token& cdm_guid, - mojo::PendingReceiver<media::mojom::CdmProxy> receiver); -#endif // BUILDFLAG(ENABLE_CDM_PROXY) #endif // BUILDFLAG(ENABLE_LIBRARY_CDMS) // Safe to hold a raw pointer since |this| is owned by RenderFrameHostImpl.
diff --git a/content/browser/media/video_decoder_proxy.cc b/content/browser/media/video_decoder_proxy.cc index 561c91e..7e7b2e3 100644 --- a/content/browser/media/video_decoder_proxy.cc +++ b/content/browser/media/video_decoder_proxy.cc
@@ -74,12 +74,6 @@ int cdm_id, mojo::PendingReceiver<media::mojom::Decryptor> receiver) {} -#if BUILDFLAG(ENABLE_CDM_PROXY) -void VideoDecoderProxy::CreateCdmProxy( - const base::Token& cdm_guid, - mojo::PendingReceiver<media::mojom::CdmProxy> receiver) {} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - media::mojom::InterfaceFactory* VideoDecoderProxy::GetMediaInterfaceFactory() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/content/browser/media/video_decoder_proxy.h b/content/browser/media/video_decoder_proxy.h index b650178..9e9620f 100644 --- a/content/browser/media/video_decoder_proxy.h +++ b/content/browser/media/video_decoder_proxy.h
@@ -66,11 +66,6 @@ void CreateDecryptor( int cdm_id, mojo::PendingReceiver<media::mojom::Decryptor> receiver) final; -#if BUILDFLAG(ENABLE_CDM_PROXY) - void CreateCdmProxy( - const base::Token& cdm_guid, - mojo::PendingReceiver<media::mojom::CdmProxy> receiver) final; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) private: media::mojom::InterfaceFactory* GetMediaInterfaceFactory();
diff --git a/content/browser/service_worker/service_worker_storage_control_impl.cc b/content/browser/service_worker/service_worker_storage_control_impl.cc index 2d22fda..aab3f1c3 100644 --- a/content/browser/service_worker/service_worker_storage_control_impl.cc +++ b/content/browser/service_worker/service_worker_storage_control_impl.cc
@@ -77,6 +77,17 @@ std::move(callback).Run(status, values); } +void DidGetKeysAndUserData( + ServiceWorkerStorageControlImpl::GetUserKeysAndDataByKeyPrefixCallback + callback, + const base::flat_map<std::string, std::string>& user_data, + storage::mojom::ServiceWorkerDatabaseStatus status) { + // TODO(bashi): Change ServiceWorkerStorage::GetUserKeysAndDataInDBCallback to + // remove this indirection (the order of |user_data| and |status| is + // different). + std::move(callback).Run(status, user_data); +} + } // namespace ServiceWorkerStorageControlImpl::ServiceWorkerStorageControlImpl( @@ -214,4 +225,30 @@ storage_->ClearUserData(registration_id, keys, std::move(callback)); } +void ServiceWorkerStorageControlImpl::GetUserDataByKeyPrefix( + int64_t registration_id, + const std::string& key_prefix, + GetUserDataByKeyPrefixCallback callback) { + storage_->GetUserDataByKeyPrefix( + registration_id, key_prefix, + base::BindOnce(&DidGetUserData, std::move(callback))); +} + +void ServiceWorkerStorageControlImpl::GetUserKeysAndDataByKeyPrefix( + int64_t registration_id, + const std::string& key_prefix, + GetUserKeysAndDataByKeyPrefixCallback callback) { + storage_->GetUserKeysAndDataByKeyPrefix( + registration_id, key_prefix, + base::BindOnce(&DidGetKeysAndUserData, std::move(callback))); +} + +void ServiceWorkerStorageControlImpl::ClearUserDataByKeyPrefixes( + int64_t registration_id, + const std::vector<std::string>& key_prefixes, + ClearUserDataByKeyPrefixesCallback callback) { + storage_->ClearUserDataByKeyPrefixes(registration_id, key_prefixes, + std::move(callback)); +} + } // namespace content
diff --git a/content/browser/service_worker/service_worker_storage_control_impl.h b/content/browser/service_worker/service_worker_storage_control_impl.h index b2623c5..d84e908 100644 --- a/content/browser/service_worker/service_worker_storage_control_impl.h +++ b/content/browser/service_worker/service_worker_storage_control_impl.h
@@ -80,6 +80,17 @@ void ClearUserData(int64_t registration_id, const std::vector<std::string>& keys, ClearUserDataCallback callback) override; + void GetUserDataByKeyPrefix(int64_t registration_id, + const std::string& key_prefix, + GetUserDataByKeyPrefixCallback callback) override; + void GetUserKeysAndDataByKeyPrefix( + int64_t registration_id, + const std::string& key_prefix, + GetUserKeysAndDataByKeyPrefixCallback callback) override; + void ClearUserDataByKeyPrefixes( + int64_t registration_id, + const std::vector<std::string>& key_prefixes, + ClearUserDataByKeyPrefixesCallback callback) override; const std::unique_ptr<ServiceWorkerStorage> storage_; };
diff --git a/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc b/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc index e75ef763..0d4ddc3 100644 --- a/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc +++ b/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc
@@ -2,10 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <string.h> - #include "content/browser/service_worker/service_worker_storage_control_impl.h" +#include <cstdint> +#include <string> +#include <vector> + +#include "base/containers/flat_map.h" #include "base/containers/span.h" #include "base/files/scoped_temp_dir.h" #include "base/test/bind_test_util.h" @@ -21,6 +24,7 @@ #include "net/test/test_data_directory.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/mojom/service_worker/navigation_preload_state.mojom.h" +#include "url/gurl.h" namespace content { @@ -30,6 +34,16 @@ namespace { +struct GetUserDataByKeyPrefixResult { + DatabaseStatus status; + std::vector<std::string> values; +}; + +struct GetUserKeysAndDataByKeyPrefixResult { + DatabaseStatus status; + base::flat_map<std::string, std::string> user_data; +}; + int ReadResponseHead(storage::mojom::ServiceWorkerResourceReader* reader, network::mojom::URLResponseHeadPtr& out_response_head, base::Optional<mojo_base::BigBuffer>& out_metadata) { @@ -293,6 +307,56 @@ return return_value; } + GetUserDataByKeyPrefixResult GetUserDataByKeyPrefix( + int64_t registration_id, + const std::string& key_prefix) { + GetUserDataByKeyPrefixResult result; + base::RunLoop loop; + storage()->GetUserDataByKeyPrefix( + registration_id, key_prefix, + base::BindLambdaForTesting( + [&](DatabaseStatus status, const std::vector<std::string>& values) { + result.status = status; + result.values = values; + loop.Quit(); + })); + loop.Run(); + return result; + } + + GetUserKeysAndDataByKeyPrefixResult GetUserKeysAndDataByKeyPrefix( + int64_t registration_id, + const std::string& key_prefix) { + GetUserKeysAndDataByKeyPrefixResult result; + base::RunLoop loop; + storage()->GetUserKeysAndDataByKeyPrefix( + registration_id, key_prefix, + base::BindLambdaForTesting( + [&](DatabaseStatus status, + const base::flat_map<std::string, std::string>& user_data) { + result.status = status; + result.user_data = user_data; + loop.Quit(); + })); + loop.Run(); + return result; + } + + DatabaseStatus ClearUserDataByKeyPrefixes( + int64_t registration_id, + const std::vector<std::string>& key_prefixes) { + DatabaseStatus return_value; + base::RunLoop loop; + storage()->ClearUserDataByKeyPrefixes( + registration_id, key_prefixes, + base::BindLambdaForTesting([&](DatabaseStatus status) { + return_value = status; + loop.Quit(); + })); + loop.Run(); + return return_value; + } + // Create a registration with a single resource and stores the registration. DatabaseStatus CreateAndStoreRegistration(int64_t registration_id, const GURL& scope, @@ -684,4 +748,75 @@ } } +// Tests that storing/getting user data by key prefix works. +TEST_F(ServiceWorkerStorageControlImplTest, StoreAndGetUserDataByKeyPrefix) { + const GURL kScope("https://www.example.com/"); + const GURL kScriptUrl("https://www.example.com/sw.js"); + const int64_t kScriptSize = 10; + + LazyInitializeForTest(); + + const int64_t registration_id = GetNewRegistrationId(); + DatabaseStatus status; + status = CreateAndStoreRegistration(registration_id, kScope, kScriptUrl, + kScriptSize); + ASSERT_EQ(status, DatabaseStatus::kOk); + + // Store some user data with prefixes. + std::vector<storage::mojom::ServiceWorkerUserDataPtr> user_data; + user_data.push_back( + storage::mojom::ServiceWorkerUserData::New("prefixA", "value1")); + user_data.push_back( + storage::mojom::ServiceWorkerUserData::New("prefixA2", "value2")); + user_data.push_back( + storage::mojom::ServiceWorkerUserData::New("prefixB", "value3")); + user_data.push_back( + storage::mojom::ServiceWorkerUserData::New("prefixC", "value4")); + status = + StoreUserData(registration_id, kScope.GetOrigin(), std::move(user_data)); + ASSERT_EQ(status, DatabaseStatus::kOk); + + { + GetUserDataByKeyPrefixResult result = + GetUserDataByKeyPrefix(registration_id, "prefix"); + ASSERT_EQ(result.status, DatabaseStatus::kOk); + EXPECT_EQ(result.values.size(), 4UL); + EXPECT_EQ(result.values[0], "value1"); + EXPECT_EQ(result.values[1], "value2"); + EXPECT_EQ(result.values[2], "value3"); + EXPECT_EQ(result.values[3], "value4"); + } + + { + GetUserKeysAndDataByKeyPrefixResult result = + GetUserKeysAndDataByKeyPrefix(registration_id, "prefix"); + ASSERT_EQ(result.status, DatabaseStatus::kOk); + ASSERT_EQ(result.user_data.size(), 4UL); + EXPECT_EQ(result.user_data["A"], "value1"); + EXPECT_EQ(result.user_data["A2"], "value2"); + EXPECT_EQ(result.user_data["B"], "value3"); + EXPECT_EQ(result.user_data["C"], "value4"); + } + + { + GetUserDataByKeyPrefixResult result = + GetUserDataByKeyPrefix(registration_id, "prefixA"); + ASSERT_EQ(result.status, DatabaseStatus::kOk); + ASSERT_EQ(result.values.size(), 2UL); + EXPECT_EQ(result.values[0], "value1"); + EXPECT_EQ(result.values[1], "value2"); + } + + status = ClearUserDataByKeyPrefixes(registration_id, {"prefixA", "prefixC"}); + ASSERT_EQ(status, DatabaseStatus::kOk); + + { + GetUserDataByKeyPrefixResult result = + GetUserDataByKeyPrefix(registration_id, "prefix"); + ASSERT_EQ(result.status, DatabaseStatus::kOk); + ASSERT_EQ(result.values.size(), 1UL); + EXPECT_EQ(result.values[0], "value3"); + } +} + } // namespace content
diff --git a/content/common/media/cdm_info.cc b/content/common/media/cdm_info.cc index c5480ec..71618e1c 100644 --- a/content/common/media/cdm_info.cc +++ b/content/common/media/cdm_info.cc
@@ -13,12 +13,10 @@ CdmCapability::CdmCapability( std::vector<media::VideoCodec> video_codecs, base::flat_set<media::EncryptionScheme> encryption_schemes, - base::flat_set<media::CdmSessionType> session_types, - base::flat_set<media::CdmProxy::Protocol> cdm_proxy_protocols) + base::flat_set<media::CdmSessionType> session_types) : video_codecs(std::move(video_codecs)), encryption_schemes(std::move(encryption_schemes)), - session_types(std::move(session_types)), - cdm_proxy_protocols(std::move(cdm_proxy_protocols)) {} + session_types(std::move(session_types)) {} CdmCapability::CdmCapability(const CdmCapability& other) = default;
diff --git a/content/gpu/gpu_service_factory.cc b/content/gpu/gpu_service_factory.cc index 21d9d6d..efda557 100644 --- a/content/gpu/gpu_service_factory.cc +++ b/content/gpu/gpu_service_factory.cc
@@ -16,9 +16,6 @@ #if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS) #include "base/bind.h" #include "media/mojo/services/media_service_factory.h" // nogncheck -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "content/public/gpu/content_gpu_client.h" -#endif // BUILDFLAG(ENABLE_CDM_PROXY) #endif // BUILDFLAG(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS) namespace content { @@ -46,13 +43,6 @@ void GpuServiceFactory::RunMediaService( mojo::PendingReceiver<media::mojom::MediaService> receiver) { #if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS) - media::CdmProxyFactoryCB cdm_proxy_factory_cb; -#if BUILDFLAG(ENABLE_CDM_PROXY) - cdm_proxy_factory_cb = - base::BindRepeating(&ContentGpuClient::CreateCdmProxy, - base::Unretained(GetContentClient()->gpu())); -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - // This service will host audio/video decoders, and if these decoding // operations are blocked, user may hear audio glitch or see video freezing, // hence "user blocking". @@ -68,11 +58,11 @@ using FactoryCallback = base::OnceCallback<std::unique_ptr<media::MediaService>()>; - FactoryCallback factory = base::BindOnce( - &media::CreateGpuMediaService, std::move(receiver), gpu_preferences_, - gpu_workarounds_, gpu_feature_info_, task_runner_, - media_gpu_channel_manager_, gpu_memory_buffer_factory_, - android_overlay_factory_cb_, std::move(cdm_proxy_factory_cb)); + FactoryCallback factory = + base::BindOnce(&media::CreateGpuMediaService, std::move(receiver), + gpu_preferences_, gpu_workarounds_, gpu_feature_info_, + task_runner_, media_gpu_channel_manager_, + gpu_memory_buffer_factory_, android_overlay_factory_cb_); task_runner->PostTask( FROM_HERE, base::BindOnce(
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java index ccc40e4..e5ca6cec 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
@@ -352,7 +352,8 @@ } // True if action mode is initialized to a working (not a no-op) mode. - private boolean isActionModeSupported() { + @VisibleForTesting + public boolean isActionModeSupported() { return mCallback != EMPTY_CALLBACK; }
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc index 89f33b33..c49222a1 100644 --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc
@@ -36,7 +36,6 @@ #include "content/public/browser/web_contents.h" #include "content/public/common/url_utils.h" #include "media/audio/audio_manager.h" -#include "media/media_buildflags.h" #include "media/mojo/mojom/media_service.mojom.h" #include "mojo/public/cpp/bindings/associated_interface_ptr.h" #include "net/ssl/client_cert_identity.h" @@ -237,7 +236,6 @@ void ContentBrowserClient::GetHardwareSecureDecryptionCaps( const std::string& key_system, - const base::flat_set<media::CdmProxy::Protocol>& cdm_proxy_protocols, base::flat_set<media::VideoCodec>* video_codecs, base::flat_set<media::EncryptionScheme>* encryption_schemes) {}
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h index dd059509..728f71d7 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h
@@ -31,7 +31,6 @@ #include "content/public/common/window_container_type.mojom-forward.h" #include "device/vr/buildflags/buildflags.h" #include "media/base/video_codecs.h" -#include "media/cdm/cdm_proxy.h" #include "media/mojo/mojom/media_service.mojom-forward.h" #include "media/mojo/mojom/remoting.mojom-forward.h" #include "mojo/public/cpp/bindings/generic_pending_receiver.h" @@ -1139,13 +1138,9 @@ // Gets supported hardware secure |video_codecs| and |encryption_schemes| for // the purpose of decrypting encrypted media using a Content Decryption Module - // (CDM) and a CdmProxy associated with |key_system|. The CDM supports all - // protocols in |cdm_proxy_protocols|, but only one CdmProxy protocol will be - // supported by the CdmProxy on the system, for which the capabilities will - // be returned. + // (CDM) associated with |key_system|. virtual void GetHardwareSecureDecryptionCaps( const std::string& key_system, - const base::flat_set<media::CdmProxy::Protocol>& cdm_proxy_protocols, base::flat_set<media::VideoCodec>* video_codecs, base::flat_set<media::EncryptionScheme>* encryption_schemes);
diff --git a/content/public/common/cdm_info.h b/content/public/common/cdm_info.h index f8bcf527..c08d0c9 100644 --- a/content/public/common/cdm_info.h +++ b/content/public/common/cdm_info.h
@@ -16,7 +16,6 @@ #include "media/base/content_decryption_module.h" #include "media/base/encryption_scheme.h" #include "media/base/video_codecs.h" -#include "media/cdm/cdm_proxy.h" namespace content { @@ -25,8 +24,7 @@ CdmCapability(); CdmCapability(std::vector<media::VideoCodec> video_codecs, base::flat_set<media::EncryptionScheme> encryption_schemes, - base::flat_set<media::CdmSessionType> session_types, - base::flat_set<media::CdmProxy::Protocol> cdm_proxy_protocols); + base::flat_set<media::CdmSessionType> session_types); CdmCapability(const CdmCapability& other); ~CdmCapability(); @@ -48,10 +46,6 @@ // List of session types supported by the CDM. base::flat_set<media::CdmSessionType> session_types; - - // List of CdmProxy protocols supported by the CDM. These protocols should - // also be supported by the system to support hardware secure decryption. - base::flat_set<media::CdmProxy::Protocol> cdm_proxy_protocols; }; // Represents a Content Decryption Module implementation and its capabilities.
diff --git a/content/public/gpu/content_gpu_client.cc b/content/public/gpu/content_gpu_client.cc index 873d53b..ef1b9c7 100644 --- a/content/public/gpu/content_gpu_client.cc +++ b/content/public/gpu/content_gpu_client.cc
@@ -4,10 +4,6 @@ #include "content/public/gpu/content_gpu_client.h" -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/cdm/cdm_proxy.h" -#endif - namespace content { gpu::SyncPointManager* ContentGpuClient::GetSyncPointManager() { @@ -23,11 +19,4 @@ return nullptr; } -#if BUILDFLAG(ENABLE_CDM_PROXY) -std::unique_ptr<media::CdmProxy> ContentGpuClient::CreateCdmProxy( - const base::Token& cdm_guid) { - return nullptr; -} -#endif - } // namespace content
diff --git a/content/public/gpu/content_gpu_client.h b/content/public/gpu/content_gpu_client.h index f68558bd2..88e80bda 100644 --- a/content/public/gpu/content_gpu_client.h +++ b/content/public/gpu/content_gpu_client.h
@@ -11,23 +11,14 @@ #include "base/metrics/field_trial.h" #include "base/single_thread_task_runner.h" #include "content/public/common/content_client.h" -#include "media/media_buildflags.h" #include "mojo/public/cpp/bindings/binder_map.h" -namespace base { -class Token; -} - namespace gpu { struct GpuPreferences; class SharedImageManager; class SyncPointManager; } -namespace media { -class CdmProxy; -} - namespace viz { class VizCompositorThreadRunner; } @@ -60,13 +51,6 @@ virtual gpu::SyncPointManager* GetSyncPointManager(); virtual gpu::SharedImageManager* GetSharedImageManager(); virtual viz::VizCompositorThreadRunner* GetVizCompositorThreadRunner(); - -#if BUILDFLAG(ENABLE_CDM_PROXY) - // Creates a media::CdmProxy for the type of Content Decryption Module (CDM) - // identified by |cdm_guid|. - virtual std::unique_ptr<media::CdmProxy> CreateCdmProxy( - const base::Token& cdm_guid); -#endif }; } // namespace content
diff --git a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/util/WebContentsUtils.java b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/util/WebContentsUtils.java index 26d026e..19453e3 100644 --- a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/util/WebContentsUtils.java +++ b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/util/WebContentsUtils.java
@@ -122,6 +122,18 @@ return SelectionPopupControllerImpl.createForTesting(webContents); } + /** + * Checks if the given WebContents has a valid {@link ActionMode.Callback} set in place. + * @return {@code true} if WebContents (its SelectionPopupController) has a valid + * action mode callback object. + */ + public static boolean isActionModeSupported(WebContents webContents) { + SelectionPopupControllerImpl controller = + ((SelectionPopupControllerImpl) SelectionPopupController.fromWebContents( + webContents)); + return controller.isActionModeSupported(); + } + private static native void nativeReportAllFrameSubmissions( WebContents webContents, boolean enabled); private static native RenderFrameHost nativeGetFocusedFrame(WebContents webContents);
diff --git a/content/public/test/screenshot_test_utils.cc b/content/public/test/screenshot_test_utils.cc new file mode 100644 index 0000000..a7ef5f8 --- /dev/null +++ b/content/public/test/screenshot_test_utils.cc
@@ -0,0 +1,120 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/public/test/screenshot_test_utils.h" + +#include "base/run_loop.h" +#include "base/test/bind_test_util.h" +#include "base/threading/thread_restrictions.h" +#include "build/build_config.h" +#include "cc/test/pixel_comparator.h" +#include "cc/test/pixel_test_utils.h" +#include "content/browser/renderer_host/render_widget_host_impl.h" +#include "content/public/common/content_switches.h" +#include "content/public/test/browser_test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/display/display_switches.h" +#include "ui/gfx/image/image.h" +#include "ui/gfx/skbitmap_operations.h" +#include "ui/gl/gl_switches.h" + +#if defined(OS_ANDROID) +#include "base/android/build_info.h" +#endif + +namespace content { + +void SetUpCommandLineForScreenshotTest(base::CommandLine* command_line) { + // The --force-device-scale-factor flag helps make the pixel output of + // different android trybots more similar. + command_line->AppendSwitchASCII(switches::kForceDeviceScaleFactor, "1.0"); + + // The --disable-lcd-text flag helps text render more similarly on + // different bots and platform. + command_line->AppendSwitch(switches::kDisableLCDText); +} + +void RunScreenshotTest(WebContents* web_contents, + const base::FilePath& golden_filepath_default, + int screenshot_width, + int screenshot_height) { + // Asserts for SetUpCommandLineForScreenshotTest. + ASSERT_EQ(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kForceDeviceScaleFactor), + "1.0"); + ASSERT_TRUE(base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableLCDText)); + + // Asserts that BrowserTestBase::EnablePixelOutput was called. + ASSERT_FALSE(base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableGLDrawingForTests)); + + base::ScopedAllowBlockingForTesting allow_blocking; + + content::RenderWidgetHostImpl* const rwh = + content::RenderWidgetHostImpl::From( + web_contents->GetRenderWidgetHostView()->GetRenderWidgetHost()); + ASSERT_TRUE(rwh); + + gfx::Image snapshot; + base::RunLoop screenshot_callback_runloop; + base::RepeatingClosure quit_closure = + screenshot_callback_runloop.QuitClosure(); + rwh->GetSnapshotFromBrowser( + base::BindLambdaForTesting([&](const gfx::Image& image) { + snapshot = image; + quit_closure.Run(); + }), + /* from_surface */ true); + screenshot_callback_runloop.Run(); + + SkBitmap bitmap = SkBitmapOperations::CreateTiledBitmap( + *snapshot.ToSkBitmap(), /* src_x */ 0, /* src_y */ 0, screenshot_width, + screenshot_height); + + base::StringPiece platform_suffix; +#if defined(OS_MACOSX) + platform_suffix = "_mac"; +#elif defined(OS_WIN) + platform_suffix = "_win"; +#elif defined(OS_CHROMEOS) + platform_suffix = "_chromeos"; +#elif defined(OS_ANDROID) + int sdk_int = base::android::BuildInfo::GetInstance()->sdk_int(); + if (sdk_int == base::android::SDK_VERSION_KITKAT) { + platform_suffix = "_android_kitkat"; + } else if (sdk_int == base::android::SDK_VERSION_MARSHMALLOW) { + platform_suffix = "_android_marshmallow"; + } else { + platform_suffix = "_android"; + } +#endif + base::FilePath golden_filepath_platform = + golden_filepath_default.InsertBeforeExtensionASCII(platform_suffix); + + SkBitmap expected_bitmap; + if (!cc::ReadPNGFile(golden_filepath_platform, &expected_bitmap)) { + ASSERT_TRUE(cc::ReadPNGFile(golden_filepath_default, &expected_bitmap)); + } + +#if defined(OS_MACOSX) + // The Mac 10.12 trybot has more significant subpixel rendering + // differences which we accommodate for here with a large avg/max + // per-pixel error limit. + // TODO(crbug.com/1037971): Remove this special case for mac once this + // bug is resolved. + cc::FuzzyPixelComparator comparator( + /* discard_alpha */ true, + /* error_pixels_percentage_limit */ 7.f, + /* small_error_pixels_percentage_limit */ 0.f, + /* avg_abs_error_limit */ 16.f, + /* max_abs_error_limit */ 79.f, + /* small_error_threshold */ 0); +#else + cc::ExactPixelComparator comparator(/* disard_alpha */ true); +#endif + EXPECT_TRUE(cc::MatchesBitmap(bitmap, expected_bitmap, comparator)); +} + +} // namespace content
diff --git a/content/public/test/screenshot_test_utils.h b/content/public/test/screenshot_test_utils.h new file mode 100644 index 0000000..171d41d --- /dev/null +++ b/content/public/test/screenshot_test_utils.h
@@ -0,0 +1,57 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_PUBLIC_TEST_SCREENSHOT_TEST_UTILS_H_ +#define CONTENT_PUBLIC_TEST_SCREENSHOT_TEST_UTILS_H_ + +#include <string> + +namespace base { +class CommandLine; +class FilePath; +} // namespace base + +namespace content { + +class WebContents; + +// This file contains functions to help build browsertests which take +// screenshots of web content and make pixel comparisons to golden baseline +// images. While you might normally use web_tests to make pixel tests of web +// content, making a browsertest helps highlight platform specific differences +// not rendered in web_tests like the different rendering of focus rings. + +// Adds command-line flags to help unify rendering across devices and +// platforms. This should be called in the SetUpCommandLine function of browser +// tests. +void SetUpCommandLineForScreenshotTest(base::CommandLine* command_line); + +// Runs a screenshot test by taking a screenshot of the given |web_contents| +// and comparing it to a golden baseline image file. +// +// |golden_screenshot_filepath| is the filepath to the golden expected +// screenshot for the test to compare to. For platform-specific differences, a +// different file for that platform can be provided and will be used +// automatically if present and conforms to the correct naming scheme. If no +// such platform specific golden image is present, the "default" one without a +// platform specific extension will be used, which is always used for Linux. +// The KitKat Android bot tends to render differently enough from the other +// Android bot that it is tracked separately. If no kitkat golden image is +// provided, it will default to the Linux golden, like all other platforms. +// Here is an example of all of the golden files present for a test which +// renders differently on all platforms: +// my_screenshot_test.png +// my_screenshot_test_mac.png +// my_screenshot_test_win.png +// my_screenshot_test_chromeos.png +// my_screenshot_test_android.png +// my_screenshot_test_android_kitkat.png +void RunScreenshotTest(WebContents* web_contents, + const base::FilePath& golden_screenshot_filepath, + int screenshot_width, + int screenshot_height); + +} // namespace content + +#endif // CONTENT_PUBLIC_TEST_SCREENSHOT_TEST_UTILS_H_
diff --git a/content/renderer/media/media_interface_factory.cc b/content/renderer/media/media_interface_factory.cc index e816e910..ef0b244 100644 --- a/content/renderer/media/media_interface_factory.cc +++ b/content/renderer/media/media_interface_factory.cc
@@ -157,14 +157,6 @@ GetMediaInterfaceFactory()->CreateDecryptor(cdm_id, std::move(receiver)); } -#if BUILDFLAG(ENABLE_CDM_PROXY) -void MediaInterfaceFactory::CreateCdmProxy( - const base::Token& cdm_guid, - mojo::PendingReceiver<media::mojom::CdmProxy> receiver) { - NOTREACHED() << "CdmProxy should only be connected from a library CDM"; -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - media::mojom::InterfaceFactory* MediaInterfaceFactory::GetMediaInterfaceFactory() { DVLOG(1) << __func__;
diff --git a/content/renderer/media/media_interface_factory.h b/content/renderer/media/media_interface_factory.h index b876ba0..4720b35 100644 --- a/content/renderer/media/media_interface_factory.h +++ b/content/renderer/media/media_interface_factory.h
@@ -68,11 +68,6 @@ void CreateDecryptor( int cdm_id, mojo::PendingReceiver<media::mojom::Decryptor> receiver) final; -#if BUILDFLAG(ENABLE_CDM_PROXY) - void CreateCdmProxy( - const base::Token& cdm_guid, - mojo::PendingReceiver<media::mojom::CdmProxy> receiver) final; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) private: media::mojom::InterfaceFactory* GetMediaInterfaceFactory();
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 01f9449..3141516 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -169,6 +169,8 @@ "../public/test/render_view_test.h", "../public/test/scoped_overscroll_modes.cc", "../public/test/scoped_overscroll_modes.h", + "../public/test/screenshot_test_utils.cc", + "../public/test/screenshot_test_utils.h", "../public/test/service_worker_host_interceptor.cc", "../public/test/service_worker_host_interceptor.h", "../public/test/service_worker_test_helpers.cc",
diff --git a/content/test/data/forms/form_controls_browsertest_checkbox_android_kitkat.png b/content/test/data/forms/form_controls_browsertest_checkbox_android_kitkat.png new file mode 100644 index 0000000..296a7d8 --- /dev/null +++ b/content/test/data/forms/form_controls_browsertest_checkbox_android_kitkat.png Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_radio_android_kitkat.png b/content/test/data/forms/form_controls_browsertest_radio_android_kitkat.png new file mode 100644 index 0000000..a3f467dfb --- /dev/null +++ b/content/test/data/forms/form_controls_browsertest_radio_android_kitkat.png Binary files differ
diff --git a/gpu/ipc/common/gpu_watchdog_timeout.h b/gpu/ipc/common/gpu_watchdog_timeout.h index 10d71fd..4857f20 100644 --- a/gpu/ipc/common/gpu_watchdog_timeout.h +++ b/gpu/ipc/common/gpu_watchdog_timeout.h
@@ -19,7 +19,7 @@ base::TimeDelta::FromSeconds(30); #elif defined(OS_MACOSX) constexpr base::TimeDelta kGpuWatchdogTimeout = - base::TimeDelta::FromSeconds(17); + base::TimeDelta::FromSeconds(25); #elif defined(OS_WIN) constexpr base::TimeDelta kGpuWatchdogTimeout = base::TimeDelta::FromSeconds(30);
diff --git a/gpu/ipc/service/gpu_watchdog_thread_v2.cc b/gpu/ipc/service/gpu_watchdog_thread_v2.cc index 5a55863..00b88adc59 100644 --- a/gpu/ipc/service/gpu_watchdog_thread_v2.cc +++ b/gpu/ipc/service/gpu_watchdog_thread_v2.cc
@@ -111,7 +111,7 @@ const char kNewTimeOutParam[] = "new_time_out"; const char kMaxExtraCyclesBeforeKillParam[] = "max_extra_cycles_before_kill"; -#if defined(OS_WIN) +#if defined(OS_WIN) || defined(OS_MACOSX) constexpr int kFinchMaxExtraCyclesBeforeKill = 1; #else constexpr int kFinchMaxExtraCyclesBeforeKill = 2;
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb index 653d7498..c841ffd6 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
@@ -2,7 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ar"> <translation id="102360288709523007">ساعد في تحسين Chromium بإرسال إحصاءات الاستخدام وتقارير الأعطال إلى Google.</translation> -<translation id="1185134272377778587">لمحة عامة عن Chromium</translation> +<translation id="1185134272377778587">لمحة عن Chromium</translation> <translation id="1472013873724362412">لا يعمل حسابك على Chromium. يُرجى الاتصال بمشرف النطاق أو استخدام حساب Google عادي لتسجيل الدخول.</translation> <translation id="1507010443238049608">المساعدة على تحسين ميزات Chromium وأدائه</translation> <translation id="1617663976202781617">البيانات من مزامنة Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb index c4be0747..85c2607 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb
@@ -41,7 +41,7 @@ <translation id="7172660552945675509">نصيحة: <ph name="BEGIN_LINK" />نقل Chrome إلى شريط الإرساء<ph name="END_LINK" /></translation> <translation id="7173660919484573146">يستخدم Chrome تقنية "التعرُّف على الوجه" لضمان الدخول المصرَّح به إلى كلمات المرور.</translation> <translation id="7265369419224458312">يمكنك الدخول إلى علامات التبويب التي فتحتها على جهاز الكمبيوتر، مباشرةً من هنا. لن يلزمك سوى فتح Chrome على جهاز الكمبيوتر، والانتقال إلى القائمة وتحديد "تسجيل الدخول إلى Chrome…"</translation> -<translation id="7400722733683201933">لمحة عامة عن Google Chrome</translation> +<translation id="7400722733683201933">لمحة عن Google Chrome</translation> <translation id="756809126120519699">بيانات Chrome التي تم محوها</translation> <translation id="7626032353295482388">مرحبًا بك في Chrome</translation> <translation id="7698568245838009292">متصفِّح Chrome يريد الوصول إلى الكاميرا</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_af.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_af.xtb index 63e8f491..e76f894 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_af.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_af.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="af"> <translation id="1211920912879022906">Jy het onlangs by jou Google-rekening afgemeld, wat jou gesinkroniseerde wagwoorde verwyder het. Meld by Chrome aan en skakel sinkronisering aan om hulle hier te sien.</translation> +<translation id="2034355755416337795">URL is gekopieer</translation> <translation id="2488806977964805203">Stel 'n wagkode</translation> <translation id="2492201814011227831">Stoor sommige wagwoorde in Chrome om te begin. Meld by Chrome aan en skakel sinkronisering aan om jou wagwoord hier te sien as jy reeds wagwoorde in jou Google-rekening geberg het.</translation> <translation id="3378542047369517508">Kry toegang tot al die wagwoorde wat jy in Chrome stoor. In enige program. Enige tyd.</translation> <translation id="3660601625129812825">Vul Chrome-wagwoorde outomaties in</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Kry toegang tot wagwoorde …</translation> +<translation id="5057732351953537135">Kopieer</translation> <translation id="5178539339249989017">Geen soekresultate gevind nie</translation> <translation id="5313485577007399362">Aktiveer outovul …</translation> +<translation id="6299043380422084998">Wagwoord</translation> <translation id="6494101196118320406">Geen Chrome-wagwoorde nie</translation> +<translation id="6796761605222685491">Wagwoord is gekopieer</translation> <translation id="6846906712230932330">Om wagwoorde te gebruik, moet jy eers 'n wagkode op jou toestel stel.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Geen Chrome-wagwoorde nie</translation> <translation id="8208791657167738630">Alle wagwoorde</translation> +<translation id="8267303240703176873">Gebruikernaam</translation> <translation id="8602573493531049509">Vind uit hoe</translation> +<translation id="862630654532726387">Gebruikernaam is gekopieer</translation> <translation id="8982444110803529242">Voorgestelde wagwoorde</translation> <translation id="9087836967653912639">Kanselleer</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb index 8c66272..1f12423 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="ar"> <translation id="1211920912879022906">تم تسجيل الخروج من حسابك على Google مؤخرًا، ما تسبب في إزالة كلمات المرور المتزامنة. يُرجى تسجيل الدخول إلى Chrome وتفعيل المزامنة لعرضها هنا.</translation> +<translation id="2034355755416337795">تم نسخ عنوان URL.</translation> <translation id="2488806977964805203">إعداد رمز مرور</translation> <translation id="2492201814011227831">يُرجى حفظ بعض كلمات المرور في Chrome للبدء. في حال سبق وأن خزّنت كلمات المرور في حسابك على Google، سجِّل الدخول إلى Chrome وفعِّل المزامنة لعرضها هنا.</translation> <translation id="3378542047369517508">الحصول على إذن بالوصول إلى جميع كلمات المرور المحفوظة في Chrome في أي تطبيق، وفي أي وقت</translation> <translation id="3660601625129812825">الملء التلقائي لكلمات المرور في Chrome</translation> +<translation id="3890063218104739480">عنوان URL</translation> <translation id="4695654165345019650">الوصول إلى كلمات المرور...</translation> +<translation id="5057732351953537135">نسخ</translation> <translation id="5178539339249989017">لم يتم العثور على أي نتائج بحث.</translation> <translation id="5313485577007399362">تفعيل الملء التلقائي...</translation> +<translation id="6299043380422084998">كلمة المرور</translation> <translation id="6494101196118320406">ما مِن كلمات مرور في Chrome</translation> +<translation id="6796761605222685491">تم نسخ كلمة المرور.</translation> <translation id="6846906712230932330">لاستخدام كلمات المرور، يجب عليك أولاً إعداد رمز مرور على جهازك.</translation> <translation id="6965382102122355670">حسنًا</translation> <translation id="7870350829250847712">ما مِن كلمات مرور في Chrome</translation> <translation id="8208791657167738630">جميع كلمات المرور</translation> +<translation id="8267303240703176873">اسم المستخدم</translation> <translation id="8602573493531049509">تعرَّف على الطريقة</translation> +<translation id="862630654532726387">تم نسخ اسم المستخدم.</translation> <translation id="8982444110803529242">كلمات المرور المقترَحة</translation> <translation id="9087836967653912639">إلغاء</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb index 75c3339..b26ace0 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="bs"> <translation id="1211920912879022906">Nedavno ste se odjavili sa svog Google računa, čime ste uklonili sinhronizirane lozinke. Prijavite se na Chrome i uključite sinhronizaciju da se lozinke prikažu ovdje.</translation> +<translation id="2034355755416337795">URL je kopiran</translation> <translation id="2488806977964805203">Postavite šifru</translation> <translation id="2492201814011227831">Sačuvajte lozinke u Chromeu da započnete. Ako ste već pohranili lozinke na svom Google računu, prijavite se na Chrome i uključite sinhronizaciju da se lozinke prikažu ovdje.</translation> <translation id="3378542047369517508">Dobijte pristup svim lozinkama koje sačuvate u Chromeu. U bilo kojoj aplikaciji. Bilo kada.</translation> <translation id="3660601625129812825">Automatsko popunjavanje lozinki u Chromeu</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Pristup lozinkama...</translation> +<translation id="5057732351953537135">Kopiraj</translation> <translation id="5178539339249989017">Nije pronađen nijedan rezultat pretraživanja</translation> <translation id="5313485577007399362">Omogući automatsko popunjavanje...</translation> +<translation id="6299043380422084998">Lozinka</translation> <translation id="6494101196118320406">Nema Chrome lozinki</translation> +<translation id="6796761605222685491">Lozinka je kopirana</translation> <translation id="6846906712230932330">Postavite šifru na uređaju da koristite lozinke.</translation> <translation id="6965382102122355670">Uredu</translation> <translation id="7870350829250847712">Nema Chrome lozinki</translation> <translation id="8208791657167738630">Sve lozinke</translation> +<translation id="8267303240703176873">Korisničko ime</translation> <translation id="8602573493531049509">Saznajte kako</translation> +<translation id="862630654532726387">Korisničko ime je kopirano</translation> <translation id="8982444110803529242">Predložene lozinke</translation> <translation id="9087836967653912639">Otkaži</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb index e8ff930..40e941db 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="ca"> <translation id="1211920912879022906">Fa poc has tancat la sessió del teu Compte de Google. Amb aquesta acció, s'han suprimit les contrasenyes sincronitzades. Inicia la sessió a Chrome i activa la sincronització perquè es mostrin aquí.</translation> +<translation id="2034355755416337795">S'ha copiat l'URL</translation> <translation id="2488806977964805203">Estableix una contrasenya</translation> <translation id="2492201814011227831">Desa alguna contrasenya a Chrome per començar. Si ja tens contrasenyes desades al Compte de Google, inicia la sessió a Chrome i activa la sincronització perquè es mostrin aquí.</translation> <translation id="3378542047369517508">Obtén accés a totes les contrasenyes que desis a Chrome. En qualsevol aplicació. En qualsevol moment.</translation> <translation id="3660601625129812825">Autocompleta les contrasenyes de Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Accedir a les contrasenyes...</translation> +<translation id="5057732351953537135">Copia</translation> <translation id="5178539339249989017">No s'ha trobat cap resultat de la cerca</translation> <translation id="5313485577007399362">Activa Autocompletar...</translation> +<translation id="6299043380422084998">Contrasenya</translation> <translation id="6494101196118320406">No hi ha cap contrasenya de Chrome</translation> +<translation id="6796761605222685491">S'ha copiat la contrasenya</translation> <translation id="6846906712230932330">Per utilitzar les contrasenyes, primer has d'establir una contrasenya al dispositiu.</translation> <translation id="6965382102122355670">D'acord</translation> <translation id="7870350829250847712">No hi ha cap contrasenya de Chrome</translation> <translation id="8208791657167738630">Totes les contrasenyes</translation> +<translation id="8267303240703176873">Nom d'usuari</translation> <translation id="8602573493531049509">Més informació</translation> +<translation id="862630654532726387">S'ha copiat el nom d'usuari</translation> <translation id="8982444110803529242">Contrasenyes suggerides</translation> <translation id="9087836967653912639">Cancel·la</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb index fc24332..af9af2b 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="cs"> <translation id="1211920912879022906">Nedávno jste se odhlásili z účtu Google a vaše synchronizovaná hesla přitom byla odstraněna. Chcete-li je zde zobrazit, přihlaste se do Chromu a zapněte synchronizaci.</translation> +<translation id="2034355755416337795">Adresa URL byla zkopírována</translation> <translation id="2488806977964805203">Nastavte heslo</translation> <translation id="2492201814011227831">Chcete-li začít, uložte si v Chromu nějaká hesla. Pokud už máte hesla v účtu Google uložená, zobrazíte je zde tak, že se přihlásíte do Chromu a zapnete synchronizaci.</translation> <translation id="3378542047369517508">Získejte přístup ke všem heslům, která si uložíte do Chromu. V jakékoli aplikaci. Kdykoli.</translation> <translation id="3660601625129812825">Automatické vyplňování hesel Chromu</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Přístup k heslům...</translation> +<translation id="5057732351953537135">Kopírovat</translation> <translation id="5178539339249989017">Nebyly nalezeny žádné výsledky</translation> <translation id="5313485577007399362">Aktivovat Automatické vyplňování…</translation> +<translation id="6299043380422084998">Heslo</translation> <translation id="6494101196118320406">V Chromu nemáte žádná hesla</translation> +<translation id="6796761605222685491">Heslo bylo zkopírováno</translation> <translation id="6846906712230932330">Chcete-li použít hesla, musíte nejdříve na zařízení nastavit heslo.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">V Chromu nemáte žádná hesla</translation> <translation id="8208791657167738630">Všechna hesla</translation> +<translation id="8267303240703176873">Uživatelské jméno</translation> <translation id="8602573493531049509">Postup</translation> +<translation id="862630654532726387">Uživatelské jméno bylo zkopírováno</translation> <translation id="8982444110803529242">Návrhy hesel</translation> <translation id="9087836967653912639">Zrušit</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb index 7130cab..8de8dbd 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="da"> <translation id="1211920912879022906">Du loggede for nylig ud af din Google-konto, hvilket har medført, at dine synkroniserede adgangskoder er blevet fjernet. Log ind i Chrome, og aktivér synkronisering for at se dem her.</translation> +<translation id="2034355755416337795">Webadressen er kopieret</translation> <translation id="2488806977964805203">Angiv en adgangskode</translation> <translation id="2492201814011227831">Gem nogle adgangskoder i Chrome for at komme i gang. Hvis du allerede har gemt adgangskoder på din Google-konto, kan du logge ind i Chrome og aktivere synkronisering for at se dem her.</translation> <translation id="3378542047369517508">Få adgang til alle de adgangskoder, du har gemt i Chrome. I enhver app og til enhver tid.</translation> <translation id="3660601625129812825">Udfyld Chrome-adgangskoder automatisk</translation> +<translation id="3890063218104739480">Webadresse</translation> <translation id="4695654165345019650">Adgang til adgangskoder…</translation> +<translation id="5057732351953537135">Kopiér</translation> <translation id="5178539339249989017">Der blev ikke fundet nogen søgeresultater</translation> <translation id="5313485577007399362">Aktivér autofyld...</translation> +<translation id="6299043380422084998">Adgangskode</translation> <translation id="6494101196118320406">Ingen Chrome-adgangskoder</translation> +<translation id="6796761605222685491">Adgangskoden er kopieret</translation> <translation id="6846906712230932330">Før du kan bruge adgangskoder, skal du angive en adgangskode på din enhed.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Ingen Chrome-adgangskoder</translation> <translation id="8208791657167738630">Alle adgangskoder</translation> +<translation id="8267303240703176873">Brugernavn</translation> <translation id="8602573493531049509">Se hvordan</translation> +<translation id="862630654532726387">Brugernavnet er kopieret</translation> <translation id="8982444110803529242">Forslag til adgangskoder</translation> <translation id="9087836967653912639">Annuller</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb index bd7eda7..485dbc0 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="de"> <translation id="1211920912879022906">Sie haben sich kürzlich von Ihrem Google-Konto abgemeldet, wodurch Ihre synchronisierten Passwörter entfernt wurden. Melden Sie sich in Chrome an und aktivieren Sie die Synchronisierung, damit sie wieder angezeigt werden.</translation> +<translation id="2034355755416337795">URL wurde kopiert</translation> <translation id="2488806977964805203">Sicherheitscode einrichten</translation> <translation id="2492201814011227831">Sobald Sie Passwörter in Chrome gespeichert haben, werden sie hier angezeigt. Wenn in Ihrem Google-Konto bereits Passwörter gespeichert sind, melden Sie sich in Chrome an und aktivieren Sie die Synchronisierung, damit sie hier angezeigt werden.</translation> <translation id="3378542047369517508">Sie erhalten Zugriff auf alle Passwörter, die Sie in Chrome speichern. In jeder App, jederzeit.</translation> <translation id="3660601625129812825">Chrome-Passwörter automatisch ausfüllen</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Auf Passwörter zugreifen…</translation> +<translation id="5057732351953537135">Kopieren</translation> <translation id="5178539339249989017">Keine Suchergebnisse gefunden</translation> <translation id="5313485577007399362">"Autom. ausfüllen" aktivieren…</translation> +<translation id="6299043380422084998">Passwort</translation> <translation id="6494101196118320406">Keine Chrome-Passwörter</translation> +<translation id="6796761605222685491">Passwort wurde kopiert</translation> <translation id="6846906712230932330">Sie müssen zuerst einen Sicherheitscode auf Ihrem Gerät einrichten, um Passwörter zu verwenden.</translation> <translation id="6965382102122355670">Ok</translation> <translation id="7870350829250847712">Keine Chrome-Passwörter</translation> <translation id="8208791657167738630">Alle Passwörter</translation> +<translation id="8267303240703176873">Nutzername</translation> <translation id="8602573493531049509">Weitere Informationen</translation> +<translation id="862630654532726387">Nutzername wurde kopiert</translation> <translation id="8982444110803529242">Vorgeschlagene Passwörter</translation> <translation id="9087836967653912639">Abbrechen</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_en-GB.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_en-GB.xtb index 27b66e9..d70f522 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_en-GB.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_en-GB.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="en-GB"> <translation id="1211920912879022906">You recently signed out of your Google Account, which removed your synced passwords. Sign in to Chrome and turn on sync to see them here.</translation> +<translation id="2034355755416337795">URL was copied</translation> <translation id="2488806977964805203">Set a passcode</translation> <translation id="2492201814011227831">Save some passwords in Chrome to get started. If you already have passwords stored in your Google Account, sign in to Chrome and turn on sync to see them here.</translation> <translation id="3378542047369517508">Get access to all of the passwords that you save in Chrome. In any app. At any time.</translation> <translation id="3660601625129812825">Auto-fill Chrome passwords</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Access passwords…</translation> +<translation id="5057732351953537135">Copy</translation> <translation id="5178539339249989017">No search results found</translation> <translation id="5313485577007399362">Enable auto-fill…</translation> +<translation id="6299043380422084998">Password</translation> <translation id="6494101196118320406">No Chrome Passwords</translation> +<translation id="6796761605222685491">Password was copied</translation> <translation id="6846906712230932330">To use passwords, you must first set a passcode on your device.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">No Chrome Passwords</translation> <translation id="8208791657167738630">All passwords</translation> +<translation id="8267303240703176873">Username</translation> <translation id="8602573493531049509">Learn how</translation> +<translation id="862630654532726387">Username was copied</translation> <translation id="8982444110803529242">Suggested passwords</translation> <translation id="9087836967653912639">Cancel</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb index 2b66bd6f..17e5001 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="eu"> <translation id="1211920912879022906">Duela gutxi amaitu duzu Google-ko kontuko saioa, eta, ondorioz, sinkronizatutako pasahitzak kendu egin dira. Haiek ikusteko, hasi saioa Chrome-n eta aktibatu sinkronizazioa.</translation> +<translation id="2034355755416337795">Kopiatu da URLa</translation> <translation id="2488806977964805203">Ezarri pasakode bat</translation> <translation id="2492201814011227831">Erabiltzen hasteko, gorde pasahitz batzuk Chrome-n. Google-ko kontuan gordeta badauzkazu pasahitzak dagoeneko, hasi saioa Chrome-n eta aktibatu sinkronizazioa haiek hemen ikusteko.</translation> <translation id="3378542047369517508">Atzitu Chrome-n gordeta dauzkazun pasahitz guztiak. Edozein aplikaziotatik, edonoiz.</translation> <translation id="3660601625129812825">Bete automatikoki Chrome-ko pasahitzak</translation> +<translation id="3890063218104739480">URLa</translation> <translation id="4695654165345019650">Atzitu pasahitzak…</translation> +<translation id="5057732351953537135">Kopiatu</translation> <translation id="5178539339249989017">Ez da aurkitu bilaketa-emaitzarik</translation> <translation id="5313485577007399362">Gaitu betetze automatikoa...</translation> +<translation id="6299043380422084998">Pasahitza</translation> <translation id="6494101196118320406">Ez dago pasahitzik Chrome-n</translation> +<translation id="6796761605222685491">Kopiatu da pasahitza</translation> <translation id="6846906712230932330">Pasahitzak erabiltzeko, lehenik, pasakode bat ezarri behar duzu gailuan.</translation> <translation id="6965382102122355670">Ados</translation> <translation id="7870350829250847712">Ez dago pasahitzik Chrome-n</translation> <translation id="8208791657167738630">Pasahitz guztiak</translation> +<translation id="8267303240703176873">Erabiltzaile-izena</translation> <translation id="8602573493531049509">Lortu argibideak</translation> +<translation id="862630654532726387">Kopiatu da erabiltzaile-izena</translation> <translation id="8982444110803529242">Iradokitako pasahitzak</translation> <translation id="9087836967653912639">Utzi</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb index d7ba500..57ecb86 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="fi"> <translation id="1211920912879022906">Kirjauduit äskettäin ulos Google-tililtäsi, ja synkronoidut salasanasi poistettiin. Kirjaudu Chromeen ja laita synkronointi päälle, niin näet salasanat tässä.</translation> +<translation id="2034355755416337795">URL kopioitiin</translation> <translation id="2488806977964805203">Aseta tunnuskoodi</translation> <translation id="2492201814011227831">Aloita tallentamalla salasanoja Chromeen. Jos olet jo tallentanut salasanoja Google-tilillesi, kirjaudu Chromeen ja laita synkronointi päälle, niin näet ne tässä.</translation> <translation id="3378542047369517508">Saat kaikki Chromessa tallentamasi salasanat käyttöön. Kaikissa sovelluksissa. Milloin tahansa.</translation> <translation id="3660601625129812825">Chromen automaattisen täytön salasanat</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Käytä salasanoja…</translation> +<translation id="5057732351953537135">Kopioi</translation> <translation id="5178539339249989017">Ei hakutuloksia</translation> <translation id="5313485577007399362">Ota automaattinen täyttö käyttöön…</translation> +<translation id="6299043380422084998">Salasana</translation> <translation id="6494101196118320406">Ei Chrome-salasanoja</translation> +<translation id="6796761605222685491">Salasana kopioitiin</translation> <translation id="6846906712230932330">Salasanojen käyttöä varten sinun on ensin asetettava laitteellesi tunnuskoodi.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Ei Chrome-salasanoja</translation> <translation id="8208791657167738630">Kaikki salasanat</translation> +<translation id="8267303240703176873">Käyttäjänimi</translation> <translation id="8602573493531049509">Lisätietoja</translation> +<translation id="862630654532726387">Käyttäjänimi kopioitiin</translation> <translation id="8982444110803529242">Ehdotetut salasanat</translation> <translation id="9087836967653912639">Peruuta</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb index 945f5866..90a5244 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="fr-CA"> <translation id="1211920912879022906">Vous vous êtes récemment déconnecté de votre compte Google, ce qui a entraîné la suppression de vos mots de passe synchronisés. Connectez-vous à Chrome et activez la synchronisation pour les afficher ici.</translation> +<translation id="2034355755416337795">URL copiée</translation> <translation id="2488806977964805203">Définir un mot de passe</translation> <translation id="2492201814011227831">Enregistrez quelques mots de passe dans Chrome pour commencer. Si vous avez déjà stocké des mots de passe dans votre compte Google, connectez-vous à Chrome et activez la synchronisation pour les afficher ici.</translation> <translation id="3378542047369517508">Obtenez l'accès à tous les mots de passe que vous enregistrez dans Chrome. Dans toutes les applications. En tout temps.</translation> <translation id="3660601625129812825">Remplir automatiquement les mots de passe de Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Accès aux mots de passe en cours…</translation> +<translation id="5057732351953537135">Copier</translation> <translation id="5178539339249989017">Aucun résultat de recherche n'a été trouvé</translation> <translation id="5313485577007399362">Activer le remplissage automatique</translation> +<translation id="6299043380422084998">Mot de passe</translation> <translation id="6494101196118320406">Aucun mot de passe Chrome</translation> +<translation id="6796761605222685491">Mot de passe copié</translation> <translation id="6846906712230932330">Pour utiliser vos mots de passe, vous devez d'abord définir un mot de passe sur votre appareil.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Aucun mot de passe Chrome</translation> <translation id="8208791657167738630">Tous les mots de passe</translation> +<translation id="8267303240703176873">Nom d'utilisateur</translation> <translation id="8602573493531049509">Découvrir comment</translation> +<translation id="862630654532726387">Nom d'utilisateur copié</translation> <translation id="8982444110803529242">Mots de passe suggérés</translation> <translation id="9087836967653912639">Annuler</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb index 8784f1b3..2d8fe7f 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="gl"> <translation id="1211920912879022906">Pechaches sesión recentemente na túa Conta de Google, polo que se quitaron os contrasinais sincronizados. Inicia sesión en Chrome e activa a sincronización para velos aquí.</translation> +<translation id="2034355755416337795">Copiouse o URL</translation> <translation id="2488806977964805203">Define un contrasinal</translation> <translation id="2492201814011227831">Para comezar, garda algúns contrasinais en Chrome. Se xa tes contrasinais almacenados na túa Conta de Google, inicia sesión en Chrome e activa a sincronización para velos aquí.</translation> <translation id="3378542047369517508">Accede desde calquera aplicación e en calquera momento a todos os contrasinais gardados en Chrome.</translation> <translation id="3660601625129812825">Autocompletar os contrasinais de Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Acceso aos contrasinais…</translation> +<translation id="5057732351953537135">Copiar</translation> <translation id="5178539339249989017">Non se encontraron resultados de busca</translation> <translation id="5313485577007399362">Activar autocompletar…</translation> +<translation id="6299043380422084998">Contrasinal</translation> <translation id="6494101196118320406">Non hai ningún contrasinal de Chrome</translation> +<translation id="6796761605222685491">Copiouse o contrasinal</translation> <translation id="6846906712230932330">Para usar os contrasinais, en primeiro lugar debes definir un contrasinal no teu dispositivo.</translation> <translation id="6965382102122355670">Aceptar</translation> <translation id="7870350829250847712">Non hai ningún contrasinal de Chrome</translation> <translation id="8208791657167738630">Todos os contrasinais</translation> +<translation id="8267303240703176873">Nome de usuario</translation> <translation id="8602573493531049509">Máis información</translation> +<translation id="862630654532726387">Copiouse o nome de usuario</translation> <translation id="8982444110803529242">Contrasinais suxeridos</translation> <translation id="9087836967653912639">Cancelar</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb index 710ddaa..a0637602 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="hu"> <translation id="1211920912879022906">Nemrég kijelentkezett Google-fiókjából, amivel eltávolította a szinkronizált jelszavait. Ha szeretné látni itt a jelszavakat, jelentkezzen be a Chrome-ba, és kapcsolja be a szinkronizálást.</translation> +<translation id="2034355755416337795">URL másolva</translation> <translation id="2488806977964805203">Biztonsági kód beállítása</translation> <translation id="2492201814011227831">A kezdéshez mentsen el néhány jelszót a Chrome-ban. Ha Google-fiókjában már vannak mentett jelszavak, jelentkezzen be a Chrome-ba, és kapcsolja be a szinkronizálást, hogy a jelszavak láthatók legyenek itt.</translation> <translation id="3378542047369517508">Hozzáférhet a Chrome böngészőben mentett összes jelszavához. Bármelyik alkalmazásban, bármikor.</translation> <translation id="3660601625129812825">Chrome-jelszavak automatikus kitöltése</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Hozzáférés a jelszavakhoz…</translation> +<translation id="5057732351953537135">Másolás</translation> <translation id="5178539339249989017">Nincs találat</translation> <translation id="5313485577007399362">Automatikus kitöltés engedélyezése…</translation> +<translation id="6299043380422084998">Jelszó</translation> <translation id="6494101196118320406">Nincsenek Chrome-jelszavak</translation> +<translation id="6796761605222685491">Jelszó másolva</translation> <translation id="6846906712230932330">A jelszavak használatához előbb be kell állítania az eszközön a biztonsági kódot.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Nincsenek Chrome-jelszavak</translation> <translation id="8208791657167738630">Az összes jelszó</translation> +<translation id="8267303240703176873">Felhasználónév</translation> <translation id="8602573493531049509">További információ</translation> +<translation id="862630654532726387">Felhasználónév másolva</translation> <translation id="8982444110803529242">Javasolt jelszavak</translation> <translation id="9087836967653912639">Mégse</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hy.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hy.xtb index 1f0209f7..6a4d9d8e 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hy.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hy.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="hy"> <translation id="1211920912879022906">Դուք վերջերս դուրս եք եկել ձեր Google հաշվից, ինչի արդյունքում ձեր համաժամացված գաղտնաբառերը հեռացվել են։ Մուտք գործեք Chrome և միացրեք համաժամացումը՝ դրանք այստեղ տեսնելու համար։</translation> +<translation id="2034355755416337795">URL-ը պատճենվեց</translation> <translation id="2488806977964805203">Սահմանեք անցակոդ</translation> <translation id="2492201814011227831">Սկսելու համար Chrome-ում մի քանի գաղտնաբառ պահեք։ Եթե ձեր Google հաշվում արդեն պահած գաղտնաբառեր ունեք, մուտք գործեք Chrome և միացրեք համաժամացումը՝ դրանք այստեղ տեսնելու համար։</translation> <translation id="3378542047369517508">Դուք կկարողանաք օգտագործել Chrome-ում պահված բոլոր գաղտնաբառերը՝ ցանկացած ժամանակ, ցանկացած հավելվածում։</translation> <translation id="3660601625129812825">Chrome-ի գաղտնաբառերի ինքնալրացում</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Հասանելիություն գաղտնաբառերին...</translation> +<translation id="5057732351953537135">Պատճենել</translation> <translation id="5178539339249989017">Որոնման արդյունքներ չկան</translation> <translation id="5313485577007399362">Միացնել ինքնալրացնումը</translation> +<translation id="6299043380422084998">Գաղտնաբառ</translation> <translation id="6494101196118320406">Chrome-ի գաղտնաբառեր չկան</translation> +<translation id="6796761605222685491">Գաղտնաբառը պատճենվեց</translation> <translation id="6846906712230932330">Գաղտնաբառերն օգտագործելու համար ձեր սարքում նախ պետք է անցակոդ սահմանեք։</translation> <translation id="6965382102122355670">Եղավ</translation> <translation id="7870350829250847712">Chrome-ի գաղտնաբառեր չկան</translation> <translation id="8208791657167738630">Բոլոր գաղտնաբառերը</translation> +<translation id="8267303240703176873">Օգտանուն</translation> <translation id="8602573493531049509">Իմանալ ավելին</translation> +<translation id="862630654532726387">Օգտանունը պատճենվեց</translation> <translation id="8982444110803529242">Առաջարկվող գաղտնաբառեր</translation> <translation id="9087836967653912639">Չեղարկել</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_is.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_is.xtb index ce0fd06..d6eac99 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_is.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_is.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="is"> <translation id="1211920912879022906">Þú skráðir þig nýlega út af Google reikningnum þínum og þá voru samstillt aðgangsorð fjarlægð. Skráðu þig inn í Chrome og kveiktu á samstillingu til að sjá þau hér.</translation> +<translation id="2034355755416337795">Vefslóðin var afrituð</translation> <translation id="2488806977964805203">Veldu aðgangskóða</translation> <translation id="2492201814011227831">Vistaðu aðgangsorð í Chrome til að hefjast handa. Ef aðgangsorð eru nú þegar vistuð á Google reikningnum þínum skaltu skrá þig inn í Chrome og kveikja á samstillingu til að sjá þau hér.</translation> <translation id="3378542047369517508">Fáðu aðgang að öllum aðgangsorðum sem þú vistar í Chrome. Í hvaða forriti sem er. Hvenær sem er.</translation> <translation id="3660601625129812825">Sjálfvirk útfylling aðgangsorða í Chrome</translation> +<translation id="3890063218104739480">Vefslóð</translation> <translation id="4695654165345019650">Aðgangur að aðgangsorðum...</translation> +<translation id="5057732351953537135">Afrita</translation> <translation id="5178539339249989017">Engar leitarniðurstöður fundust</translation> <translation id="5313485577007399362">Kveikja á sjálfvirkri útfyllingu...</translation> +<translation id="6299043380422084998">Aðgangsorð</translation> <translation id="6494101196118320406">Engin aðgangsorð í Chrome</translation> +<translation id="6796761605222685491">Aðgangsorðið var afritað</translation> <translation id="6846906712230932330">Til að nota aðgangsorð þarftu fyrst að stilla aðgangskóða í tækinu þínu.</translation> <translation id="6965382102122355670">Í lagi</translation> <translation id="7870350829250847712">Engin aðgangsorð í Chrome</translation> <translation id="8208791657167738630">Öll aðgangsorð</translation> +<translation id="8267303240703176873">Notandanafn</translation> <translation id="8602573493531049509">Kynntu þér hvernig</translation> +<translation id="862630654532726387">Notandanafnið var afritað</translation> <translation id="8982444110803529242">Uppástungur um aðgangsorð</translation> <translation id="9087836967653912639">Hætta</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb index eaff624a..a2b83e2df 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="iw"> <translation id="1211920912879022906">לאחרונה יצאת מחשבון Google. פעולה זו הסירה את הסיסמאות המסונכרנות שלך. כדי להציג את הסיסמאות כאן, עליך להיכנס אל Chrome ולהפעיל את הסנכרון.</translation> +<translation id="2034355755416337795">כתובת ה-URL הועתקה</translation> <translation id="2488806977964805203">עליך להגדיר קוד גישה</translation> <translation id="2492201814011227831">כדי להתחיל, צריך לשמור מספר סיסמאות ב-Chrome. אם כבר שמרת סיסמאות בחשבון Google שלך, עליך להיכנס אל Chrome ולהפעיל את הסנכרון כדי להציג אותן כאן.</translation> <translation id="3378542047369517508">גישה לכל הסיסמאות ששמרת ב-Chrome. בכל האפליקציות, ללא הגבלה.</translation> <translation id="3660601625129812825">מילוי אוטומטי של סיסמאות ב-Chrome</translation> +<translation id="3890063218104739480">כתובת URL</translation> <translation id="4695654165345019650">גישה לסיסמאות...</translation> +<translation id="5057732351953537135">העתקה</translation> <translation id="5178539339249989017">לא נמצאו תוצאות חיפוש</translation> <translation id="5313485577007399362">הפעלת המילוי האוטומטי…</translation> +<translation id="6299043380422084998">סיסמה</translation> <translation id="6494101196118320406">אין סיסמאות של Chrome</translation> +<translation id="6796761605222685491">הסיסמה הועתקה</translation> <translation id="6846906712230932330">כדי שניתן יהיה להשתמש בסיסמאות, יש להגדיר קוד גישה במכשיר.</translation> <translation id="6965382102122355670">אישור</translation> <translation id="7870350829250847712">אין סיסמאות של Chrome</translation> <translation id="8208791657167738630">כל הסיסמאות</translation> +<translation id="8267303240703176873">שם משתמש</translation> <translation id="8602573493531049509">איך עושים זאת?</translation> +<translation id="862630654532726387">שם המשתמש הועתק</translation> <translation id="8982444110803529242">הצעות לסיסמאות</translation> <translation id="9087836967653912639">ביטול</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lo.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lo.xtb index aede18e1..fd024b1 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lo.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lo.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="lo"> <translation id="1211920912879022906">ທ່ານໄດ້ອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານເມື່ອບໍ່ດົນນີ້, ເຊິ່ງໄດ້ລຶບລະຫັດຜ່ານທີ່ຊິ້ງຂໍ້ມູນຂອງທ່ານອອກແລ້ວ. ເຂົ້າສູ່ລະບົບ Chrome ແລະ ເປີດການຊິ້ງຂໍ້ມູນເພື່ອເຫັນພວກມັນຢູ່ບ່ອນນີ້.</translation> +<translation id="2034355755416337795">ສຳເນົາ URL ແລ້ວ</translation> <translation id="2488806977964805203">ຕັ້ງຄ່າລະຫັດຜ່ານ</translation> <translation id="2492201814011227831">ບັນທຶກບາງລະຫັດຜ່ານໄວ້ໃນ Chrome ເພື່ອເລີ່ມຕົ້ນ. ຖ້າທ່ານມີລະຫັດຜ່ານທີ່ເກັບໄວ້ໃນບັນຊີ Google ຂອງທ່ານ, ກະລຸນາເຂົ້າສູ່ລະບົບ Chrome ແລ້ວເປີດການຊິ້ງຂໍ້ມູນເພື່ອເຫັນພວກມັນຢູ່ບ່ອນນີ້.</translation> <translation id="3378542047369517508">ຮັບສິດເຂົ້າເຖິງລະຫັດຜ່ານທັງໝົດທີ່ທ່ານບັນທຶກໄວ້ໃນ Chrome. ໃນແອັບໃດໆກໍໄດ້. ໃນທຸກເວລາ.</translation> <translation id="3660601625129812825">ລະຫັດຜ່ານການຕື່ມຂໍ້ມູນອັດຕະໂນມັດໃນ Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">ເຂົ້າເຖິງລະຫັດຜ່ານ...</translation> +<translation id="5057732351953537135">ສຳເນົາ</translation> <translation id="5178539339249989017">ບໍ່ພົບຜົນການຊອກຫາໃດໆ</translation> <translation id="5313485577007399362">ເປີດການນຳໃຊ້ການຕື່ມຂໍ້ມູນອັດຕະໂນມັດ...</translation> +<translation id="6299043380422084998">ລະຫັດຜ່ານ</translation> <translation id="6494101196118320406">ບໍ່ມີລະຫັດຜ່ານ Chrome</translation> +<translation id="6796761605222685491">ສຳເນົາລະຫັດຜ່ານໄວ້ແລ້ວ</translation> <translation id="6846906712230932330">ເພື່ອໃຊ້ລະຫັດຜ່ານ, ທ່ານຕ້ອງຕັ້ງລະຫັດຜ່ານໃນອຸປະກອນຂອງທ່ານກ່ອນ.</translation> <translation id="6965382102122355670">ຕົກລົງ</translation> <translation id="7870350829250847712">ບໍ່ມີລະຫັດຜ່ານ Chrome</translation> <translation id="8208791657167738630">ລະຫັດຜ່ານທັງໝົດ</translation> +<translation id="8267303240703176873">ຊື່ຜູ້ໃຊ້</translation> <translation id="8602573493531049509">ສຶກສາວິທີການ</translation> +<translation id="862630654532726387">ສຳເນົາຊື່ຜູ້ໃຊ້ແລ້ວ</translation> <translation id="8982444110803529242">ລະຫັດຜ່ານທີ່ແນະນຳ</translation> <translation id="9087836967653912639">ຍົກເລີກ</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb index a45a542f..3517f285 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="lv"> <translation id="1211920912879022906">Nesen jūs izrakstījāties no sava Google konta un tādējādi noņēmāt sinhronizētās paroles. Pierakstieties pārlūkprogrammā Chrome un ieslēdziet sinhronizāciju, lai skatītu paroles šeit.</translation> +<translation id="2034355755416337795">URL ir nokopēts</translation> <translation id="2488806977964805203">Piekļuves koda iestatīšana</translation> <translation id="2492201814011227831">Lai sāktu darbu, saglabājiet dažas paroles pārlūkprogrammā Chrome. Ja esat jau saglabājis paroles savā Google kontā, pierakstieties pārlūkprogrammā Chrome un ieslēdziet sinhronizāciju, lai skatītu paroles šeit.</translation> <translation id="3378542047369517508">Varēsiet jebkurā laikā piekļūt visām savām pārlūkā Chrome saglabātajām parolēm jebkurā lietotnē.</translation> <translation id="3660601625129812825">Chrome paroļu automātiskā aizpilde</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Notiek piekļūšana parolēm...</translation> +<translation id="5057732351953537135">Kopēt</translation> <translation id="5178539339249989017">Netika atrasts neviens meklēšanas rezultāts.</translation> <translation id="5313485577007399362">Iespējot automātisko aizpildi...</translation> +<translation id="6299043380422084998">Parole</translation> <translation id="6494101196118320406">Nav Chrome paroļu</translation> +<translation id="6796761605222685491">Parole ir nokopēta</translation> <translation id="6846906712230932330">Lai izmantotu paroles, vispirms ierīcei ir jāiestata piekļuves kods.</translation> <translation id="6965382102122355670">Labi</translation> <translation id="7870350829250847712">Nav Chrome paroļu</translation> <translation id="8208791657167738630">Visas paroles</translation> +<translation id="8267303240703176873">Lietotājvārds</translation> <translation id="8602573493531049509">Uzzināt, kā to izdarīt</translation> +<translation id="862630654532726387">Lietotājvārds ir nokopēts</translation> <translation id="8982444110803529242">Ieteiktās paroles</translation> <translation id="9087836967653912639">Atcelt</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mr.xtb index 083b51b..a95cc31 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mr.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="mr"> <translation id="1211920912879022906">तुम्ही नुकतेच तुमच्या Google खाते मधून साइन आउट केले, ज्यामुळे तुमचे सिंक केलेले पासवर्ड काढले गेले. ते येथे पाहण्यासाठी Chrome मध्ये साइन इन करा आणि सिंक सुरू करा.</translation> +<translation id="2034355755416337795">URL कॉपी केली</translation> <translation id="2488806977964805203">पासकोड सेट करा</translation> <translation id="2492201814011227831">सुरुवात करण्यासाठी Chrome मध्ये काही पासवर्ड सेव्ह करा. तुमच्याकडे आधीच तुमच्या Google खाते मध्ये स्टोअर केलेले पासवर्ड असल्यास, Chrome मध्ये साइन इन करा आणि ते येथे पाहण्यासाठी सिंक सुरू करा.</translation> <translation id="3378542047369517508">तुम्ही Chrome मध्ये सेव्ह करत असलेल्या पासवर्डचा अॅक्सेस मिळवा. कोणत्याही अॅपमध्ये. कोणत्याही वेळी.</translation> <translation id="3660601625129812825">ऑटोफिल Chrome पासवर्ड</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">पासवर्ड अॅक्सेस करा...</translation> +<translation id="5057732351953537135">कॉपी करा</translation> <translation id="5178539339249989017">कोणतेही शोध परिणाम आढळले नाहीत</translation> <translation id="5313485577007399362">ऑटोफिल सुरू करा...</translation> +<translation id="6299043380422084998">पासवर्ड</translation> <translation id="6494101196118320406">Chrome पासवर्ड नाहीत</translation> +<translation id="6796761605222685491">पासवर्ड कॉपी केला</translation> <translation id="6846906712230932330">पासवर्ड वापरण्यासाठी, तुम्ही आधी तुमच्या डिव्हाइसवर पासकोड सेट करणे आवश्यक आहे.</translation> <translation id="6965382102122355670">ठीक आहे</translation> <translation id="7870350829250847712">Chrome पासवर्ड नाहीत</translation> <translation id="8208791657167738630">सर्व पासवर्ड</translation> +<translation id="8267303240703176873">वापरकर्ता नाव</translation> <translation id="8602573493531049509">कसे ते जाणून घ्या</translation> +<translation id="862630654532726387">वापरकर्ता नाव कॉपी केले</translation> <translation id="8982444110803529242">सुचवलेले पासवर्ड</translation> <translation id="9087836967653912639">रद्द करा</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb index 424d3f7..da889f79c 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="ms"> <translation id="1211920912879022906">Baru-baru ini anda telah log keluar daripada Akaun Google anda dan hal itu menyebabkan kata laluan anda yang disegerakkan telah dialih keluar. Log masuk ke Chrome dan hidupkan penyegerakan untuk melihat kata laluan anda di sini.</translation> +<translation id="2034355755416337795">URL telah disalin</translation> <translation id="2488806977964805203">Tetapkan Kod Laluan</translation> <translation id="2492201814011227831">Simpan beberapa kata laluan dalam Chrome untuk bermula. Jika anda sudah menyimpan kata laluan dalam Akaun Google anda, log masuk ke Chrome dan hidupkan penyegerakan untuk melihat kata laluan tersebut di sini.</translation> <translation id="3378542047369517508">Dapatkan akses kepada semua kata laluan yang anda simpan dalam Chrome. Dalam mana-mana apl. Pada bila-bila masa.</translation> <translation id="3660601625129812825">Autolengkap Kata Laluan Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Akses Kata Laluan...</translation> +<translation id="5057732351953537135">Salin</translation> <translation id="5178539339249989017">Tiada hasil carian dijumpai</translation> <translation id="5313485577007399362">Dayakan Autolengkap...</translation> +<translation id="6299043380422084998">Kata laluan</translation> <translation id="6494101196118320406">Tiada Kata Laluan Chrome</translation> +<translation id="6796761605222685491">Kata laluan telah disalin</translation> <translation id="6846906712230932330">Untuk menggunakan kata laluan, anda mesti menetapkan kod laluan pada peranti anda dahulu.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Tiada Kata Laluan Chrome</translation> <translation id="8208791657167738630">Semua Kata Laluan</translation> +<translation id="8267303240703176873">Nama pengguna</translation> <translation id="8602573493531049509">Ketahui Caranya</translation> +<translation id="862630654532726387">Nama pengguna telah disalin</translation> <translation id="8982444110803529242">Kata Laluan yang Dicadangkan</translation> <translation id="9087836967653912639">Batal</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_my.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_my.xtb index 7062c63..c3b81dfc 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_my.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_my.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="my"> <translation id="1211920912879022906">သင့် Google Account မှ လတ်တလော ထွက်ထားပါသည်၊ ၎င်းက သင်စင့်ခ်လုပ်ထားသော စကားဝှက်များကို ဖယ်ရှားလိုက်သည်။ ၎င်းတို့ကို ဤနေရာတွင်မြင်ရရန် Chrome သို့ လက်မှတ်ထိုးဝင်ပြီး စင့်ခ်လုပ်ခြင်းကို ဖွင့်ပါ။</translation> +<translation id="2034355755416337795">URL ကို မိတ္တူကူးထားသည်</translation> <translation id="2488806977964805203">လျှို့ဝှက်ကုဒ်တစ်ခု သတ်မှတ်ခြင်း</translation> <translation id="2492201814011227831">စတင်ရန်အတွက် Chrome တွင် စကားဝှက်အချို့ကို သိမ်းပါ။ သင့် Google Account တွင် စကားဝှက်များ သိမ်းပြီးပါက ၎င်းတို့ကို ဤနေရာတွင်မြင်ရရန် Chrome သို့ လက်မှတ်ထိုးဝင်ပြီး စင့်ခ်လုပ်ခြင်းကို ဖွင့်ပါ။</translation> <translation id="3378542047369517508">Chrome တွင် သင်သိမ်းထားသော စကားဝှက်အားလုံးကို ကြည့်ခွင့်ရယူပါ။ နှစ်သက်ရာအက်ပ်တွင်။ အချိန်မရွေး။</translation> <translation id="3660601625129812825">Chrome စကားဝှက်များ အော်တိုဖြည့်ခြင်း</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">စကားဝှက်များ သုံးရန်...</translation> +<translation id="5057732351953537135">မိတ္တူကူးရန်</translation> <translation id="5178539339249989017">ရှာဖွေမှု ရလဒ်များ မရှိပါ</translation> <translation id="5313485577007399362">အော်တိုဖြည့် ဖွင့်ရန်...</translation> +<translation id="6299043380422084998">စကားဝှက်</translation> <translation id="6494101196118320406">Chrome စကားဝှက်များ မရှိပါ</translation> +<translation id="6796761605222685491">စကားဝှက်ကို မိတ္တူကူးထားသည်</translation> <translation id="6846906712230932330">စကားဝှက်များသုံးရန် သင့်စက်တွင် လျှို့ဝှက်ကုဒ်တစ်ခုကို ဦးစွာ သတ်မှတ်ရပါမည်။</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Chrome စကားဝှက်များ မရှိပါ</translation> <translation id="8208791657167738630">စကားဝှက်အားလုံး</translation> +<translation id="8267303240703176873">အသုံးပြုသူအမည်</translation> <translation id="8602573493531049509">လုပ်ဆောင်ပုံ လေ့လာရန်</translation> +<translation id="862630654532726387">အသုံးပြုသူအမည်ကို မိတ္တူကူးထားသည်</translation> <translation id="8982444110803529242">အကြံပြုထားသော စကားဝှက်များ</translation> <translation id="9087836967653912639">ပယ်ရန်</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb index 48ef3b4..05d93a7 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="nl"> <translation id="1211920912879022906">Je bent onlangs uitgelogd van je Google-account. Hierdoor zijn je gesynchroniseerde wachtwoorden verwijderd. Log in bij Chrome en schakel synchronisatie in om de wachtwoorden hier weer te geven.</translation> +<translation id="2034355755416337795">URL gekopieerd</translation> <translation id="2488806977964805203">Een toegangscode instellen</translation> <translation id="2492201814011227831">Sla eerst een aantal wachtwoorden op in Chrome. Als je al wachtwoorden hebt opgeslagen in je Google-account, log je in bij Chrome en schakel je synchronisatie in om de wachtwoorden hier weer te geven.</translation> <translation id="3378542047369517508">Krijg toegang tot alle wachtwoorden die je in Chrome hebt opgeslagen, in elke app en op elk moment.</translation> <translation id="3660601625129812825">Chrome-wachtwoorden automatisch aanvullen</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Toegang krijgen tot wachtwoorden...</translation> +<translation id="5057732351953537135">Kopiëren</translation> <translation id="5178539339249989017">Geen zoekresultaten gevonden</translation> <translation id="5313485577007399362">Automatisch aanvullen inschakelen…</translation> +<translation id="6299043380422084998">Wachtwoord</translation> <translation id="6494101196118320406">Geen Chrome-wachtwoorden</translation> +<translation id="6796761605222685491">Wachtwoord gekopieerd</translation> <translation id="6846906712230932330">Als je wachtwoorden wilt exporteren, moet je eerst een toegangscode instellen op je apparaat.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Geen Chrome-wachtwoorden</translation> <translation id="8208791657167738630">Alle wachtwoorden</translation> +<translation id="8267303240703176873">Gebruikersnaam</translation> <translation id="8602573493531049509">Meer informatie</translation> +<translation id="862630654532726387">Gebruikersnaam gekopieerd</translation> <translation id="8982444110803529242">Voorgestelde wachtwoorden</translation> <translation id="9087836967653912639">Annuleren</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb index daa256a..3f51fc00 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="no"> <translation id="1211920912879022906">Du har nylig logget av Google-kontoen din, så de synkroniserte passordene dine er fjernet. Logg på Chrome og slå på synkronisering for å se dem her.</translation> +<translation id="2034355755416337795">Nettadressen ble kopiert</translation> <translation id="2488806977964805203">Angi en adgangskode</translation> <translation id="2492201814011227831">Lagre noen passord i Chrome for å komme i gang. Hvis du allerede har lagrede passord i Google-kontoen din, logger du på Chrome og slår på synkronisering for å se dem her.</translation> <translation id="3378542047369517508">Få tilgang til alle passordene du lagrer i Chrome. I alle apper. Når som helst.</translation> <translation id="3660601625129812825">Autofyll Chrome-passord</translation> +<translation id="3890063218104739480">Nettadresse</translation> <translation id="4695654165345019650">Få tilgang til passord</translation> +<translation id="5057732351953537135">Kopiér</translation> <translation id="5178539339249989017">Søket ga ingen treff</translation> <translation id="5313485577007399362">Aktiver Autofyll</translation> +<translation id="6299043380422084998">Passord</translation> <translation id="6494101196118320406">Ingen Chrome-passord</translation> +<translation id="6796761605222685491">Passordet ble kopiert</translation> <translation id="6846906712230932330">For å bruke passordene må du først angi en adgangskode på enheten din.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Ingen Chrome-passord</translation> <translation id="8208791657167738630">Alle passord</translation> +<translation id="8267303240703176873">Brukernavn</translation> <translation id="8602573493531049509">Finn ut hvordan</translation> +<translation id="862630654532726387">Brukernavnet ble kopiert</translation> <translation id="8982444110803529242">Foreslåtte passord</translation> <translation id="9087836967653912639">Avbryt</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb index 013bd7c6..47cbc38 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="pl"> <translation id="1211920912879022906">Niedawno nastąpiło wylogowanie z konta Google, dlatego Twoje zsynchronizowane hasła zostały usunięte. Aby je tu zobaczyć, zaloguj się w Chrome i włącz synchronizację.</translation> +<translation id="2034355755416337795">URL został skopiowany</translation> <translation id="2488806977964805203">Ustaw kod dostępu</translation> <translation id="2492201814011227831">Na początek zapisz w Chrome jakieś hasła. Jeśli masz już zapisane hasła na koncie Google, zaloguj się w Chrome i włącz synchronizację, by je tu zobaczyć.</translation> <translation id="3378542047369517508">Korzystaj ze wszystkich haseł zapisanych w Chrome – w dowolnej aplikacji i w dowolnym momencie.</translation> <translation id="3660601625129812825">Wypełniaj hasła w Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Dostęp do haseł…</translation> +<translation id="5057732351953537135">Kopiuj</translation> <translation id="5178539339249989017">Brak wyników wyszukiwania</translation> <translation id="5313485577007399362">Włącz Wypełnianie…</translation> +<translation id="6299043380422084998">Hasło</translation> <translation id="6494101196118320406">Brak haseł w Chrome</translation> +<translation id="6796761605222685491">Hasło zostało skopiowane</translation> <translation id="6846906712230932330">Aby użyć haseł, musisz najpierw ustawić kod dostępu na urządzeniu.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Brak haseł w Chrome</translation> <translation id="8208791657167738630">Wszystkie hasła</translation> +<translation id="8267303240703176873">Nazwa użytkownika</translation> <translation id="8602573493531049509">Instrukcje</translation> +<translation id="862630654532726387">Nazwa użytkownika została skopiowana</translation> <translation id="8982444110803529242">Sugerowane hasła</translation> <translation id="9087836967653912639">Anuluj</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb index b13c698..94e9727 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="pt-BR"> <translation id="1211920912879022906">Você saiu da Conta do Google recentemente. Por isso, suas senhas sincronizadas foram removidas. Faça login no Chrome e ative a sincronização para vê-las aqui.</translation> +<translation id="2034355755416337795">O URL foi copiado</translation> <translation id="2488806977964805203">Defina uma senha</translation> <translation id="2492201814011227831">Salve algumas senhas no Chrome para começar. Se você já tem senhas armazenadas na Conta do Google, faça login no Chrome e ative a sincronização para vê-las aqui.</translation> <translation id="3378542047369517508">Tenha acesso a todas as senhas que você salvou no Chrome. Em qualquer app, sempre que quiser.</translation> <translation id="3660601625129812825">Preenchimento automático de senhas do Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Acessar senhas…</translation> +<translation id="5057732351953537135">Copiar</translation> <translation id="5178539339249989017">Nenhum resultado da pesquisa encontrado</translation> <translation id="5313485577007399362">Ativar o preenchimento automático…</translation> +<translation id="6299043380422084998">Senha</translation> <translation id="6494101196118320406">Não há nenhuma senha no Chrome</translation> +<translation id="6796761605222685491">A senha foi copiada</translation> <translation id="6846906712230932330">Para usar senhas, defina uma no dispositivo primeiro.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Não há nenhuma senha no Chrome</translation> <translation id="8208791657167738630">Todas as senhas</translation> +<translation id="8267303240703176873">Nome de usuário</translation> <translation id="8602573493531049509">Saiba como</translation> +<translation id="862630654532726387">O nome de usuário foi copiado</translation> <translation id="8982444110803529242">Senhas sugeridas</translation> <translation id="9087836967653912639">Cancelar</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-PT.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-PT.xtb index 486daf95..31fd5081 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-PT.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-PT.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="pt-PT"> <translation id="1211920912879022906">Recentemente, terminou sessão na sua Conta Google, o que removeu as suas palavras-passe sincronizadas. Inicie sessão no Chrome e ative a sincronização para as ver aqui.</translation> +<translation id="2034355755416337795">O URL foi copiado.</translation> <translation id="2488806977964805203">Defina um código secreto</translation> <translation id="2492201814011227831">Guarde algumas palavras-passe no Chrome para começar. Se já tiver palavras-passe armazenadas na sua Conta Google, inicie sessão no Chrome e ative a sincronização para as ver aqui.</translation> <translation id="3378542047369517508">Obtenha acesso a todas as palavras-passe que guardar no Chrome. Em qualquer app. Em qualquer altura.</translation> <translation id="3660601625129812825">Preenchimento automático de palavras-passe do Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">A aceder a palavras-passe…</translation> +<translation id="5057732351953537135">Copiar</translation> <translation id="5178539339249989017">Não foram encontrados resultados da pesquisa.</translation> <translation id="5313485577007399362">Ativar preenchimento automático…</translation> +<translation id="6299043380422084998">Palavra-passe</translation> <translation id="6494101196118320406">Sem palavras-passe do Chrome</translation> +<translation id="6796761605222685491">A palavra-passe foi copiada.</translation> <translation id="6846906712230932330">Para utilizar palavras-passe, tem de definir primeiro um código secreto no dispositivo.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Sem palavras-passe do Chrome</translation> <translation id="8208791657167738630">Todas as palavras-passe</translation> +<translation id="8267303240703176873">Nome de utilizador</translation> <translation id="8602573493531049509">Saber como</translation> +<translation id="862630654532726387">O nome de utilizador foi copiado.</translation> <translation id="8982444110803529242">Palavras-passe sugeridas</translation> <translation id="9087836967653912639">Cancelar</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb index 93fa861..ae91b13 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="ro"> <translation id="1211920912879022906">Deoarece te-ai deconectat recent de la Contul Google, au fost eliminate parolele sincronizate. Conectează-te la Chrome și activează sincronizarea ca să le vezi aici.</translation> +<translation id="2034355755416337795">Adresa URL a fost copiată</translation> <translation id="2488806977964805203">Setează o parolă</translation> <translation id="2492201814011227831">Pentru început, salvează câteva parole în Chrome. Dacă ai stocat deja parole în Contul Google, conectează-te la Chrome și activează sincronizarea ca să le vezi aici.</translation> <translation id="3378542047369517508">Obține acces la toate parolele pe care le salvezi în Chrome. În orice aplicație. Oricând.</translation> <translation id="3660601625129812825">Completează automat parolele Chrome</translation> +<translation id="3890063218104739480">Adresă URL</translation> <translation id="4695654165345019650">Accesează parolele...</translation> +<translation id="5057732351953537135">Copiază</translation> <translation id="5178539339249989017">Nu s-au găsit rezultate de căutare</translation> <translation id="5313485577007399362">Activează completarea automată...</translation> +<translation id="6299043380422084998">Parolă</translation> <translation id="6494101196118320406">Nu există parole în Chrome</translation> +<translation id="6796761605222685491">Parola a fost copiată</translation> <translation id="6846906712230932330">Pentru a folosi parolele, trebuie mai întâi să setezi o parolă pe dispozitiv.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Nu există parole în Chrome</translation> <translation id="8208791657167738630">Toate parolele</translation> +<translation id="8267303240703176873">Nume de utilizator</translation> <translation id="8602573493531049509">Află cum</translation> +<translation id="862630654532726387">Numele de utilizator a fost copiat</translation> <translation id="8982444110803529242">Parole sugerate</translation> <translation id="9087836967653912639">Anulează</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb index 44e4b54..6d48787 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="ru"> <translation id="1211920912879022906">Вы недавно вышли из своего аккаунта Google, в результате чего ваши синхронизированные пароли были удалены. Чтобы они появились здесь, войдите в Chrome и включите синхронизацию.</translation> +<translation id="2034355755416337795">URL скопирован.</translation> <translation id="2488806977964805203">Установите код доступа</translation> <translation id="2492201814011227831">Для начала сохраните несколько паролей в Chrome. В вашем аккаунте Google уже есть сохраненные пароли? Чтобы они появились здесь, войдите в Chrome и включите синхронизацию.</translation> <translation id="3378542047369517508">Вы сможете использовать сохраненные в Chrome пароли в любом приложении.</translation> <translation id="3660601625129812825">Автозаполнение паролей Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Доступ к паролям…</translation> +<translation id="5057732351953537135">Копировать</translation> <translation id="5178539339249989017">Ничего не найдено.</translation> <translation id="5313485577007399362">Включить автозаполнение</translation> +<translation id="6299043380422084998">Пароль</translation> <translation id="6494101196118320406">Нет паролей Chrome</translation> +<translation id="6796761605222685491">Пароль скопирован.</translation> <translation id="6846906712230932330">Чтобы использовать пароли, установите на устройстве код доступа.</translation> <translation id="6965382102122355670">ОК</translation> <translation id="7870350829250847712">Нет паролей Chrome</translation> <translation id="8208791657167738630">Все пароли</translation> +<translation id="8267303240703176873">Имя пользователя</translation> <translation id="8602573493531049509">Подробнее</translation> +<translation id="862630654532726387">Имя пользователя скопировано.</translation> <translation id="8982444110803529242">Рекомендуемые пароли</translation> <translation id="9087836967653912639">Отмена</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_si.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_si.xtb index 8a68f1a..e8647b44 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_si.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_si.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="si"> <translation id="1211920912879022906">ඔබ මෑත දී ඔබේ Google ගිණුමෙන් වැරුණා, එය ඔබේ සමමුහූර්ත කළ මුරපද ඉවත් කළා. ඒවා මෙහි බැලීමට Chrome වෙත පුරනය වී සමමුහූර්තය සක්රීය කරන්න.</translation> +<translation id="2034355755416337795">URL පිටපත් කළා</translation> <translation id="2488806977964805203">මුරකේතයක් සකසන්න</translation> <translation id="2492201814011227831">පටන් ගැනීමට Chrome තුළ සමහර මුරපද සුරකින්න. ඔබ දැනටමත් ඔබේ Google ගිණුම තුළ මුරපද ගබඩා කර ඇති නම්, ඒවා මෙහි බැලීමට Chrome වෙත පුරනය වී සමමුහූර්තකය සක්රීය කරන්න.</translation> <translation id="3378542047369517508">ඔබ Chrome තුළ සුරකින සියලුම මුරපද වෙත ප්රවේශය ලබා ගන්න. ඕනෑම යෙදුමක් තුළ. ඕනෑම වේලාවක.</translation> <translation id="3660601625129812825">AutoFill Chrome මුරපද</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">මුරපද වෙත ප්රවේශ වන්න...</translation> +<translation id="5057732351953537135">පිටපත් කරන්න</translation> <translation id="5178539339249989017">සෙවීම් ප්රතිඵල හමු නොවිණි</translation> <translation id="5313485577007399362">AutoFill සබල කරන්න...</translation> +<translation id="6299043380422084998">මුරපදය</translation> <translation id="6494101196118320406">Chrome මුරපද නැත</translation> +<translation id="6796761605222685491">මුරපදය පිටපත් කළා</translation> <translation id="6846906712230932330">මුරපද භාවිත කිරීමට, ඔබ ප්රථමයෙන් ඔබේ උපාංගයේ මුරකේතයක් සැකසිය යුතුය.</translation> <translation id="6965382102122355670">හරි</translation> <translation id="7870350829250847712">Chrome මුරපද නැත</translation> <translation id="8208791657167738630">සියලු මුරපද</translation> +<translation id="8267303240703176873">පරිශීලක නාමය</translation> <translation id="8602573493531049509">කෙසේදැයි දැන ගන්න</translation> +<translation id="862630654532726387">පරිශීලක නාමය පිටපත් කළා</translation> <translation id="8982444110803529242">යෝජිත මුරපද</translation> <translation id="9087836967653912639">අවලංගු කරන්න</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb index ca9b8f3..a35eb2d 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="sl"> <translation id="1211920912879022906">Nedavno ste se odjavili iz računa Google, s čimer so bila odstranjena sinhronizirana gesla. Prijavite se v Chrome, če želite vklopiti sinhronizacijo in si jih ogledati tam.</translation> +<translation id="2034355755416337795">URL je bil kopiran</translation> <translation id="2488806977964805203">Nastavitev gesla</translation> <translation id="2492201814011227831">Shranite nekatera gesla v Chromu, če želite začeti. Če imate v računu Google že shranjena gesla, se prijavite v Chrome in vklopite sinhronizacijo, če si jih želite ogledati tam.</translation> <translation id="3378542047369517508">Imejte dostop do vseh gesel, ki jih shranite v Chromu. V kateri koli aplikaciji. Kadar koli.</translation> <translation id="3660601625129812825">Samodejno izpolnjevanje gesel v Chromu</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Dostop do gesel …</translation> +<translation id="5057732351953537135">Kopiraj</translation> <translation id="5178539339249989017">Ni rezultatov iskanja</translation> <translation id="5313485577007399362">Omogoči samodejno izpolnjevanje …</translation> +<translation id="6299043380422084998">Geslo</translation> <translation id="6494101196118320406">Ni gesel v Chromu</translation> +<translation id="6796761605222685491">Geslo je bilo kopirano</translation> <translation id="6846906712230932330">Če želite uporabiti gesla, morate najprej nastaviti geslo v napravi.</translation> <translation id="6965382102122355670">V redu</translation> <translation id="7870350829250847712">Ni gesel v Chromu</translation> <translation id="8208791657167738630">Vsa gesla</translation> +<translation id="8267303240703176873">Uporabniško ime</translation> <translation id="8602573493531049509">Več o tem</translation> +<translation id="862630654532726387">Uporabniško ime je bilo kopirano</translation> <translation id="8982444110803529242">Predlagana gesla</translation> <translation id="9087836967653912639">Prekliči</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb index 01ae40d..ded90a2 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="sv"> <translation id="1211920912879022906">Du har nyligen loggat ut från Google-kontot. Samtidigt togs dina synkroniserade lösenord bort. Logga in i Chrome och aktivera synkronisering för att se dem här.</translation> +<translation id="2034355755416337795">Webbadressen har kopierats</translation> <translation id="2488806977964805203">Ställ in ett lösenord</translation> <translation id="2492201814011227831">Spara några lösenord i Chrome för att komma igång. Om du redan har sparat lösenord i Google-kontot visas de här om du loggar in i Chrome och aktiverar synkronisering.</translation> <translation id="3378542047369517508">Få tillgång till alla lösenord du har sparat i Chrome – när som helst, i vilken app som helst.</translation> <translation id="3660601625129812825">Autofyll lösenord i Chrome</translation> +<translation id="3890063218104739480">Webbadress</translation> <translation id="4695654165345019650">Åtkomst till lösenord …</translation> +<translation id="5057732351953537135">Kopiera</translation> <translation id="5178539339249989017">Inga sökresultat hittades</translation> <translation id="5313485577007399362">Aktivera Autofyll …</translation> +<translation id="6299043380422084998">Lösenord</translation> <translation id="6494101196118320406">Inga lösenord i Chrome</translation> +<translation id="6796761605222685491">Lösenordet har kopierats</translation> <translation id="6846906712230932330">Du måste ställa in ett lösenord på enheten innan du kan använda lösenord här.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Inga lösenord i Chrome</translation> <translation id="8208791657167738630">Alla lösenord</translation> +<translation id="8267303240703176873">Användarnamn</translation> <translation id="8602573493531049509">Läs mer</translation> +<translation id="862630654532726387">Användarnamnet har kopierats</translation> <translation id="8982444110803529242">Föreslagna lösenord</translation> <translation id="9087836967653912639">Avbryt</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb index f489c68..bf65183 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="sw"> <translation id="1211920912879022906">Uliondoka kwenye Akaunti yako ya Google hivi majuzi, hatua ambayo iliondoa manenosiri yako yaliyosawazishwa. Ingia katika akaunti ya Chrome na uwashe usawazishaji ili uyaone hapa.</translation> +<translation id="2034355755416337795">URL imenakiliwa</translation> <translation id="2488806977964805203">Weka Nambari ya Siri</translation> <translation id="2492201814011227831">Hifadhi baadhi ya manenosiri kwenye Chrome ili uanze. Iwapo tayari umehifadhi manenosiri kwenye Akaunti yako ya Google, ingia katika akaunti ya Chrome na uwashe kipengele cha kusawazisha ili uyaone hapa.</translation> <translation id="3378542047369517508">Pata uwezo wa kufikia manenosiri yote unayohifadhi kwenye Chrome. Kwenye programu yoyote. Wakati wowote.</translation> <translation id="3660601625129812825">Jaza Kiotomatiki Manenosiri ya Chrome</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Fikia Manenosiri...</translation> +<translation id="5057732351953537135">Nakili</translation> <translation id="5178539339249989017">Hakuna matokeo ya utafutaji yaliyopatikana</translation> <translation id="5313485577007399362">Washa Kipengele cha Kujaza Kiotomatiki...</translation> +<translation id="6299043380422084998">Nenosiri</translation> <translation id="6494101196118320406">Hamna Manenosiri ya Chrome</translation> +<translation id="6796761605222685491">Nenosiri limenakiliwa</translation> <translation id="6846906712230932330">Ili utumie manenosiri, ni lazima kwanza uweke nambari ya siri kwenye kifaa chako.</translation> <translation id="6965382102122355670">Sawa</translation> <translation id="7870350829250847712">Hamna Manenosiri ya Chrome</translation> <translation id="8208791657167738630">Manenosiri Yote</translation> +<translation id="8267303240703176873">Jina la mtumiaji</translation> <translation id="8602573493531049509">Pata Maelezo Zaidi</translation> +<translation id="862630654532726387">Jina la mtumiaji limenakiliwa</translation> <translation id="8982444110803529242">Manenosiri Yanayopendekezwa</translation> <translation id="9087836967653912639">Ghairi</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_th.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_th.xtb index 200fffd..e813863f 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_th.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_th.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="th"> <translation id="1211920912879022906">คุณเพิ่งออกจากระบบบัญชี Google ระบบจึงนำรหัสผ่านที่ซิงค์ออก ลงชื่อเข้าใช้ Chrome แล้วเปิดการซิงค์เพื่อดูรหัสผ่านที่นี่</translation> +<translation id="2034355755416337795">คัดลอก URL แล้ว</translation> <translation id="2488806977964805203">ตั้งรหัสผ่าน</translation> <translation id="2492201814011227831">บันทึกรหัสผ่านใน Chrome เพื่อเริ่มต้นใช้งาน หากคุณมีรหัสผ่านที่จัดเก็บไว้ในบัญชี Google อยู่แล้ว ให้ลงชื่อเข้าใช้ Chrome แล้วเปิดการซิงค์เพื่อดูรหัสผ่านที่นี่</translation> <translation id="3378542047369517508">เข้าถึงรหัสผ่านทั้งหมดที่คุณบันทึกไว้ใน Chrome ได้ทุกเมื่อจากทุกๆ แอป</translation> <translation id="3660601625129812825">ป้อนรหัสผ่านของ Chrome โดยอัตโนมัติ</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">เข้าถึงรหัสผ่าน...</translation> +<translation id="5057732351953537135">คัดลอก</translation> <translation id="5178539339249989017">ไม่พบผลการค้นหา</translation> <translation id="5313485577007399362">เปิดใช้การป้อนข้อความอัตโนมัติ...</translation> +<translation id="6299043380422084998">รหัสผ่าน</translation> <translation id="6494101196118320406">ไม่มีรหัสผ่านของ Chrome</translation> +<translation id="6796761605222685491">คัดลอกรหัสผ่านแล้ว</translation> <translation id="6846906712230932330">หากต้องการใช้รหัสผ่าน คุณต้องตั้งรหัสผ่านในอุปกรณ์ก่อน</translation> <translation id="6965382102122355670">ตกลง</translation> <translation id="7870350829250847712">ไม่มีรหัสผ่านของ Chrome</translation> <translation id="8208791657167738630">รหัสผ่านทั้งหมด</translation> +<translation id="8267303240703176873">ชื่อผู้ใช้</translation> <translation id="8602573493531049509">ดูวิธี</translation> +<translation id="862630654532726387">คัดลอกชื่อผู้ใช้แล้ว</translation> <translation id="8982444110803529242">รหัสผ่านแนะนำ</translation> <translation id="9087836967653912639">ยกเลิก</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb index 678eb22..bca5e18 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="tr"> <translation id="1211920912879022906">Kısa süre önce Google Hesabınızın oturumunu kapattığınızdan senkronize edilen şifreleriniz kaldırıldı. Chrome'da oturum açıp senkronizasyonu etkinleştirerek söz konusu şifreleri burada görebilirsiniz.</translation> +<translation id="2034355755416337795">URL kopyalandı</translation> <translation id="2488806977964805203">Şifre Kodu Ayarlayın</translation> <translation id="2492201814011227831">Başlamak için Chrome'a birkaç şifre kaydedin. Halihazırda Google Hesabınızda kayıtlı şifreleriniz varsa Chrome'da oturum açıp senkronizasyonu etkinleştirerek onları burada görebilirsiniz.</translation> <translation id="3378542047369517508">Chrome'da kaydettiğiniz tüm şifrelere erişim elde edin. Tüm uygulamalarda. Her zaman.</translation> <translation id="3660601625129812825">Otomatik Doldurma Chrome Şifreleri</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Erişim Şifreleri...</translation> +<translation id="5057732351953537135">Kopyala</translation> <translation id="5178539339249989017">Arama sonucu bulunamadı</translation> <translation id="5313485577007399362">Otomatik Doldurmayı Etkinleştir...</translation> +<translation id="6299043380422084998">Şifre</translation> <translation id="6494101196118320406">Chrome Şifresi Yok</translation> +<translation id="6796761605222685491">Şifre kopyalandı</translation> <translation id="6846906712230932330">Şifreleri kullanmak için öncelikle cihazınızda bir şifre kodu ayarlamanız gerekir.</translation> <translation id="6965382102122355670">Tamam</translation> <translation id="7870350829250847712">Chrome Şifresi Yok</translation> <translation id="8208791657167738630">Tüm Şifreler</translation> +<translation id="8267303240703176873">Kullanıcı adı</translation> <translation id="8602573493531049509">Nasıl Yapacağınızı Öğrenin</translation> +<translation id="862630654532726387">Kullanıcı adı kopyalandı</translation> <translation id="8982444110803529242">Önerilen Şifreler</translation> <translation id="9087836967653912639">İptal</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb index 2636f82..1bf82560 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="uk"> <translation id="1211920912879022906">Нещодавно ви вийшли з облікового запису Google, через що ваші синхронізовані паролі було видалено. Увійдіть у Chrome і ввімкніть синхронізацію, щоб бачити їх тут.</translation> +<translation id="2034355755416337795">URL-адресу скопійовано</translation> <translation id="2488806977964805203">Налаштуйте код доступу</translation> <translation id="2492201814011227831">Щоб почати, збережіть кілька паролів у Chrome. Якщо ви вже зберігаєте паролі в обліковому записі Google, увійдіть у Chrome і ввімкніть синхронізацію, щоб побачити їх тут.</translation> <translation id="3378542047369517508">Доступ до всіх паролів, які ви зберегли в Chrome. У будь-якому додатку. Будь-коли.</translation> <translation id="3660601625129812825">Aвтоматично заповнювати паролі в Chrome</translation> +<translation id="3890063218104739480">URL-адреса</translation> <translation id="4695654165345019650">Паролі доступу…</translation> +<translation id="5057732351953537135">Копіювати</translation> <translation id="5178539339249989017">Немає результатів пошуку</translation> <translation id="5313485577007399362">Увімкнути автозаповнення…</translation> +<translation id="6299043380422084998">Пароль</translation> <translation id="6494101196118320406">Немає паролів Chrome</translation> +<translation id="6796761605222685491">Пароль скопійовано</translation> <translation id="6846906712230932330">Щоб використовувати паролі, спершу потрібно налаштувати код доступу на пристрої.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Немає паролів Chrome</translation> <translation id="8208791657167738630">Усі паролі</translation> +<translation id="8267303240703176873">Ім'я користувача</translation> <translation id="8602573493531049509">Докладніше</translation> +<translation id="862630654532726387">Ім'я користувача скопійовано</translation> <translation id="8982444110803529242">Пропоновані паролі</translation> <translation id="9087836967653912639">Скасувати</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uz.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uz.xtb index 58e07de..5d2e809f 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uz.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uz.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="uz"> <translation id="1211920912879022906">Yaqinda Google hisobingizdan chiqib ketdingiz va sinxronlangan parollaringiz olib tashlandi. Chrome hisobingizga kiring va sinxronizatsiyani yoqib, ularni shu yerda koʻrishingiz mumkin.</translation> +<translation id="2034355755416337795">URL manzil nusxalandi</translation> <translation id="2488806977964805203">Maxfiy kodni belgilang</translation> <translation id="2492201814011227831">Ishni boshlash uchun Chrome ichiga bir-ikkita parolni saqlang. Agar Google hisobingizda parollar allaqachon saqlangan boʻlsa, Chrome hisobingizga kiring va sinxronizatsiyani yoqib, ularni shu yerda koʻrishingiz mumkin.</translation> <translation id="3378542047369517508">Chromeda saqlangan parollaringizdan istalgan joyda foydalaning. Istalgan ilovada, istalgan vaqtda.</translation> <translation id="3660601625129812825">Chrome parollarning avtomatik kiritilishi</translation> +<translation id="3890063218104739480">URL</translation> <translation id="4695654165345019650">Parollarga ruxsat...</translation> +<translation id="5057732351953537135">Nusxalash</translation> <translation id="5178539339249989017">Qidiruv hech qanday natija bermadi</translation> <translation id="5313485577007399362">Avtomatik kiritish funksiyasini yoqish...</translation> +<translation id="6299043380422084998">Parol</translation> <translation id="6494101196118320406">Hech qanday Chrome paroli topilmadi</translation> +<translation id="6796761605222685491">Parol nusxalandi</translation> <translation id="6846906712230932330">Parollarni ishlatish uchun qurilmangizni maxfiy kod bilan qulflang.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Hech qanday Chrome paroli topilmadi</translation> <translation id="8208791657167738630">Barcha parollar</translation> +<translation id="8267303240703176873">Foydalanuvchi nomi</translation> <translation id="8602573493531049509">Batafsil axborot</translation> +<translation id="862630654532726387">Foydalanuvchi nomi nusxalandi</translation> <translation id="8982444110803529242">Tavsiya etilgan parollar</translation> <translation id="9087836967653912639">Bekor qilish</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb index ba6942dea..a80cc1ac 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="zh-HK"> <translation id="1211920912879022906">您最近登出了 Google 帳戶,因此已同步處理的密碼已被移除。請登入 Chrome 並開啟同步功能,密碼便會在這裡顯示。</translation> +<translation id="2034355755416337795">已複製網址</translation> <translation id="2488806977964805203">設定密碼</translation> <translation id="2492201814011227831">在 Chrome 中儲存一些密碼即可開始使用。如果您已在 Google 帳戶中儲存密碼,請登入 Chrome 並啟用同步功能,密碼便會在這裡顯示。</translation> <translation id="3378542047369517508">隨時存取在 Chrome 中儲存的所有密碼,且在任何應用程式中都能存取。</translation> <translation id="3660601625129812825">自動填入 Chrome 密碼</translation> +<translation id="3890063218104739480">網址</translation> <translation id="4695654165345019650">存取密碼…</translation> +<translation id="5057732351953537135">複製</translation> <translation id="5178539339249989017">找不到任何搜尋結果</translation> <translation id="5313485577007399362">啟用自動填入功能…</translation> +<translation id="6299043380422084998">密碼</translation> <translation id="6494101196118320406">沒有 Chrome 密碼</translation> +<translation id="6796761605222685491">已複製密碼</translation> <translation id="6846906712230932330">如要使用密碼,您必須先在裝置上設定密碼。</translation> <translation id="6965382102122355670">確定</translation> <translation id="7870350829250847712">沒有 Chrome 密碼</translation> <translation id="8208791657167738630">所有密碼</translation> +<translation id="8267303240703176873">使用者名稱</translation> <translation id="8602573493531049509">瞭解詳情</translation> +<translation id="862630654532726387">已複製使用者名稱</translation> <translation id="8982444110803529242">建議的密碼</translation> <translation id="9087836967653912639">取消</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb index a85b1f7..b6503c3 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb
@@ -2,19 +2,26 @@ <!DOCTYPE translationbundle> <translationbundle lang="zh-TW"> <translation id="1211920912879022906">你最近登出了 Google 帳戶,因此已同步處理的密碼遭到移除。請登入 Chrome 並啟用同步功能,即可在這裡查看密碼。</translation> +<translation id="2034355755416337795">已複製網址</translation> <translation id="2488806977964805203">請設定通行碼</translation> <translation id="2492201814011227831">在 Chrome 中儲存一些密碼即可開始使用。如果你已在 Google 帳戶中儲存密碼,請登入 Chrome 並啟用同步功能,即可在這裡查看密碼。</translation> <translation id="3378542047369517508">隨時都能使用自己儲存在 Chrome 中的所有密碼 (適用於任何應用程式)。</translation> <translation id="3660601625129812825">自動填入 Chrome 密碼</translation> +<translation id="3890063218104739480">網址</translation> <translation id="4695654165345019650">存取密碼…</translation> +<translation id="5057732351953537135">複製</translation> <translation id="5178539339249989017">找不到相符的搜尋結果</translation> <translation id="5313485577007399362">啟用自動填入功能…</translation> +<translation id="6299043380422084998">密碼</translation> <translation id="6494101196118320406">沒有任何 Chrome 密碼</translation> +<translation id="6796761605222685491">已複製密碼</translation> <translation id="6846906712230932330">你必須先在裝置上設定通行碼才能使用密碼。</translation> <translation id="6965382102122355670">確定</translation> <translation id="7870350829250847712">沒有任何 Chrome 密碼</translation> <translation id="8208791657167738630">所有密碼</translation> +<translation id="8267303240703176873">使用者名稱</translation> <translation id="8602573493531049509">瞭解詳情</translation> +<translation id="862630654532726387">已複製使用者名稱</translation> <translation id="8982444110803529242">建議的密碼</translation> <translation id="9087836967653912639">取消</translation> </translationbundle> \ No newline at end of file
diff --git a/media/BUILD.gn b/media/BUILD.gn index 8ba5ec2c..eb3e095 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn
@@ -22,7 +22,6 @@ "CDM_PLATFORM_SPECIFIC_PATH=\"$cdm_platform_specific_path\"", "ENABLE_PLATFORM_AC3_EAC3_AUDIO=$enable_platform_ac3_eac3_audio", "ENABLE_CDM_HOST_VERIFICATION=$enable_cdm_host_verification", - "ENABLE_CDM_PROXY=$enable_cdm_proxy", "ENABLE_CDM_STORAGE_ID=$enable_cdm_storage_id", "ENABLE_DAV1D_DECODER=$enable_dav1d_decoder", "ENABLE_AV1_DECODER=$enable_av1_decoder",
diff --git a/media/base/cdm_context.cc b/media/base/cdm_context.cc index a09fb06..7c6bb15a 100644 --- a/media/base/cdm_context.cc +++ b/media/base/cdm_context.cc
@@ -29,12 +29,6 @@ return false; } -#if BUILDFLAG(ENABLE_LIBRARY_CDMS) -CdmProxyContext* CdmContext::GetCdmProxyContext() { - return nullptr; -} -#endif // BUILDFLAG(ENABLE_LIBRARY_CDMS) - #if defined(OS_ANDROID) MediaCryptoContext* CdmContext::GetMediaCryptoContext() { return nullptr;
diff --git a/media/base/cdm_context.h b/media/base/cdm_context.h index 53986b9..9b75b1f 100644 --- a/media/base/cdm_context.h +++ b/media/base/cdm_context.h
@@ -14,7 +14,6 @@ namespace media { class CallbackRegistration; -class CdmProxyContext; class Decryptor; class MediaCryptoContext; @@ -86,13 +85,6 @@ // TODO(crbug.com/804397): Use base::UnguessableToken for CDM ID. virtual int GetCdmId() const; -#if BUILDFLAG(ENABLE_LIBRARY_CDMS) - // Returns a CdmProxyContext that can be used by hardware decoders/decryptors. - // Returns nullptr if CdmProxyContext is not supported, e.g. |this| is not - // hosted by a CdmProxy. - virtual CdmProxyContext* GetCdmProxyContext(); -#endif // BUILDFLAG(ENABLE_LIBRARY_CDMS) - #if defined(OS_ANDROID) // Returns a MediaCryptoContext that can be used by MediaCodec based decoders. virtual MediaCryptoContext* GetMediaCryptoContext(); @@ -120,7 +112,7 @@ // A reference holder to make sure the CdmContext is always valid as long as // |this| is alive. Typically |this| will hold a reference (directly or -// indirectly) to the host, e.g. a ContentDecryptionModule or a CdmProxy. +// indirectly) to the host, e.g. a ContentDecryptionModule. // This class must be held on the same thread where the host lives. The raw // CdmContext pointer returned by GetCdmContext() may be used on other threads // if it's supported by the CdmContext implementation.
diff --git a/media/base/ipc/media_param_traits_macros.h b/media/base/ipc/media_param_traits_macros.h index 3e09669b..1eca0ed 100644 --- a/media/base/ipc/media_param_traits_macros.h +++ b/media/base/ipc/media_param_traits_macros.h
@@ -37,9 +37,6 @@ #include "media/base/video_types.h" #include "media/base/waiting.h" #include "media/base/watch_time_keys.h" -// TODO(crbug.com/676224): When EnabledIf attribute is supported in mojom files, -// move CdmProxy related code into #if BUILDFLAG(ENABLE_LIBRARY_CDMS). -#include "media/cdm/cdm_proxy.h" #include "media/media_buildflags.h" #include "media/video/supported_video_decoder_config.h" #include "ui/gfx/ipc/color/gfx_param_traits_macros.h" @@ -73,18 +70,6 @@ IPC_ENUM_TRAITS_MAX_VALUE(media::CdmPromise::Exception, media::CdmPromise::Exception::EXCEPTION_MAX) -IPC_ENUM_TRAITS_MAX_VALUE(media::CdmProxy::Function, - media::CdmProxy::Function::kMaxValue) - -IPC_ENUM_TRAITS_MAX_VALUE(media::CdmProxy::KeyType, - media::CdmProxy::KeyType::kMaxValue) - -IPC_ENUM_TRAITS_MAX_VALUE(media::CdmProxy::Protocol, - media::CdmProxy::Protocol::kMaxValue) - -IPC_ENUM_TRAITS_MAX_VALUE(media::CdmProxy::Status, - media::CdmProxy::Status::kMaxValue) - IPC_ENUM_TRAITS_MAX_VALUE(media::CdmSessionType, media::CdmSessionType::kMaxValue)
diff --git a/media/cdm/BUILD.gn b/media/cdm/BUILD.gn index 5ecddbe..806ce49 100644 --- a/media/cdm/BUILD.gn +++ b/media/cdm/BUILD.gn
@@ -78,14 +78,6 @@ "cdm_helpers.h", "cdm_module.cc", "cdm_module.h", - - # Not putting these under |enable_cdm_proxy| so we don't have to if/def - # every usage of CdmProxy base types, e.g. in CdmCapability. This also - # helps enable more tests. - "cdm_proxy.cc", - "cdm_proxy.h", - "cdm_proxy_context.cc", - "cdm_proxy_context.h", "cdm_type_conversion.cc", "cdm_type_conversion.h", "cdm_wrapper.h",
diff --git a/media/cdm/aes_decryptor.h b/media/cdm/aes_decryptor.h index f96e07a..640e0ad 100644 --- a/media/cdm/aes_decryptor.h +++ b/media/cdm/aes_decryptor.h
@@ -88,7 +88,6 @@ private: // Testing classes that needs to manipulate internal states for testing. friend class ClearKeyPersistentSessionCdm; - friend class ClearKeyCdmProxy; // Internally this class supports persistent license type sessions so that // it can be used by ClearKeyPersistentSessionCdm. The following methods
diff --git a/media/cdm/cdm_adapter.cc b/media/cdm/cdm_adapter.cc index 5ae3f92..df8f7ed 100644 --- a/media/cdm/cdm_adapter.cc +++ b/media/cdm/cdm_adapter.cc
@@ -413,29 +413,12 @@ Decryptor* CdmAdapter::GetDecryptor() { DCHECK(task_runner_->BelongsToCurrentThread()); - - // When using HW secure codecs, we cannot and should not use the CDM instance - // to do decrypt and/or decode. Instead, we should use the CdmProxy. - // TODO(xhwang): Fix External Clear Key key system to be able to set - // |use_hw_secure_codecs| so that we don't have to check both. - // TODO(xhwang): Update this logic to support transcryption. - if (cdm_config_.use_hw_secure_codecs || cdm_proxy_created_) { - DVLOG(2) << __func__ << ": GetDecryptor() returns null"; - return nullptr; - } - return this; } int CdmAdapter::GetCdmId() const { DCHECK(task_runner_->BelongsToCurrentThread()); -#if BUILDFLAG(ENABLE_CDM_PROXY) - int cdm_id = helper_->GetCdmProxyCdmId(); - DVLOG(2) << __func__ << ": cdm_id = " << cdm_id; - return cdm_id; -#else return CdmContext::kInvalidCdmId; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) } void CdmAdapter::RegisterNewKeyCB(StreamType stream_type, @@ -1070,22 +1053,7 @@ cdm::CdmProxy* CdmAdapter::RequestCdmProxy(cdm::CdmProxyClient* client) { DVLOG(3) << __func__; DCHECK(task_runner_->BelongsToCurrentThread()); - -#if BUILDFLAG(ENABLE_CDM_PROXY) - // CdmProxy should only be created once, at CDM initialization time. - if (cdm_proxy_created_ || - init_promise_id_ == CdmPromiseAdapter::kInvalidPromiseId) { - DVLOG(1) << __func__ - << ": CdmProxy can only be created once, and must be created " - "during CDM initialization."; - return nullptr; - } - - cdm_proxy_created_ = true; - return helper_->CreateCdmProxy(client); -#else return nullptr; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) } void CdmAdapter::OnStorageIdObtained(uint32_t version,
diff --git a/media/cdm/cdm_adapter.h b/media/cdm/cdm_adapter.h index b2ecdaa..f34493c 100644 --- a/media/cdm/cdm_adapter.h +++ b/media/cdm/cdm_adapter.h
@@ -259,8 +259,6 @@ int last_read_file_size_kb_ = 0; bool file_size_uma_reported_ = false; - bool cdm_proxy_created_ = false; - // Used to keep track of promises while the CDM is processing the request. CdmPromiseAdapter cdm_promise_adapter_;
diff --git a/media/cdm/cdm_adapter_unittest.cc b/media/cdm/cdm_adapter_unittest.cc index 193ac30..7cecd44 100644 --- a/media/cdm/cdm_adapter_unittest.cc +++ b/media/cdm/cdm_adapter_unittest.cc
@@ -558,13 +558,4 @@ EXPECT_TRUE(cdm_context->GetDecryptor()); } -TEST_P(CdmAdapterTestWithMockCdm, GetDecryptor_UseHwSecureCodecs) { - CdmConfig cdm_config; - cdm_config.use_hw_secure_codecs = true; - InitializeWithCdmConfig(cdm_config); - auto* cdm_context = cdm_->GetCdmContext(); - ASSERT_TRUE(cdm_context); - EXPECT_FALSE(cdm_context->GetDecryptor()); -} - } // namespace media
diff --git a/media/cdm/cdm_auxiliary_helper.cc b/media/cdm/cdm_auxiliary_helper.cc index c87d9a9..4d163e1 100644 --- a/media/cdm/cdm_auxiliary_helper.cc +++ b/media/cdm/cdm_auxiliary_helper.cc
@@ -18,16 +18,6 @@ return nullptr; } -#if BUILDFLAG(ENABLE_CDM_PROXY) -cdm::CdmProxy* CdmAuxiliaryHelper::CreateCdmProxy(cdm::CdmProxyClient* client) { - return nullptr; -} - -int CdmAuxiliaryHelper::GetCdmProxyCdmId() { - return CdmContext::kInvalidCdmId; -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - cdm::Buffer* CdmAuxiliaryHelper::CreateCdmBuffer(size_t capacity) { return nullptr; }
diff --git a/media/cdm/cdm_auxiliary_helper.h b/media/cdm/cdm_auxiliary_helper.h index 2ecf887..b6c8293 100644 --- a/media/cdm/cdm_auxiliary_helper.h +++ b/media/cdm/cdm_auxiliary_helper.h
@@ -21,8 +21,6 @@ namespace cdm { class FileIO; class FileIOClient; -class CdmProxy; -class CdmProxyClient; } // namespace cdm namespace media { @@ -48,18 +46,6 @@ // needed anymore. virtual cdm::FileIO* CreateCdmFileIO(cdm::FileIOClient* client); -#if BUILDFLAG(ENABLE_CDM_PROXY) - // Creates a cdm::CdmProxy object and returns it. - // The caller does not own the returned object and should not delete it - // directly. Instead, it should call cdm::CdmProxy::Destroy() after it's not - // needed anymore. - virtual cdm::CdmProxy* CreateCdmProxy(cdm::CdmProxyClient* client); - - // Returns a CDM ID associated with the last returned CdmProxy. Should only - // be called after the CdmProxy has been initialized. - virtual int GetCdmProxyCdmId(); -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - // CdmAllocator implementation. cdm::Buffer* CreateCdmBuffer(size_t capacity) override; std::unique_ptr<VideoFrameImpl> CreateCdmVideoFrame() override;
diff --git a/media/cdm/cdm_proxy.cc b/media/cdm/cdm_proxy.cc deleted file mode 100644 index 3106351..0000000 --- a/media/cdm/cdm_proxy.cc +++ /dev/null
@@ -1,14 +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 "media/cdm/cdm_proxy.h" - -namespace media { - -CdmProxy::Client::Client() = default; -CdmProxy::Client::~Client() = default; -CdmProxy::CdmProxy() = default; -CdmProxy::~CdmProxy() = default; - -} // namespace media
diff --git a/media/cdm/cdm_proxy.h b/media/cdm/cdm_proxy.h deleted file mode 100644 index 6d908e0..0000000 --- a/media/cdm/cdm_proxy.h +++ /dev/null
@@ -1,160 +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 MEDIA_CDM_CDM_PROXY_H_ -#define MEDIA_CDM_CDM_PROXY_H_ - -#include <stdint.h> - -#include <memory> -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/memory/weak_ptr.h" -#include "media/base/cdm_context.h" -#include "media/base/media_export.h" - -namespace base { -class Token; -} - -namespace media { - -// A class that proxies part of ContentDecryptionModule (CDM) functionalities to -// a different entity, e.g. hardware CDM modules. -// In general, the interpretation of the method and callback parameters are -// protocol dependent. For enum parameters, values outside the enum range may -// not work. -class MEDIA_EXPORT CdmProxy { - public: - // Client of the proxy. - class MEDIA_EXPORT Client { - public: - Client(); - virtual ~Client(); - - // Called when there is a hardware reset. When hardware reset happens, all - // the hardware context is lost and all crypto sessions are destroyed. The - // CdmProxy returns to an uninitialized state and the caller must call - // Initialize() on the CdmProxy again to be able to continue using it. - virtual void NotifyHardwareReset() = 0; - }; - - enum class Status { - kOk, - kFail, - kMaxValue = kFail, - }; - - enum class Protocol { - // No supported protocol. Used in failure cases. - kNone, - // Method using Intel CSME. - kIntel, - // There will be more values in the future e.g. kD3D11RsaHardware, - // kD3D11RsaSoftware to use the D3D11 RSA method. - kMaxValue = kIntel, - }; - - enum class Function { - // For Intel CSME path to call - // ID3D11VideoContext::NegotiateCryptoSessionKeyExchange. - kIntelNegotiateCryptoSessionKeyExchange, - // There will be more values in the future e.g. for D3D11 RSA method. - kMaxValue = kIntelNegotiateCryptoSessionKeyExchange, - }; - - enum class KeyType { - kDecryptOnly, - kDecryptAndDecode, - kMaxValue = kDecryptAndDecode, - }; - - CdmProxy(); - virtual ~CdmProxy(); - - // Returns a weak pointer of the CdmContext associated with |this|. - // The weak pointer will be null if |this| is destroyed. - virtual base::WeakPtr<CdmContext> GetCdmContext() = 0; - - // Callback for Initialize(). If the proxy created a crypto session, then the - // ID for the crypto session is |crypto_session_id|. - using InitializeCB = base::OnceCallback< - void(Status status, Protocol protocol, uint32_t crypto_session_id)>; - - // Initializes the proxy. The status and the return values of the call is - // reported to |init_cb|. All other methods should only be called after the - // proxy is fully initialized. Otherwise they may fail. - // Note: The proxy also needs to be reinitialized after hardware reset. See - // Client::NotifyHardwareReset() for details. - virtual void Initialize(Client* client, InitializeCB init_cb) = 0; - - // Callback for Process(). |output_data| is the output of processing. - using ProcessCB = - base::OnceCallback<void(Status status, - const std::vector<uint8_t>& output_data)>; - - // Processes and updates the state of the proxy. - // |expected_output_size| is the size of the output data passed to the - // callback. Whether this value is required or not is protocol dependent. - // The status and the return values of the call is reported to |process_cb|. - virtual void Process(Function function, - uint32_t crypto_session_id, - const std::vector<uint8_t>& input_data, - uint32_t expected_output_data_size, - ProcessCB process_cb) = 0; - - // Callback for CreateMediaCryptoSession(). - // On success: - // |crypto_session_id| is the ID for the created crypto session. - // |output_data| is extra value, if any. - using CreateMediaCryptoSessionCB = base::OnceCallback< - void(Status status, uint32_t crypto_session_id, uint64_t output_data)>; - - // Creates a crypto session for handling media. - // If extra data has to be passed to further setup the media crypto session, - // pass the data as |input_data|. - // The status and the return values of the call is reported to - // |create_media_crypto_session_cb|. - virtual void CreateMediaCryptoSession( - const std::vector<uint8_t>& input_data, - CreateMediaCryptoSessionCB create_media_crypto_session_cb) = 0; - - // Callback for SetKey(). - using SetKeyCB = base::OnceCallback<void(Status status)>; - - // Sets a key in the proxy. - // |crypto_session_id| is the crypto session for decryption. - // |key_id| is the ID of the key. - // |key_type| is the type of the key. - // |key_blob| is the opaque key blob for decrypting or decoding. - // The status of the call is reported to |set_key_cb|. - virtual void SetKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - KeyType key_type, - const std::vector<uint8_t>& key_blob, - SetKeyCB set_key_cb) = 0; - - // Callback for RemoveKey(). - using RemoveKeyCB = base::OnceCallback<void(Status status)>; - - // Removes a key from the proxy. - // |crypto_session_id| is the crypto session for decryption. - // |key_id| is the ID of the key. - // The status of the call is reported to |remove_key_cb|. - virtual void RemoveKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - RemoveKeyCB remove_key_cb) = 0; - - private: - DISALLOW_COPY_AND_ASSIGN(CdmProxy); -}; - -using CdmProxyFactoryCB = base::RepeatingCallback<std::unique_ptr<CdmProxy>( - const base::Token& cdm_guid)>; - -} // namespace media - -#endif // MEDIA_CDM_CDM_PROXY_H_
diff --git a/media/cdm/cdm_proxy_context.cc b/media/cdm/cdm_proxy_context.cc deleted file mode 100644 index 8e5f67a..0000000 --- a/media/cdm/cdm_proxy_context.cc +++ /dev/null
@@ -1,22 +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 "media/cdm/cdm_proxy_context.h" - -#include "build/build_config.h" - -namespace media { - -CdmProxyContext::CdmProxyContext() {} -CdmProxyContext::~CdmProxyContext() {} - -#if defined(OS_WIN) -base::Optional<CdmProxyContext::D3D11DecryptContext> -CdmProxyContext::GetD3D11DecryptContext(CdmProxy::KeyType key_type, - const std::string& key_id) { - return base::nullopt; -} -#endif - -} // namespace media \ No newline at end of file
diff --git a/media/cdm/cdm_proxy_context.h b/media/cdm/cdm_proxy_context.h deleted file mode 100644 index a04173d4..0000000 --- a/media/cdm/cdm_proxy_context.h +++ /dev/null
@@ -1,67 +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 MEDIA_CDM_CDM_PROXY_CONTEXT_H_ -#define MEDIA_CDM_CDM_PROXY_CONTEXT_H_ - -#include <stdint.h> - -#include <string> - -#include "base/compiler_specific.h" -#include "base/macros.h" -#include "base/optional.h" -#include "build/build_config.h" -#include "media/base/media_export.h" -#include "media/cdm/cdm_proxy.h" - -#if defined(OS_WIN) -#include <d3d11.h> -#endif - -namespace media { - -// An interface for accessing various CdmProxy data required for decrypting -// and/or decoding data. -class MEDIA_EXPORT CdmProxyContext { - public: -#if defined(OS_WIN) - struct D3D11DecryptContext { - // Crypto session pointer for decryption. - // The pointer is owned by the CdmContext implementation. - ID3D11CryptoSession* crypto_session; - - // Opaque key blob for decrypting or decoding. - // The pointer is owned by the CdmContext implementation. - const void* key_blob; - - // The size of the blob. - uint32_t key_blob_size; - - // GUID identifying the hardware key info. - GUID key_info_guid; - }; - - // Returns D3D11DecryptContext on success. Returns nullopt otherwise. The - // D3D11DecryptContext instance is only guaranteed to be valid before the - // caller returns. - // |key_type| is the requesting key type. - // |key_id| is the key ID of the media to decrypt. - virtual base::Optional<D3D11DecryptContext> GetD3D11DecryptContext( - CdmProxy::KeyType key_type, - const std::string& key_id) WARN_UNUSED_RESULT; -#endif // defined(OS_WIN) - - // TODO(crbug.com/787657): There will be more methods for this class. - - protected: - CdmProxyContext(); - virtual ~CdmProxyContext(); - - DISALLOW_COPY_AND_ASSIGN(CdmProxyContext); -}; - -} // namespace media - -#endif // MEDIA_CDM_CDM_PROXY_CONTEXT_H_
diff --git a/media/cdm/library_cdm/clear_key_cdm/BUILD.gn b/media/cdm/library_cdm/clear_key_cdm/BUILD.gn index 8e01c75..25b1dfe 100644 --- a/media/cdm/library_cdm/clear_key_cdm/BUILD.gn +++ b/media/cdm/library_cdm/clear_key_cdm/BUILD.gn
@@ -15,8 +15,6 @@ "cdm_file_adapter.h", "cdm_file_io_test.cc", "cdm_file_io_test.h", - "cdm_proxy_handler.cc", - "cdm_proxy_handler.h", "cdm_video_decoder.cc", "cdm_video_decoder.h", "clear_key_cdm.cc", @@ -31,7 +29,6 @@ defines = [ "CDM_IMPLEMENTATION" ] deps = [ - ":cdm_proxy_common", "//base", "//media", "//media:media_buildflags", @@ -53,20 +50,3 @@ deps += [ "//third_party/ffmpeg" ] } } - -source_set("clear_key_cdm_proxy") { - sources = [ - "clear_key_cdm_proxy.cc", - "clear_key_cdm_proxy.h", - ] - - deps = [ - ":cdm_proxy_common", - "//base", - "//media", - ] -} - -source_set("cdm_proxy_common") { - sources = [ "cdm_proxy_common.h" ] -}
diff --git a/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_common.h b/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_common.h deleted file mode 100644 index f0a6a8a..0000000 --- a/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_common.h +++ /dev/null
@@ -1,21 +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 MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CDM_PROXY_COMMON_H_ -#define MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CDM_PROXY_COMMON_H_ - -#include <stdint.h> -#include <array> - -namespace media { - -// Constants used to test CdmProxy stack using ClearKeyCdm and ClearKeyCdmProxy. -constexpr uint32_t kClearKeyCdmProxyCryptoSessionId = 1; -constexpr uint32_t kClearKeyCdmProxyMediaCryptoSessionId = 23; -constexpr std::array<uint8_t, 3> kClearKeyCdmProxyInputData = {4, 5, 6}; -constexpr std::array<uint8_t, 4> kClearKeyCdmProxyOutputData = {7, 8, 9, 10}; - -} // namespace media - -#endif // MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CDM_PROXY_COMMON_H_
diff --git a/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_handler.cc b/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_handler.cc deleted file mode 100644 index 115dcdf1..0000000 --- a/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_handler.cc +++ /dev/null
@@ -1,119 +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 "media/cdm/library_cdm/clear_key_cdm/cdm_proxy_handler.h" - -#include <stdint.h> -#include <algorithm> - -#include "base/logging.h" -#include "base/macros.h" -#include "media/cdm/library_cdm/cdm_host_proxy.h" -#include "media/cdm/library_cdm/clear_key_cdm/cdm_proxy_common.h" - -namespace media { - -CdmProxyHandler::CdmProxyHandler(CdmHostProxy* cdm_host_proxy) - : cdm_host_proxy_(cdm_host_proxy) {} - -CdmProxyHandler::~CdmProxyHandler() {} - -void CdmProxyHandler::Initialize(InitCB init_cb) { - DVLOG(1) << __func__; - init_cb_ = std::move(init_cb); - - cdm_proxy_ = cdm_host_proxy_->RequestCdmProxy(this); - if (!cdm_proxy_) { - FinishInitialization(false); - return; - } - - cdm_proxy_->Initialize(); -} - -void CdmProxyHandler::SetKey(const std::vector<uint8_t>& response, - SetKeyCB set_key_cb) { - DVLOG(2) << __func__; - DCHECK(!set_key_cb_); - set_key_cb_ = std::move(set_key_cb); - cdm_proxy_->SetKey(crypto_session_id_, nullptr, 0, - cdm::CdmProxy::kDecryptAndDecode, response.data(), - response.size()); -} - -void CdmProxyHandler::FinishInitialization(bool success) { - DVLOG(1) << __func__ << ": success = " << success; - std::move(init_cb_).Run(success); -} - -void CdmProxyHandler::OnInitialized(Status status, - Protocol protocol, - uint32_t crypto_session_id) { - DVLOG(1) << __func__ << ": status = " << status; - - if (status != Status::kOk || - crypto_session_id != kClearKeyCdmProxyCryptoSessionId) { - FinishInitialization(false); - return; - } - - // Only one CdmProxy can be created during the lifetime of the CDM instance. - if (cdm_host_proxy_->RequestCdmProxy(this)) { - FinishInitialization(false); - return; - } - - cdm_proxy_->Process(cdm::CdmProxy::kIntelNegotiateCryptoSessionKeyExchange, - crypto_session_id, kClearKeyCdmProxyInputData.data(), - kClearKeyCdmProxyInputData.size(), 0); -} - -void CdmProxyHandler::OnProcessed(Status status, - const uint8_t* output_data, - uint32_t output_data_size) { - DVLOG(2) << __func__ << ": status = " << status; - - if (status != Status::kOk || - !std::equal(output_data, output_data + output_data_size, - kClearKeyCdmProxyOutputData.begin())) { - FinishInitialization(false); - return; - } - - cdm_proxy_->CreateMediaCryptoSession(kClearKeyCdmProxyInputData.data(), - kClearKeyCdmProxyInputData.size()); -} - -void CdmProxyHandler::OnMediaCryptoSessionCreated(Status status, - uint32_t crypto_session_id, - uint64_t output_data) { - DVLOG(2) << __func__ << ": status = " << status; - - if (status != Status::kOk || - crypto_session_id != kClearKeyCdmProxyMediaCryptoSessionId) { - FinishInitialization(false); - return; - } - - FinishInitialization(true); -} - -void CdmProxyHandler::OnKeySet(Status status) { - DVLOG(2) << __func__ << ": status = " << status; - DCHECK(set_key_cb_); - - std::move(set_key_cb_).Run(status == Status::kOk); -} - -void CdmProxyHandler::OnKeyRemoved(Status status) { - DVLOG(2) << __func__; - NOTREACHED(); -} - -void CdmProxyHandler::NotifyHardwareReset() { - DVLOG(1) << __func__; - NOTREACHED(); -} - -} // namespace media
diff --git a/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_handler.h b/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_handler.h deleted file mode 100644 index 850d905..0000000 --- a/media/cdm/library_cdm/clear_key_cdm/cdm_proxy_handler.h +++ /dev/null
@@ -1,60 +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 MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CDM_PROXY_HANDLER_H_ -#define MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CDM_PROXY_HANDLER_H_ - -#include "base/callback.h" -#include "base/macros.h" -#include "media/cdm/api/content_decryption_module.h" - -namespace media { - -class CdmHostProxy; - -class CdmProxyHandler : public cdm::CdmProxyClient { - public: - using InitCB = base::OnceCallback<void(bool success)>; - using SetKeyCB = base::OnceCallback<void(bool success)>; - - explicit CdmProxyHandler(CdmHostProxy* cdm_host_proxy); - ~CdmProxyHandler() override; - - // Initializes the CdmProxyHandler and returns the result through |init_cb|. - // This will request and initialize the CdmProxy, create media crypto session - // and do some trivial procesing for better test coverage. - void Initialize(InitCB init_cb); - - // Push a response that contains a license to the CdmProxy. - void SetKey(const std::vector<uint8_t>& response, SetKeyCB set_key_cb); - - private: - void FinishInitialization(bool success); - - // cdm::CdmProxyClient implementation. - void OnInitialized(Status status, - Protocol protocol, - uint32_t crypto_session_id) final; - void OnProcessed(Status status, - const uint8_t* output_data, - uint32_t output_data_size) final; - void OnMediaCryptoSessionCreated(Status status, - uint32_t crypto_session_id, - uint64_t output_data) final; - void OnKeySet(Status status) final; - void OnKeyRemoved(Status status) final; - void NotifyHardwareReset() final; - - CdmHostProxy* const cdm_host_proxy_ = nullptr; - InitCB init_cb_; - SetKeyCB set_key_cb_; - cdm::CdmProxy* cdm_proxy_ = nullptr; - uint32_t crypto_session_id_ = 0u; - - DISALLOW_COPY_AND_ASSIGN(CdmProxyHandler); -}; - -} // namespace media - -#endif // MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CDM_PROXY_HANDLER_H_
diff --git a/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm.cc b/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm.cc index 4d3c278..5ad5056e 100644 --- a/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm.cc +++ b/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm.cc
@@ -29,7 +29,6 @@ #include "media/cdm/library_cdm/cdm_host_proxy.h" #include "media/cdm/library_cdm/cdm_host_proxy_impl.h" #include "media/cdm/library_cdm/clear_key_cdm/cdm_file_io_test.h" -#include "media/cdm/library_cdm/clear_key_cdm/cdm_proxy_handler.h" #include "media/cdm/library_cdm/clear_key_cdm/cdm_video_decoder.h" #include "media/media_buildflags.h" @@ -67,8 +66,6 @@ "org.chromium.externalclearkey.storageidtest"; const char kExternalClearKeyDifferentGuidTestKeySystem[] = "org.chromium.externalclearkey.differentguid"; -const char kExternalClearKeyCdmProxyKeySystem[] = - "org.chromium.externalclearkey.cdmproxy"; const int64_t kMsPerSecond = 1000; const int64_t kMaxTimerDelayMs = 5 * kMsPerSecond; @@ -181,8 +178,7 @@ key_system_string != kExternalClearKeyCrashKeySystem && key_system_string != kExternalClearKeyVerifyCdmHostTestKeySystem && key_system_string != kExternalClearKeyStorageIdTestKeySystem && - key_system_string != kExternalClearKeyDifferentGuidTestKeySystem && - key_system_string != kExternalClearKeyCdmProxyKeySystem) { + key_system_string != kExternalClearKeyDifferentGuidTestKeySystem) { DVLOG(1) << "Unsupported key system:" << key_system_string; return nullptr; } @@ -349,13 +345,6 @@ // to check persistent state permission. allow_persistent_state_ = allow_persistent_state; - // CdmProxy must be created during initialization time. OnInitialized() will - // be called in OnCdmProxyHandlerInitialized(). - if (key_system_ == kExternalClearKeyCdmProxyKeySystem) { - InitializeCdmProxyHandler(); - return; - } - cdm_host_proxy_->OnInitialized(true); } @@ -441,54 +430,15 @@ DVLOG(1) << __func__; std::string web_session_str(session_id, session_id_length); std::vector<uint8_t> response_vector(response, response + response_size); - auto pending_update_params = std::make_unique<UpdateParams>( - promise_id, std::move(web_session_str), response_vector); - // Push the license to the CdmProxy. The license will still be pushed to the - // |cdm_| after OnKeySet() is called, which then triggers - // OnSessionKeysChange(). This order is critical to avoid race conditions like - // OnSessionKeysChange() being called before the keys are actually available - // in the CdmProxy. - if (cdm_proxy_handler_) { - if (pending_update_params_) { - OnPromiseFailed(promise_id, CdmPromise::Exception::INVALID_STATE_ERROR, 0, - "Parallel updates not supported."); - return; - } - - pending_update_params_ = std::move(pending_update_params); - cdm_proxy_handler_->SetKey( - response_vector, - base::BindOnce(&ClearKeyCdm::OnCdmProxyKeySet, base::Unretained(this))); - return; - } - - UpdateSessionInternal(std::move(pending_update_params)); -} - -void ClearKeyCdm::OnCdmProxyKeySet(bool success) { - DCHECK(pending_update_params_); - - if (!success) { - auto promise_id = pending_update_params_->promise_id; - pending_update_params_.reset(); - OnPromiseFailed(promise_id, CdmPromise::Exception::INVALID_STATE_ERROR, 0, - "Parallel updates not supported."); - return; - } - - UpdateSessionInternal(std::move(pending_update_params_)); -} - -void ClearKeyCdm::UpdateSessionInternal(std::unique_ptr<UpdateParams> params) { std::unique_ptr<media::SimpleCdmPromise> promise( new media::CdmCallbackPromise<>( base::BindOnce(&ClearKeyCdm::OnUpdateSuccess, base::Unretained(this), - params->promise_id, params->session_id), + promise_id, web_session_str), base::BindOnce(&ClearKeyCdm::OnPromiseFailed, base::Unretained(this), - params->promise_id))); + promise_id))); - cdm_->UpdateSession(params->session_id, params->response, std::move(promise)); + cdm_->UpdateSession(session_id, response_vector, std::move(promise)); } void ClearKeyCdm::OnUpdateSuccess(uint32_t promise_id, @@ -616,10 +566,6 @@ DVLOG(1) << __func__; DCHECK(encrypted_buffer.data); - // When CdmProxy is used, the CDM cannot do any decryption or decoding. - if (key_system_ == kExternalClearKeyCdmProxyKeySystem) - return cdm::kDecryptError; - scoped_refptr<DecoderBuffer> buffer; cdm::Status status = DecryptToMediaDecoderBuffer(encrypted_buffer, &buffer); @@ -639,10 +585,8 @@ cdm::Status ClearKeyCdm::InitializeAudioDecoder( const cdm::AudioDecoderConfig_2& audio_decoder_config) { - if (key_system_ == kExternalClearKeyDecryptOnlyKeySystem || - key_system_ == kExternalClearKeyCdmProxyKeySystem) { + if (key_system_ == kExternalClearKeyDecryptOnlyKeySystem) return cdm::kInitializationError; - } #if defined(CLEAR_KEY_CDM_USE_FFMPEG_DECODER) if (!audio_decoder_) @@ -665,10 +609,8 @@ cdm::Status ClearKeyCdm::InitializeVideoDecoder( const cdm::VideoDecoderConfig_3& video_decoder_config) { - if (key_system_ == kExternalClearKeyDecryptOnlyKeySystem || - key_system_ == kExternalClearKeyCdmProxyKeySystem) { + if (key_system_ == kExternalClearKeyDecryptOnlyKeySystem) return cdm::kInitializationError; - } if (!video_decoder_) { video_decoder_ = @@ -1029,29 +971,4 @@ cdm_host_proxy_->RequestStorageId(0); } -void ClearKeyCdm::InitializeCdmProxyHandler() { - DVLOG(1) << __func__; - DCHECK(!cdm_proxy_handler_); - - cdm_proxy_handler_ = std::make_unique<CdmProxyHandler>(cdm_host_proxy_.get()); - cdm_proxy_handler_->Initialize(base::BindOnce( - &ClearKeyCdm::OnCdmProxyHandlerInitialized, base::Unretained(this))); -} - -void ClearKeyCdm::OnCdmProxyHandlerInitialized(bool success) { - DVLOG(1) << __func__; - DCHECK(cdm_proxy_handler_); - - cdm_host_proxy_->OnInitialized(success); -} - -ClearKeyCdm::UpdateParams::UpdateParams(uint32_t promise_id, - std::string session_id, - std::vector<uint8_t> response) - : promise_id(promise_id), - session_id(std::move(session_id)), - response(std::move(response)) {} - -ClearKeyCdm::UpdateParams::~UpdateParams() {} - } // namespace media
diff --git a/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm.h b/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm.h index b33cd54..79e86d52 100644 --- a/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm.h +++ b/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm.h
@@ -23,7 +23,6 @@ namespace media { class CdmHostProxy; -class CdmProxyHandler; class CdmVideoDecoder; class DecoderBuffer; class FFmpegCdmAudioDecoder; @@ -103,17 +102,6 @@ uint32_t storage_id_size) override; private: - struct UpdateParams { - UpdateParams(uint32_t promise_id, - std::string session_id, - std::vector<uint8_t> response); - ~UpdateParams(); - - const uint32_t promise_id; - const std::string session_id; - const std::vector<uint8_t> response; - }; - // ContentDecryptionModule callbacks. void OnSessionMessage(const std::string& session_id, CdmMessageType message_type, @@ -163,12 +151,6 @@ void ReportVerifyCdmHostTestResult(); void StartStorageIdTest(); - void InitializeCdmProxyHandler(); - void OnCdmProxyHandlerInitialized(bool success); - void OnCdmProxyKeySet(bool success); - - void UpdateSessionInternal(std::unique_ptr<UpdateParams> params); - int host_interface_version_ = 0; std::unique_ptr<CdmHostProxy> cdm_host_proxy_; @@ -193,12 +175,9 @@ std::unique_ptr<FFmpegCdmAudioDecoder> audio_decoder_; #endif // CLEAR_KEY_CDM_USE_FFMPEG_DECODER - std::unique_ptr<UpdateParams> pending_update_params_; - std::unique_ptr<CdmVideoDecoder> video_decoder_; std::unique_ptr<FileIOTestRunner> file_io_test_runner_; - std::unique_ptr<CdmProxyHandler> cdm_proxy_handler_; bool is_running_output_protection_test_ = false; bool is_running_platform_verification_test_ = false;
diff --git a/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc b/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc deleted file mode 100644 index 0b4ac9c4..0000000 --- a/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc +++ /dev/null
@@ -1,129 +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 "media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.h" - -#include "base/bind_helpers.h" -#include "base/logging.h" -#include "media/base/content_decryption_module.h" -#include "media/cdm/library_cdm/clear_key_cdm/cdm_proxy_common.h" - -namespace media { - -namespace { - -constexpr char kDummySessionId[] = "dummy session id"; - -class IgnoreResponsePromise : public SimpleCdmPromise { - public: - IgnoreResponsePromise() = default; - ~IgnoreResponsePromise() override = default; - - // SimpleCdmPromise implementation. - void resolve() final { MarkPromiseSettled(); } - void reject(CdmPromise::Exception exception_code, - uint32_t system_code, - const std::string& error_message) final { - MarkPromiseSettled(); - } -}; - -} // namespace - -ClearKeyCdmProxy::ClearKeyCdmProxy() {} - -ClearKeyCdmProxy::~ClearKeyCdmProxy() {} - -base::WeakPtr<CdmContext> ClearKeyCdmProxy::GetCdmContext() { - DVLOG(1) << __func__; - return weak_factory_.GetWeakPtr(); -} - -void ClearKeyCdmProxy::Initialize(Client* client, InitializeCB init_cb) { - DVLOG(1) << __func__; - - std::move(init_cb).Run(Status::kOk, Protocol::kIntel, - kClearKeyCdmProxyCryptoSessionId); -} - -void ClearKeyCdmProxy::Process(Function function, - uint32_t crypto_session_id, - const std::vector<uint8_t>& input_data, - uint32_t expected_output_data_size, - ProcessCB process_cb) { - DVLOG(2) << __func__; - - if (crypto_session_id != kClearKeyCdmProxyCryptoSessionId || - !std::equal(input_data.begin(), input_data.end(), - kClearKeyCdmProxyInputData.begin(), - kClearKeyCdmProxyInputData.end())) { - std::move(process_cb).Run(Status::kFail, {}); - return; - } - - std::move(process_cb) - .Run(Status::kOk, - std::vector<uint8_t>(kClearKeyCdmProxyOutputData.begin(), - kClearKeyCdmProxyOutputData.end())); -} - -void ClearKeyCdmProxy::CreateMediaCryptoSession( - const std::vector<uint8_t>& input_data, - CreateMediaCryptoSessionCB create_media_crypto_session_cb) { - DVLOG(2) << __func__; - - if (!std::equal(input_data.begin(), input_data.end(), - kClearKeyCdmProxyInputData.begin(), - kClearKeyCdmProxyInputData.end())) { - std::move(create_media_crypto_session_cb).Run(Status::kFail, 0, 0); - return; - } - - std::move(create_media_crypto_session_cb) - .Run(Status::kOk, kClearKeyCdmProxyMediaCryptoSessionId, 0); -} - -void ClearKeyCdmProxy::SetKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - KeyType /* key_type */, - const std::vector<uint8_t>& key_blob, - SetKeyCB set_key_cb) { - DVLOG(1) << __func__; - - if (!aes_decryptor_) - CreateDecryptor(); - - aes_decryptor_->UpdateSession(kDummySessionId, key_blob, - std::make_unique<IgnoreResponsePromise>()); - std::move(set_key_cb).Run(Status::kOk); -} - -void ClearKeyCdmProxy::RemoveKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - RemoveKeyCB remove_key_cb) { - std::move(remove_key_cb).Run(Status::kOk); -} - -Decryptor* ClearKeyCdmProxy::GetDecryptor() { - DVLOG(1) << __func__; - - if (!aes_decryptor_) - CreateDecryptor(); - - return aes_decryptor_.get(); -} - -void ClearKeyCdmProxy::CreateDecryptor() { - DVLOG(1) << __func__; - DCHECK(!aes_decryptor_); - - aes_decryptor_ = - base::MakeRefCounted<AesDecryptor>(base::DoNothing(), base::DoNothing(), - base::DoNothing(), base::DoNothing()); - - // Also create a dummy session to be used for SetKey(). - aes_decryptor_->CreateSession(kDummySessionId, CdmSessionType::kTemporary); -} - -} // namespace media
diff --git a/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.h b/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.h deleted file mode 100644 index bc78f23b..0000000 --- a/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.h +++ /dev/null
@@ -1,59 +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 MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CLEAR_KEY_CDM_PROXY_H_ -#define MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CLEAR_KEY_CDM_PROXY_H_ - -#include "base/callback.h" -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "media/base/cdm_context.h" -#include "media/cdm/aes_decryptor.h" -#include "media/cdm/cdm_proxy.h" - -namespace media { - -// CdmProxy implementation for Clear Key CDM to test CDM Proxy support. -class ClearKeyCdmProxy : public CdmProxy, public CdmContext { - public: - ClearKeyCdmProxy(); - ~ClearKeyCdmProxy() final; - - // CdmProxy implementation. - base::WeakPtr<CdmContext> GetCdmContext() final; - void Initialize(Client* client, InitializeCB init_cb) final; - void Process(Function function, - uint32_t crypto_session_id, - const std::vector<uint8_t>& input_data, - uint32_t expected_output_data_size, - ProcessCB process_cb) final; - void CreateMediaCryptoSession( - const std::vector<uint8_t>& input_data, - CreateMediaCryptoSessionCB create_media_crypto_session_cb) final; - void SetKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - KeyType key_type, - const std::vector<uint8_t>& key_blob, - SetKeyCB set_key_cb) final; - void RemoveKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - RemoveKeyCB remove_key_cb) final; - - // CdmContext implementation. - Decryptor* GetDecryptor() final; - - private: - void CreateDecryptor(); - - scoped_refptr<AesDecryptor> aes_decryptor_; - - base::WeakPtrFactory<ClearKeyCdmProxy> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(ClearKeyCdmProxy); -}; - -} // namespace media - -#endif // MEDIA_CDM_LIBRARY_CDM_CLEAR_KEY_CDM_CLEAR_KEY_CDM_PROXY_H_
diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn index dbe7144..2164c38 100644 --- a/media/gpu/BUILD.gn +++ b/media/gpu/BUILD.gn
@@ -231,14 +231,6 @@ "/DELAYLOAD:mf.dll", "/DELAYLOAD:mfplat.dll", ] - if (enable_library_cdms) { - sources += [ - "windows/d3d11_cdm_proxy.cc", - "windows/d3d11_cdm_proxy.h", - "windows/d3d11_decryptor.cc", - "windows/d3d11_decryptor.h", - ] - } } if (use_ozone) { @@ -507,10 +499,8 @@ } if (is_win && enable_library_cdms) { sources += [ - "windows/d3d11_cdm_proxy_unittest.cc", "windows/d3d11_copying_texture_wrapper_unittest.cc", "windows/d3d11_decoder_configurator_unittest.cc", - "windows/d3d11_decryptor_unittest.cc", "windows/d3d11_texture_selector_unittest.cc", "windows/d3d11_video_decoder_unittest.cc", "windows/d3d11_video_device_format_support_unittest.cc",
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc index 4aac0b1..2e5565ee 100644 --- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc +++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
@@ -200,6 +200,10 @@ TRACE_EVENT0("media,gpu", "V4L2VEA::Initialize"); VLOGF(2) << ": " << config.AsHumanReadableString(); + if (config.HasTemporalLayer() || config.HasSpatialLayer()) { + VLOGF(1) << "Neither temporal nor spatial layer encoding is supported"; + return false; + } encoder_input_visible_rect_ = gfx::Rect(config.input_visible_size);
diff --git a/media/gpu/vaapi/BUILD.gn b/media/gpu/vaapi/BUILD.gn index 7ef509f..aec4d19 100644 --- a/media/gpu/vaapi/BUILD.gn +++ b/media/gpu/vaapi/BUILD.gn
@@ -195,6 +195,7 @@ "h264_encoder_unittest.cc", "vaapi_image_decode_accelerator_worker_unittest.cc", "vaapi_video_decode_accelerator_unittest.cc", + "vaapi_video_encode_accelerator_unittest.cc", ] deps = [ ":common",
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc index 8613efa2..e3558ac 100644 --- a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc +++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
@@ -279,6 +279,10 @@ DCHECK_EQ(state_, kUninitialized); VLOGF(2) << "Initializing VAVEA, " << config.AsHumanReadableString(); + if (config.HasTemporalLayer() || config.HasSpatialLayer()) { + VLOGF(1) << "Neither temporal nor spatial layer encoding is supported"; + return false; + } client_ptr_factory_.reset(new base::WeakPtrFactory<Client>(client)); client_ = client_ptr_factory_->GetWeakPtr();
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator_unittest.cc b/media/gpu/vaapi/vaapi_video_encode_accelerator_unittest.cc new file mode 100644 index 0000000..ff6ea7c --- /dev/null +++ b/media/gpu/vaapi/vaapi_video_encode_accelerator_unittest.cc
@@ -0,0 +1,83 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/gpu/vaapi/vaapi_video_encode_accelerator.h" + +#include "base/test/task_environment.h" +#include "media/video/video_encode_accelerator.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace media { +namespace { + +constexpr gfx::Size kDefaultEncodeSize(1280, 720); +constexpr uint32_t kDefaultBitrateBps = 4 * 1000 * 1000; +constexpr uint32_t kDefaultFramerate = 30; +const VideoEncodeAccelerator::Config kDefaultVEAConfig(PIXEL_FORMAT_I420, + kDefaultEncodeSize, + VP8PROFILE_ANY, + kDefaultBitrateBps, + kDefaultFramerate); + +class MockVideoEncodeAcceleratorClient : public VideoEncodeAccelerator::Client { + public: + MockVideoEncodeAcceleratorClient() = default; + virtual ~MockVideoEncodeAcceleratorClient() = default; + + MOCK_METHOD3(RequireBitstreamBuffers, + void(unsigned int, const gfx::Size&, size_t output_buffer_size)); + MOCK_METHOD2(BitstreamBufferReady, + void(int32_t, const BitstreamBufferMetadata&)); + MOCK_METHOD1(NotifyError, void(VideoEncodeAccelerator::Error)); + MOCK_METHOD1(NotifyEncoderInfoChange, void(const VideoEncoderInfo& info)); +}; + +struct VaapiVEAInitializeTestParam { + uint8_t num_of_temporal_layers = 0; + uint8_t num_of_spatial_layers = 0; + bool expected_result; +}; + +class VaapiVEAInitializeTest + : public ::testing::TestWithParam<VaapiVEAInitializeTestParam> { + protected: + VaapiVEAInitializeTest() = default; + ~VaapiVEAInitializeTest() override = default; + base::test::TaskEnvironment task_environment_; +}; + +TEST_P(VaapiVEAInitializeTest, SpatialLayerAndTemporalLayerEncoding) { + VideoEncodeAccelerator::Config config = kDefaultVEAConfig; + const uint8_t num_of_temporal_layers = GetParam().num_of_temporal_layers; + const uint8_t num_of_spatial_layers = GetParam().num_of_spatial_layers; + constexpr int kDenom[] = {4, 2, 1}; + for (uint8_t i = 0; i < num_of_spatial_layers; ++i) { + VideoEncodeAccelerator::Config::SpatialLayer spatial_layer; + int denom = kDenom[i]; + spatial_layer.width = kDefaultEncodeSize.width() / denom; + spatial_layer.height = kDefaultEncodeSize.height() / denom; + spatial_layer.bitrate_bps = kDefaultBitrateBps / denom; + spatial_layer.framerate = kDefaultFramerate; + spatial_layer.max_qp = 30; + spatial_layer.num_of_temporal_layers = num_of_temporal_layers; + config.spatial_layers.push_back(spatial_layer); + } + + VaapiVideoEncodeAccelerator vea; + MockVideoEncodeAcceleratorClient client; + EXPECT_EQ(vea.Initialize(config, &client), GetParam().expected_result); +} + +constexpr VaapiVEAInitializeTestParam kTestCases[] = { + {3u, 1u, false}, // Temporal Layer only. + {1u, 3u, false}, // Spatial Layer only. + {3u, 3u, false}, // Temporal + Spatial Layer. +}; + +INSTANTIATE_TEST_SUITE_P(SpatialLayerAndTemporalLayerEncoding, + VaapiVEAInitializeTest, + ::testing::ValuesIn(kTestCases)); +} // namespace +} // namespace media
diff --git a/media/gpu/windows/d3d11_cdm_proxy.cc b/media/gpu/windows/d3d11_cdm_proxy.cc deleted file mode 100644 index 1e274ab..0000000 --- a/media/gpu/windows/d3d11_cdm_proxy.cc +++ /dev/null
@@ -1,658 +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. - -// TODO(crbug.com/787657): Handle hardware key reset and notify the client. -#include "media/gpu/windows/d3d11_cdm_proxy.h" - -#include <initguid.h> - -#include "base/bind.h" -#include "base/logging.h" -#include "base/memory/ptr_util.h" -#include "base/power_monitor/power_monitor.h" -#include "base/power_monitor/power_observer.h" -#include "base/stl_util.h" -#include "base/synchronization/waitable_event.h" -#include "base/win/object_watcher.h" -#include "media/base/callback_registry.h" -#include "media/base/cdm_context.h" -#include "media/cdm/cdm_proxy_context.h" -#include "media/gpu/windows/d3d11_decryptor.h" - -namespace media { - -namespace { - -// Checks whether there is a hardware protected key exhange method. -// https://msdn.microsoft.com/en-us/library/windows/desktop/dn894125(v=vs.85).aspx -// The key exhange capabilities are checked using these. -// https://msdn.microsoft.com/en-us/library/windows/desktop/hh447640%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 -// https://msdn.microsoft.com/en-us/library/windows/desktop/hh447782(v=vs.85).aspx -bool CanDoHardwareProtectedKeyExchange(ComD3D11VideoDevice video_device, - const GUID& crypto_type) { - D3D11_VIDEO_CONTENT_PROTECTION_CAPS caps = {}; - HRESULT hresult = video_device->GetContentProtectionCaps( - &crypto_type, &D3D11_DECODER_PROFILE_H264_VLD_NOFGT, &caps); - if (FAILED(hresult)) { - DVLOG(1) << "Failed to get content protection caps."; - return false; - } - - for (uint32_t i = 0; i < caps.KeyExchangeTypeCount; ++i) { - GUID kex_guid = {}; - hresult = video_device->CheckCryptoKeyExchange( - &crypto_type, &D3D11_DECODER_PROFILE_H264_VLD_NOFGT, i, &kex_guid); - if (FAILED(hresult)) { - DVLOG(1) << "Failed to get key exchange GUID"; - return false; - } - - if (kex_guid == D3D11_KEY_EXCHANGE_HW_PROTECTION) - return true; - } - - DVLOG(1) << "Hardware key exchange is not supported."; - return false; -} - -class D3D11CdmProxyContext : public CdmProxyContext { - public: - explicit D3D11CdmProxyContext(const GUID& key_info_guid) - : key_info_guid_(key_info_guid) {} - ~D3D11CdmProxyContext() override = default; - - // The pointers are owned by the caller. - void SetKey(ID3D11CryptoSession* crypto_session, - const std::vector<uint8_t>& key_id, - CdmProxy::KeyType key_type, - const std::vector<uint8_t>& key_blob) { - std::string key_id_str(key_id.begin(), key_id.end()); - KeyInfo key_info(crypto_session, key_blob); - // Note that this would overwrite an entry but it is completely valid, e.g. - // updating the keyblob due to a configuration change. - key_info_map_[key_id_str][key_type] = std::move(key_info); - } - - void RemoveKey(ID3D11CryptoSession* crypto_session, - const std::vector<uint8_t>& key_id) { - // There's no need for a keytype for Remove() at the moment, because it's - // used for completely removing keys associated to |key_id|. - std::string key_id_str(key_id.begin(), key_id.end()); - key_info_map_.erase(key_id_str); - } - - // Removes all keys from the context. - void RemoveAllKeys() { key_info_map_.clear(); } - - // CdmProxyContext implementation. - base::Optional<D3D11DecryptContext> GetD3D11DecryptContext( - CdmProxy::KeyType key_type, - const std::string& key_id) override { - auto key_id_find_it = key_info_map_.find(key_id); - if (key_id_find_it == key_info_map_.end()) - return base::nullopt; - - auto& key_type_to_key_info = key_id_find_it->second; - auto key_type_find_it = key_type_to_key_info.find(key_type); - if (key_type_find_it == key_type_to_key_info.end()) - return base::nullopt; - - auto& key_info = key_type_find_it->second; - D3D11DecryptContext context = {}; - context.crypto_session = key_info.crypto_session; - context.key_blob = key_info.key_blob.data(); - context.key_blob_size = key_info.key_blob.size(); - context.key_info_guid = key_info_guid_; - return context; - } - - private: - // A structure to keep the data passed to SetKey(). See documentation for - // SetKey() for what the fields mean. - struct KeyInfo { - KeyInfo() = default; - KeyInfo(ID3D11CryptoSession* crypto_session, std::vector<uint8_t> key_blob) - : crypto_session(crypto_session), key_blob(std::move(key_blob)) {} - KeyInfo(const KeyInfo&) = default; - ~KeyInfo() = default; - - ID3D11CryptoSession* crypto_session; - std::vector<uint8_t> key_blob; - }; - - // Maps key ID -> key type -> KeyInfo. - // The key ID's type is string, which is converted from |key_id| in - // SetKey(). It's better to use string here rather than convert - // vector<uint8_t> to string every time in GetD3D11DecryptContext() because - // in most cases it would be called more often than SetKey() and RemoveKey() - // combined. - std::map<std::string, std::map<CdmProxy::KeyType, KeyInfo>> key_info_map_; - - const GUID key_info_guid_; - - DISALLOW_COPY_AND_ASSIGN(D3D11CdmProxyContext); -}; - -} // namespace - -// Watches for any content protection teardown events. -// If the instance has been started for watching, the destructor will -// automatically stop watching. -class D3D11CdmProxy::HardwareEventWatcher - : public base::win::ObjectWatcher::Delegate, - public base::PowerObserver { - public: - ~HardwareEventWatcher() override; - - // |teardown_callback| is called on the current sequence. - // Returns an instance if it starts watching for events, otherwise returns - // nullptr. - static std::unique_ptr<HardwareEventWatcher> Create( - ComD3D11Device device, - base::RepeatingClosure teardown_callback); - - private: - HardwareEventWatcher(ComD3D11Device device, - base::RepeatingClosure teardown_callback); - - // Start watching for events. - bool StartWatching(); - - // Registers for hardware content protection teardown events. - // Return true on success. - bool RegisterHardwareContentProtectionTeardown(ComD3D11Device device); - - // Regiesters for power events, specifically power resume event. - // Returns true on success. - bool RegisterPowerEvents(); - - // base::win::ObjectWatcher::Delegate implementation. - void OnObjectSignaled(HANDLE object) override; - - // base::PowerObserver implementation. Other power events are not relevant to - // this class. - void OnResume() override; - - // Stops watching for events. Good for clean up. - void StopWatching(); - - // IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent - // allows watching for teardown events. It is queried thru the following - // Devices. - ComD3D11Device device_; - ComDXGIDevice2 dxgi_device_; - ComDXGIAdapter3 dxgi_adapter_; - - // Cookie, event, and watcher used for watching events from - // RegisterHardwareContentProtectionTeardownStatusEvent. - DWORD teardown_event_cookie_ = 0u; - base::WaitableEvent content_protection_teardown_event_; - base::RepeatingClosure teardown_callback_; - base::win::ObjectWatcher teardown_status_watcher_; -}; - -class D3D11CdmContext : public CdmContext { - public: - explicit D3D11CdmContext(const GUID& key_info_guid) - : cdm_proxy_context_(key_info_guid) {} - ~D3D11CdmContext() override = default; - - // The pointers are owned by the caller. - void SetKey(ID3D11CryptoSession* crypto_session, - const std::vector<uint8_t>& key_id, - CdmProxy::KeyType key_type, - const std::vector<uint8_t>& key_blob) { - cdm_proxy_context_.SetKey(crypto_session, key_id, key_type, key_blob); - event_callbacks_.Notify(Event::kHasAdditionalUsableKey); - } - void RemoveKey(ID3D11CryptoSession* crypto_session, - const std::vector<uint8_t>& key_id) { - cdm_proxy_context_.RemoveKey(crypto_session, key_id); - } - - // Notifies of hardware reset. - void OnHardwareReset() { - cdm_proxy_context_.RemoveAllKeys(); - event_callbacks_.Notify(Event::kHardwareContextLost); - } - - base::WeakPtr<D3D11CdmContext> GetWeakPtr() { - return weak_factory_.GetWeakPtr(); - } - - // CdmContext implementation. - std::unique_ptr<CallbackRegistration> RegisterEventCB( - EventCB event_cb) override { - return event_callbacks_.Register(std::move(event_cb)); - } - CdmProxyContext* GetCdmProxyContext() override { return &cdm_proxy_context_; } - - Decryptor* GetDecryptor() override { - if (!decryptor_) - decryptor_.reset(new D3D11Decryptor(&cdm_proxy_context_)); - - return decryptor_.get(); - } - - private: - D3D11CdmProxyContext cdm_proxy_context_; - - std::unique_ptr<D3D11Decryptor> decryptor_; - - CallbackRegistry<EventCB::RunType> event_callbacks_; - - base::WeakPtrFactory<D3D11CdmContext> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(D3D11CdmContext); -}; - -D3D11CdmProxy::D3D11CdmProxy(const GUID& crypto_type, - CdmProxy::Protocol protocol, - const FunctionIdMap& function_id_map) - : crypto_type_(crypto_type), - protocol_(protocol), - function_id_map_(function_id_map), - cdm_context_(std::make_unique<D3D11CdmContext>(crypto_type)), - create_device_func_(base::BindRepeating(D3D11CreateDevice)) {} - -D3D11CdmProxy::~D3D11CdmProxy() {} - -base::WeakPtr<CdmContext> D3D11CdmProxy::GetCdmContext() { - return cdm_context_->GetWeakPtr(); -} - -void D3D11CdmProxy::Initialize(Client* client, InitializeCB init_cb) { - DCHECK(client); - - auto failed = [this, &init_cb]() { - // The value doesn't matter as it shouldn't be used on a failure. - const uint32_t kFailedCryptoSessionId = 0xFF; - std::move(init_cb).Run(Status::kFail, protocol_, kFailedCryptoSessionId); - }; - - if (initialized_) { - failed(); - NOTREACHED() << "CdmProxy should not be initialized more than once."; - return; - } - - client_ = client; - - const D3D_FEATURE_LEVEL feature_levels[] = {D3D_FEATURE_LEVEL_11_1}; - - HRESULT hresult = create_device_func_.Run( - nullptr, // No adapter. - D3D_DRIVER_TYPE_HARDWARE, nullptr, // No software rasterizer. - 0, // flags, none. - feature_levels, base::size(feature_levels), D3D11_SDK_VERSION, &device_, - nullptr, &device_context_); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to create the D3D11Device:" << hresult; - failed(); - return; - } - - // TODO(rkuroiwa): This should be registered iff - // D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN is set in the capabilities. - hardware_event_watcher_ = HardwareEventWatcher::Create( - device_, base::BindRepeating( - &D3D11CdmProxy::NotifyHardwareContentProtectionTeardown, - weak_factory_.GetWeakPtr())); - if (!hardware_event_watcher_) { - DLOG(ERROR) - << "Failed to start waching for content protection teardown events."; - failed(); - return; - } - - hresult = device_.As(&video_device_); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to get ID3D11VideoDevice: " << hresult; - failed(); - return; - } - - if (!CanDoHardwareProtectedKeyExchange(video_device_, crypto_type_)) { - DLOG(ERROR) << "Cannot do hardware protected key exchange."; - failed(); - return; - } - - hresult = device_context_.As(&video_context_); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to get ID3D11VideoContext: " << hresult; - failed(); - return; - } - - hresult = device_.As(&video_device1_); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to get ID3D11VideoDevice1: " << hresult; - failed(); - return; - } - - hresult = device_context_.As(&video_context1_); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to get ID3D11VideoContext1: " << hresult; - failed(); - return; - } - - ComD3D11CryptoSession csme_crypto_session; - hresult = video_device_->CreateCryptoSession( - &crypto_type_, &D3D11_DECODER_PROFILE_H264_VLD_NOFGT, - &D3D11_KEY_EXCHANGE_HW_PROTECTION, &csme_crypto_session); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to Create CryptoSession: " << hresult; - failed(); - return; - } - - hresult = video_device1_->GetCryptoSessionPrivateDataSize( - &crypto_type_, &D3D11_DECODER_PROFILE_H264_VLD_NOFGT, - &D3D11_KEY_EXCHANGE_HW_PROTECTION, &private_input_size_, - &private_output_size_); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to get private data sizes: " << hresult; - failed(); - return; - } - - const uint32_t crypto_session_id = next_crypto_session_id_++; - crypto_session_map_[crypto_session_id] = std::move(csme_crypto_session); - initialized_ = true; - std::move(init_cb).Run(Status::kOk, protocol_, crypto_session_id); -} - -void D3D11CdmProxy::Process(Function function, - uint32_t crypto_session_id, - const std::vector<uint8_t>& input_data_vec, - uint32_t expected_output_data_size, - ProcessCB process_cb) { - auto failed = [&process_cb]() { - std::move(process_cb).Run(Status::kFail, std::vector<uint8_t>()); - }; - - if (!initialized_) { - DLOG(ERROR) << "Not initialied."; - failed(); - return; - } - - auto function_id_it = function_id_map_.find(function); - if (function_id_it == function_id_map_.end()) { - DLOG(ERROR) << "Unrecognized function: " << static_cast<int>(function); - failed(); - return; - } - - auto crypto_session_it = crypto_session_map_.find(crypto_session_id); - if (crypto_session_it == crypto_session_map_.end()) { - DLOG(ERROR) << "Cannot find crypto session with ID " << crypto_session_id; - failed(); - return; - } - - ComD3D11CryptoSession& crypto_session = crypto_session_it->second; - - D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA key_exchange_data = {}; - key_exchange_data.HWProtectionFunctionID = function_id_it->second; - - // Because D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA and - // D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA are variable size structures, - // uint8 array are allocated and casted to each type. - // -4 for the "BYTE pbInput[4]" field. - std::unique_ptr<uint8_t[]> input_data_raw( - new uint8_t[sizeof(D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA) - 4 + - input_data_vec.size()]); - std::unique_ptr<uint8_t[]> output_data_raw( - new uint8_t[sizeof(D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA) - 4 + - expected_output_data_size]); - - D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA* input_data = - reinterpret_cast<D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA*>( - input_data_raw.get()); - D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA* output_data = - reinterpret_cast<D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA*>( - output_data_raw.get()); - - key_exchange_data.pInputData = input_data; - key_exchange_data.pOutputData = output_data; - input_data->PrivateDataSize = private_input_size_; - input_data->HWProtectionDataSize = 0; - memcpy(input_data->pbInput, input_data_vec.data(), input_data_vec.size()); - - output_data->PrivateDataSize = private_output_size_; - output_data->HWProtectionDataSize = 0; - output_data->TransportTime = 0; - output_data->ExecutionTime = 0; - output_data->MaxHWProtectionDataSize = expected_output_data_size; - - HRESULT hresult = video_context_->NegotiateCryptoSessionKeyExchange( - crypto_session.Get(), sizeof(key_exchange_data), &key_exchange_data); - if (FAILED(hresult)) { - failed(); - return; - } - - std::move(process_cb) - .Run(Status::kOk, std::vector<uint8_t>( - output_data->pbOutput, - output_data->pbOutput + expected_output_data_size)); - return; -} - -void D3D11CdmProxy::CreateMediaCryptoSession( - const std::vector<uint8_t>& input_data, - CreateMediaCryptoSessionCB create_media_crypto_session_cb) { - auto failed = [&create_media_crypto_session_cb]() { - const uint32_t kInvalidSessionId = 0; - const uint64_t kNoOutputData = 0; - std::move(create_media_crypto_session_cb) - .Run(Status::kFail, kInvalidSessionId, kNoOutputData); - }; - if (!initialized_) { - DLOG(ERROR) << "Not initialized."; - failed(); - return; - } - - ComD3D11CryptoSession media_crypto_session; - HRESULT hresult = video_device_->CreateCryptoSession( - &crypto_type_, &D3D11_DECODER_PROFILE_H264_VLD_NOFGT, &crypto_type_, - &media_crypto_session); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to create a crypto session: " << hresult; - failed(); - return; - } - - // Don't do CheckCryptoSessionStatus() yet. The status may be something like - // CONTEXT_LOST because GetDataForNewHardwareKey() is not called yet. - uint64_t output_data = 0; - if (!input_data.empty()) { - hresult = video_context1_->GetDataForNewHardwareKey( - media_crypto_session.Get(), input_data.size(), input_data.data(), - &output_data); - if (FAILED(hresult)) { - DLOG(ERROR) << "Failed to establish hardware session: " << hresult; - failed(); - return; - } - } - - D3D11_CRYPTO_SESSION_STATUS crypto_session_status = {}; - hresult = video_context1_->CheckCryptoSessionStatus( - media_crypto_session.Get(), &crypto_session_status); - if (FAILED(hresult) || - crypto_session_status != D3D11_CRYPTO_SESSION_STATUS_OK) { - DLOG(ERROR) << "Crypto session is not OK. Crypto session status " - << crypto_session_status << ". HRESULT " << hresult; - failed(); - return; - } - - const uint32_t media_crypto_session_id = next_crypto_session_id_++; - crypto_session_map_[media_crypto_session_id] = - std::move(media_crypto_session); - std::move(create_media_crypto_session_cb) - .Run(Status::kOk, media_crypto_session_id, output_data); -} - -void D3D11CdmProxy::SetKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - KeyType key_type, - const std::vector<uint8_t>& key_blob, - SetKeyCB set_key_cb) { - auto crypto_session_it = crypto_session_map_.find(crypto_session_id); - if (crypto_session_it == crypto_session_map_.end()) { - DLOG(WARNING) << crypto_session_id - << " did not map to a crypto session instance."; - std::move(set_key_cb).Run(Status::kFail); - return; - } - - cdm_context_->SetKey(crypto_session_it->second.Get(), key_id, key_type, - key_blob); - std::move(set_key_cb).Run(Status::kOk); -} - -void D3D11CdmProxy::RemoveKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - RemoveKeyCB remove_key_cb) { - auto crypto_session_it = crypto_session_map_.find(crypto_session_id); - if (crypto_session_it == crypto_session_map_.end()) { - DLOG(WARNING) << crypto_session_id - << " did not map to a crypto session instance."; - std::move(remove_key_cb).Run(Status::kFail); - return; - } - - cdm_context_->RemoveKey(crypto_session_it->second.Get(), key_id); - std::move(remove_key_cb).Run(Status::kOk); -} - -void D3D11CdmProxy::SetCreateDeviceCallbackForTesting( - D3D11CreateDeviceCB callback) { - create_device_func_ = std::move(callback); -} - -void D3D11CdmProxy::NotifyHardwareContentProtectionTeardown() { - cdm_context_->OnHardwareReset(); - client_->NotifyHardwareReset(); - Reset(); -} - -void D3D11CdmProxy::Reset() { - client_ = nullptr; - initialized_ = false; - crypto_session_map_.clear(); - device_.Reset(); - device_context_.Reset(); - video_device_.Reset(); - video_device1_.Reset(); - video_context_.Reset(); - video_context1_.Reset(); - // Note that this deregisters hardware reset event watcher. It shouldn't - // notify the clients until this is reinitialized. Also the client is set to - // null in this method. - hardware_event_watcher_ = nullptr; - crypto_session_map_.clear(); - private_input_size_ = 0; - private_output_size_ = 0; -} - -D3D11CdmProxy::HardwareEventWatcher::~HardwareEventWatcher() { - StopWatching(); -} - -std::unique_ptr<D3D11CdmProxy::HardwareEventWatcher> -D3D11CdmProxy::HardwareEventWatcher::Create( - ComD3D11Device device, - base::RepeatingClosure teardown_callback) { - std::unique_ptr<HardwareEventWatcher> event_watcher = base::WrapUnique( - new HardwareEventWatcher(device, std::move(teardown_callback))); - if (!event_watcher->StartWatching()) - return nullptr; - return event_watcher; -} - -D3D11CdmProxy::HardwareEventWatcher::HardwareEventWatcher( - ComD3D11Device device, - base::RepeatingClosure teardown_callback) - : device_(device), teardown_callback_(std::move(teardown_callback)) {} - -bool D3D11CdmProxy::HardwareEventWatcher::StartWatching() { - if (!RegisterPowerEvents() || - !RegisterHardwareContentProtectionTeardown(device_)) { - StopWatching(); - return false; - } - - return true; -} - -bool D3D11CdmProxy::HardwareEventWatcher:: - RegisterHardwareContentProtectionTeardown(ComD3D11Device device) { - device_ = device; - HRESULT hresult = device_.As(&dxgi_device_); - if (FAILED(hresult)) { - DVLOG(1) << "Failed to get dxgi device from device: " - << logging::SystemErrorCodeToString(hresult); - return false; - } - - hresult = dxgi_device_->GetParent(IID_PPV_ARGS(&dxgi_adapter_)); - if (FAILED(hresult)) { - DVLOG(1) << "Failed to get dxgi adapter from dxgi device: " - << logging::SystemErrorCodeToString(hresult); - return false; - } - - if (!teardown_status_watcher_.StartWatchingOnce( - content_protection_teardown_event_.handle(), this)) { - DVLOG(1) << "Failed to watch tear down event."; - return false; - } - - hresult = dxgi_adapter_->RegisterHardwareContentProtectionTeardownStatusEvent( - content_protection_teardown_event_.handle(), &teardown_event_cookie_); - if (FAILED(hresult)) { - DVLOG(1) - << "Failed to register for HardwareContentProtectionTeardownStatus: " - << logging::SystemErrorCodeToString(hresult); - return false; - } - - return true; -} - -bool D3D11CdmProxy::HardwareEventWatcher::RegisterPowerEvents() { - if (!base::PowerMonitor::AddObserver(this)) { - DVLOG(1) << "Power monitor not available."; - return false; - } - return true; -} - -void D3D11CdmProxy::HardwareEventWatcher::OnObjectSignaled(HANDLE object) { - DCHECK_EQ(object, content_protection_teardown_event_.handle()); - teardown_callback_.Run(); -} - -void D3D11CdmProxy::HardwareEventWatcher::OnResume() { - teardown_callback_.Run(); -} - -void D3D11CdmProxy::HardwareEventWatcher::StopWatching() { - if (dxgi_adapter_) { - dxgi_adapter_->UnregisterHardwareContentProtectionTeardownStatus( - teardown_event_cookie_); - } - teardown_status_watcher_.StopWatching(); - base::PowerMonitor::RemoveObserver(this); -} - -} // namespace media
diff --git a/media/gpu/windows/d3d11_cdm_proxy.h b/media/gpu/windows/d3d11_cdm_proxy.h deleted file mode 100644 index 572ed2ea..0000000 --- a/media/gpu/windows/d3d11_cdm_proxy.h +++ /dev/null
@@ -1,126 +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 MEDIA_GPU_WINDOWS_D3D11_CDM_PROXY_H_ -#define MEDIA_GPU_WINDOWS_D3D11_CDM_PROXY_H_ - -#include "media/cdm/cdm_proxy.h" - -#include <d3d11_1.h> -#include <dxgi1_4.h> -#include <wrl/client.h> - -#include <map> -#include <vector> - -#include "base/callback.h" -#include "base/memory/weak_ptr.h" -#include "media/base/win/d3d11_create_device_cb.h" -#include "media/gpu/media_gpu_export.h" -#include "media/gpu/windows/d3d11_com_defs.h" - -namespace media { - -class D3D11CdmContext; - -// This is a CdmProxy implementation that uses D3D11. -class MEDIA_GPU_EXPORT D3D11CdmProxy : public CdmProxy { - public: - using FunctionIdMap = std::map<Function, uint32_t>; - - // |crypto_type| is the ID that is used to do crypto session operations. This - // includes creating a crypto session with - // ID3D11VideoDevice::CreateCryptoSession(). This is "a GUID that specifies - // the type of encryption to use". - // https://msdn.microsoft.com/en-us/library/windows/desktop/hh447785(v=vs.85).aspx - // This is also used ot call - // ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize(). It "Indicates the - // crypto type for which the private input and output size is queried." - // https://msdn.microsoft.com/en-us/library/windows/desktop/dn894143(v=vs.85).aspx - // |protocol| determines what protocol this is operating in. This - // value is passed to callbacks that require a protocol enum value. - // |function_id_map| maps Function enum to an integer. - D3D11CdmProxy(const GUID& crypto_type, - CdmProxy::Protocol protocol, - const FunctionIdMap& function_id_map); - ~D3D11CdmProxy() override; - - // CdmProxy implementation. - base::WeakPtr<CdmContext> GetCdmContext() override; - void Initialize(Client* client, InitializeCB init_cb) override; - void Process(Function function, - uint32_t crypto_session_id, - const std::vector<uint8_t>& input_data, - uint32_t expected_output_data_size, - ProcessCB process_cb) override; - void CreateMediaCryptoSession( - const std::vector<uint8_t>& input_data, - CreateMediaCryptoSessionCB create_media_crypto_session_cb) override; - void SetKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - KeyType key_type, - const std::vector<uint8_t>& key_blob, - SetKeyCB set_key_cb) override; - void RemoveKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - RemoveKeyCB remove_key_cb) override; - - void SetCreateDeviceCallbackForTesting(D3D11CreateDeviceCB callback); - - private: - - class HardwareEventWatcher; - - void NotifyHardwareContentProtectionTeardown(); - - // Reset the state of this instance to be reinitializable. - void Reset(); - - const GUID crypto_type_; - const CdmProxy::Protocol protocol_; - const FunctionIdMap function_id_map_; - - std::unique_ptr<D3D11CdmContext> cdm_context_; - - // Implmenenting this class does not require this to be a callback. But in - // order to inject D3D11CreateDevice() function for testing, this member is - // required. The test will replace this with a function that returns a mock - // devices. - D3D11CreateDeviceCB create_device_func_; - - // Counter for assigning IDs to crypto sessions. - uint32_t next_crypto_session_id_ = 1; - - // Everything from here until weak ptr factory (which must be at the end) - // should be reset in Reset(). - Client* client_ = nullptr; - bool initialized_ = false; - - ComD3D11Device device_; - ComD3D11DeviceContext device_context_; - // TODO(crbug.com/788880): Remove ID3D11VideoDevice and ID3D11VideoContext if - // they are not required. - ComD3D11VideoDevice video_device_; - ComD3D11VideoDevice1 video_device1_; - ComD3D11VideoContext video_context_; - ComD3D11VideoContext1 video_context1_; - - std::unique_ptr<HardwareEventWatcher> hardware_event_watcher_; - - // Crypto session ID -> actual crypto session. - std::map<uint32_t, ComD3D11CryptoSession> crypto_session_map_; - - // The values output from ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize. - // Used when calling NegotiateCryptoSessionKeyExchange. - UINT private_input_size_ = 0; - UINT private_output_size_ = 0; - - base::WeakPtrFactory<D3D11CdmProxy> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(D3D11CdmProxy); -}; - -} // namespace media - -#endif // MEDIA_GPU_WINDOWS_D3D11_CDM_PROXY_H_
diff --git a/media/gpu/windows/d3d11_cdm_proxy_unittest.cc b/media/gpu/windows/d3d11_cdm_proxy_unittest.cc deleted file mode 100644 index a711e8c..0000000 --- a/media/gpu/windows/d3d11_cdm_proxy_unittest.cc +++ /dev/null
@@ -1,896 +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 "media/gpu/windows/d3d11_cdm_proxy.h" - -#include <d3d11.h> -#include <d3d11_1.h> -#include <initguid.h> - -#include "base/bind.h" -#include "base/power_monitor/power_monitor.h" -#include "base/power_monitor/power_monitor_source.h" -#include "base/run_loop.h" -#include "base/test/mock_callback.h" -#include "base/test/task_environment.h" -#include "media/base/callback_registry.h" -#include "media/base/win/d3d11_mocks.h" -#include "media/cdm/cdm_proxy_context.h" -#include "testing/gtest/include/gtest/gtest.h" - -using Microsoft::WRL::ComPtr; - -using ::testing::_; -using ::testing::AllOf; -using ::testing::AtLeast; -using ::testing::AtMost; -using ::testing::DoAll; -using ::testing::Invoke; -using ::testing::InvokeWithoutArgs; -using ::testing::Lt; -using ::testing::Mock; -using ::testing::Ne; -using ::testing::NiceMock; -using ::testing::Pointee; -using ::testing::Return; -using ::testing::SaveArg; -using ::testing::SetArgPointee; -using ::testing::WithArgs; - -namespace media { - -namespace { - -// TODO(rkuroiwa): Although inheriting from different classes, there are several -// mock CdmProxy clients already. They all have NotifyHardwareReset(), so share -// a single mock class that inherits from all the CdmProxy client classes. -class MockProxyClient : public CdmProxy::Client { - public: - MOCK_METHOD0(NotifyHardwareReset, void()); -}; - -class MockPowerMonitorSource : public base::PowerMonitorSource { - public: - // Use this method to send a power resume event. - void Resume() { - // Due to how ProcessPowerEvent() works, it has to be suspended first to - // resume. - ProcessPowerEvent(SUSPEND_EVENT); - ProcessPowerEvent(RESUME_EVENT); - } - - MOCK_METHOD0(IsOnBatteryPowerImpl, bool()); -}; - -// The values doesn't matter as long as this is consistently used thruout the -// test. -const CdmProxy::Protocol kTestProtocol = CdmProxy::Protocol::kIntel; -const CdmProxy::Function kTestFunction = - CdmProxy::Function::kIntelNegotiateCryptoSessionKeyExchange; -// TODO(rkuroiwa): Add test cases for KeyType. -const CdmProxy::KeyType kTestKeyType = CdmProxy::KeyType::kDecryptOnly; -const uint32_t kTestFunctionId = 123; -// clang-format off -DEFINE_GUID(CRYPTO_TYPE_GUID, - 0x01020304, 0xffee, 0xefba, - 0x93, 0xaa, 0x47, 0x77, 0x43, 0xb1, 0x22, 0x98); -// clang-format on - -} // namespace - -// Class for mocking the callbacks that get passed to the proxy methods. -class CallbackMock { - public: - MOCK_METHOD3(InitializeCallback, CdmProxy::InitializeCB::RunType); - MOCK_METHOD2(ProcessCallback, CdmProxy::ProcessCB::RunType); - MOCK_METHOD3(CreateMediaCryptoSessionCallback, - CdmProxy::CreateMediaCryptoSessionCB::RunType); - MOCK_METHOD1(SetKeyCallback, CdmProxy::SetKeyCB::RunType); - MOCK_METHOD1(RemoveKeyCallback, CdmProxy::RemoveKeyCB::RunType); -}; - -class D3D11CdmProxyTest : public ::testing::Test { - protected: - void SetUp() override { - std::map<CdmProxy::Function, uint32_t> function_id_map; - function_id_map[kTestFunction] = kTestFunctionId; - - // Use NiceMock because we don't care about base::PowerMonitorSource events - // other than calling Resume() directly. - auto mock_power_monitor_source = - std::make_unique<NiceMock<MockPowerMonitorSource>>(); - mock_power_monitor_source_ = mock_power_monitor_source.get(); - base::PowerMonitor::Initialize(std::move(mock_power_monitor_source)); - - proxy_ = std::make_unique<D3D11CdmProxy>(CRYPTO_TYPE_GUID, kTestProtocol, - function_id_map); - - device_mock_ = CreateD3D11Mock<D3D11DeviceMock>(); - video_device_mock_ = CreateD3D11Mock<D3D11VideoDeviceMock>(); - video_device1_mock_ = CreateD3D11Mock<D3D11VideoDevice1Mock>(); - crypto_session_mock_ = CreateD3D11Mock<D3D11CryptoSessionMock>(); - device_context_mock_ = CreateD3D11Mock<D3D11DeviceContextMock>(); - video_context_mock_ = CreateD3D11Mock<D3D11VideoContextMock>(); - video_context1_mock_ = CreateD3D11Mock<D3D11VideoContext1Mock>(); - dxgi_device_ = CreateD3D11Mock<DXGIDevice2Mock>(); - dxgi_adapter_ = CreateD3D11Mock<NiceMock<DXGIAdapter3Mock>>(); - - // These flags are a reasonable subset of flags to get HARDWARE protected - // playback. - content_protection_caps_.Caps = - D3D11_CONTENT_PROTECTION_CAPS_HARDWARE | - D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECT_UNCOMPRESSED | - D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECTED_MEMORY_PAGEABLE | - D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN | - D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_DRM_COMMUNICATION; - // 1 for the mock behavior below for CheckCryptoKeyExchange(). - content_protection_caps_.KeyExchangeTypeCount = 1; - // This is arbitrary but 1 is reasonable, meaning doesn't need to be - // aligned. - content_protection_caps_.BlockAlignmentSize = 1; - // This value is arbitrary. - content_protection_caps_.ProtectedMemorySize = 10000000; - - OnCallsForInitialize(); - - proxy_->SetCreateDeviceCallbackForTesting( - base::BindRepeating(&D3D11CreateDeviceMock::Create, - base::Unretained(&create_device_mock_))); - } - - void TearDown() override { - proxy_.reset(); - base::PowerMonitor::ShutdownForTesting(); - } - - // Sets up ON_CALLs for the mock objects. These can be overriden with - // EXPECT_CALLs. - // |content_protection_caps_| should be set. - void OnCallsForInitialize() { - ON_CALL(create_device_mock_, - Create(_, D3D_DRIVER_TYPE_HARDWARE, _, _, _, _, _, _, _, _)) - .WillByDefault( - DoAll(SetComPointee<7>(device_mock_.Get()), - SetComPointeeAndReturnOk<9>(device_context_mock_.Get()))); - - COM_ON_CALL(device_mock_, QueryInterface(IID_ID3D11VideoDevice, _)) - .WillByDefault(SetComPointeeAndReturnOk<1>(video_device_mock_.Get())); - - COM_ON_CALL(device_mock_, QueryInterface(IID_ID3D11VideoDevice1, _)) - .WillByDefault(SetComPointeeAndReturnOk<1>(video_device1_mock_.Get())); - - COM_ON_CALL(device_mock_, QueryInterface(IID_IDXGIDevice2, _)) - .WillByDefault(SetComPointeeAndReturnOk<1>(dxgi_device_.Get())); - - COM_ON_CALL(dxgi_device_, GetParent(IID_IDXGIAdapter3, _)) - .WillByDefault(SetComPointeeAndReturnOk<1>(dxgi_adapter_.Get())); - - COM_ON_CALL(dxgi_adapter_, - RegisterHardwareContentProtectionTeardownStatusEvent(_, _)) - .WillByDefault(DoAll(SaveArg<0>(&teardown_event_), Return(S_OK))); - - COM_ON_CALL(device_context_mock_, QueryInterface(IID_ID3D11VideoContext, _)) - .WillByDefault(SetComPointeeAndReturnOk<1>(video_context_mock_.Get())); - - COM_ON_CALL(device_context_mock_, - QueryInterface(IID_ID3D11VideoContext1, _)) - .WillByDefault(SetComPointeeAndReturnOk<1>(video_context1_mock_.Get())); - - COM_ON_CALL( - video_device_mock_, - CreateCryptoSession(Pointee(CRYPTO_TYPE_GUID), _, - Pointee(D3D11_KEY_EXCHANGE_HW_PROTECTION), _)) - .WillByDefault(SetComPointeeAndReturnOk<3>(crypto_session_mock_.Get())); - - COM_ON_CALL(video_device1_mock_, GetCryptoSessionPrivateDataSize( - Pointee(CRYPTO_TYPE_GUID), _, _, _, _)) - .WillByDefault(DoAll(SetArgPointee<3>(kPrivateInputSize), - SetArgPointee<4>(kPrivateOutputSize), - Return(S_OK))); - - COM_ON_CALL(video_device_mock_, GetContentProtectionCaps(_, _, _)) - .WillByDefault( - DoAll(SetArgPointee<2>(content_protection_caps_), Return(S_OK))); - - COM_ON_CALL(video_device_mock_, CheckCryptoKeyExchange(_, _, Lt(1u), _)) - .WillByDefault(DoAll(SetArgPointee<3>(D3D11_KEY_EXCHANGE_HW_PROTECTION), - Return(S_OK))); - } - - // Helper method to do Initialize(). The returned mock objects are accessible - // thru member variables. - void Initialize(CdmProxy::Client* client, CdmProxy::InitializeCB callback) { - EXPECT_CALL(create_device_mock_, - Create(_, D3D_DRIVER_TYPE_HARDWARE, _, _, _, _, _, _, _, _)); - COM_EXPECT_CALL(device_mock_, QueryInterface(IID_ID3D11VideoDevice, _)) - .Times(AtLeast(1)); - COM_EXPECT_CALL(device_mock_, QueryInterface(IID_IDXGIDevice2, _)) - .Times(AtLeast(1)); - COM_EXPECT_CALL(dxgi_device_, GetParent(IID_IDXGIAdapter3, _)) - .Times(AtLeast(1)); - COM_EXPECT_CALL(dxgi_adapter_, - RegisterHardwareContentProtectionTeardownStatusEvent(_, _)) - .Times(AtLeast(1)); - COM_EXPECT_CALL(device_mock_, QueryInterface(IID_ID3D11VideoDevice1, _)) - .Times(AtLeast(1)); - COM_EXPECT_CALL(device_context_mock_, - QueryInterface(IID_ID3D11VideoContext, _)) - .Times(AtLeast(1)); - COM_EXPECT_CALL(device_context_mock_, - QueryInterface(IID_ID3D11VideoContext1, _)) - .Times(AtLeast(1)); - COM_EXPECT_CALL( - video_device_mock_, - CreateCryptoSession(Pointee(CRYPTO_TYPE_GUID), _, - Pointee(D3D11_KEY_EXCHANGE_HW_PROTECTION), _)); - COM_EXPECT_CALL( - video_device1_mock_, - GetCryptoSessionPrivateDataSize(Pointee(CRYPTO_TYPE_GUID), _, _, _, _)); - - COM_EXPECT_CALL(video_device_mock_, GetContentProtectionCaps(_, _, _)); - - COM_EXPECT_CALL(video_device_mock_, - CheckCryptoKeyExchange(_, _, Lt(1u), _)); - - proxy_->Initialize(client, std::move(callback)); - - Mock::VerifyAndClearExpectations(device_mock_.Get()); - Mock::VerifyAndClearExpectations(video_device_mock_.Get()); - Mock::VerifyAndClearExpectations(video_device1_mock_.Get()); - Mock::VerifyAndClearExpectations(crypto_session_mock_.Get()); - Mock::VerifyAndClearExpectations(device_context_mock_.Get()); - Mock::VerifyAndClearExpectations(video_context_mock_.Get()); - Mock::VerifyAndClearExpectations(video_context1_mock_.Get()); - } - - // Test case where the proxy is initialized and then hardware content - // protection teardown is notified. - void HardwareContentProtectionTeardown() { - base::RunLoop run_loop; - - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kOk, _, _)); - ASSERT_NO_FATAL_FAILURE(Initialize( - &client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - - EXPECT_CALL(client_, NotifyHardwareReset()); - - base::MockCallback<CdmContext::EventCB> event_cb; - auto callback_registration = - proxy_->GetCdmContext()->RegisterEventCB(event_cb.Get()); - EXPECT_CALL(event_cb, Run(CdmContext::Event::kHardwareContextLost)) - .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); - - SetEvent(teardown_event_); - run_loop.Run(); - } - - MockProxyClient client_; - std::unique_ptr<D3D11CdmProxy> proxy_; - // Owned by PowerMonitor. Use this to simulate a power-resume. - MockPowerMonitorSource* mock_power_monitor_source_; - - D3D11CreateDeviceMock create_device_mock_; - CallbackMock callback_mock_; - - ComPtr<D3D11DeviceMock> device_mock_; - ComPtr<D3D11VideoDeviceMock> video_device_mock_; - ComPtr<D3D11VideoDevice1Mock> video_device1_mock_; - ComPtr<D3D11CryptoSessionMock> crypto_session_mock_; - ComPtr<D3D11DeviceContextMock> device_context_mock_; - ComPtr<D3D11VideoContextMock> video_context_mock_; - ComPtr<D3D11VideoContext1Mock> video_context1_mock_; - ComPtr<DXGIDevice2Mock> dxgi_device_; - ComPtr<NiceMock<DXGIAdapter3Mock>> dxgi_adapter_; - - D3D11_VIDEO_CONTENT_PROTECTION_CAPS content_protection_caps_ = {}; - - // Event captured in Initialize(). Used in tests to notify hardware content - // protection teardown. - HANDLE teardown_event_; - - // These size values are arbitrary. Used for mocking - // GetCryptoSessionPrivateDataSize(). - const UINT kPrivateInputSize = 10; - const UINT kPrivateOutputSize = 40; - - // ObjectWatcher uses SequencedTaskRunnerHandle. - base::test::TaskEnvironment task_environment_; -}; - -// Verifies that if device creation fails, then the call fails. -TEST_F(D3D11CdmProxyTest, FailedToCreateDevice) { - EXPECT_CALL(create_device_mock_, Create(_, _, _, _, _, _, _, _, _, _)) - .WillOnce(Return(E_FAIL)); - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kFail, _, _)); - proxy_->Initialize(&client_, - base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_))); -} - -// Initialize() success case. -TEST_F(D3D11CdmProxyTest, Initialize) { - EXPECT_CALL(callback_mock_, InitializeCallback(CdmProxy::Status::kOk, _, _)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); -} - -// Hardware content protection teardown is notified to the proxy. -// Verify that the client is notified. -TEST_F(D3D11CdmProxyTest, HardwareContentProtectionTeardown) { - EXPECT_NO_FATAL_FAILURE(HardwareContentProtectionTeardown()); -} - -// Verify that initialization after hardware content protection teardown works.. -TEST_F(D3D11CdmProxyTest, HardwareContentProtectionTeardownThenInitialize) { - ASSERT_NO_FATAL_FAILURE(HardwareContentProtectionTeardown()); - EXPECT_CALL(callback_mock_, InitializeCallback(CdmProxy::Status::kOk, _, _)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); -} - -// Verify that failing to register to hardware content protection teardown -// status event results in initialization failure. -TEST_F(D3D11CdmProxyTest, FailedToRegisterForContentProtectionTeardown) { - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kFail, _, _)); - - COM_EXPECT_CALL(dxgi_adapter_, - RegisterHardwareContentProtectionTeardownStatusEvent(_, _)) - .Times(AtLeast(1)) - .WillRepeatedly(Return(E_FAIL)); - - proxy_->Initialize(&client_, - base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_))); -} - -// Verify that the client is notified on power suspend. -TEST_F(D3D11CdmProxyTest, PowerResume) { - base::RunLoop run_loop; - - EXPECT_CALL(callback_mock_, InitializeCallback(CdmProxy::Status::kOk, _, _)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - - EXPECT_CALL(client_, NotifyHardwareReset()).WillOnce(Invoke([&run_loop]() { - run_loop.Quit(); - })); - - mock_power_monitor_source_->Resume(); - run_loop.Run(); -} - -// IRL power resume is notified and then hardware content protection teardown -// is notified. Make sure that the two notifications don't signal the clients -// more than once (without being reinitialized in between the notifications). -// Note that this test uses QuitWhenIdle(). If both notifications are processed -// this test will run forever. -TEST_F(D3D11CdmProxyTest, PowerResumeAndHardwareContentProtectionTeardown) { - base::RunLoop run_loop; - - EXPECT_CALL(callback_mock_, InitializeCallback(CdmProxy::Status::kOk, _, _)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - - EXPECT_CALL(client_, NotifyHardwareReset()) - .Times(1) - .WillOnce(Invoke([&run_loop]() { run_loop.QuitWhenIdle(); })); - - mock_power_monitor_source_->Resume(); - SetEvent(teardown_event_); - run_loop.Run(); -} - -// Verify that if there isn't a power monitor, initialization fails. -TEST_F(D3D11CdmProxyTest, NoPowerMonitor) { - base::PowerMonitor::ShutdownForTesting(); - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kFail, _, _)); - - proxy_->Initialize(&client_, - base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_))); -} - -// Initialization failure because HW key exchange is not available. -TEST_F(D3D11CdmProxyTest, NoHwKeyExchange) { - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kFail, _, _)); - // GUID is set to non-D3D11_KEY_EXCHANGE_HW_PROTECTION, which means no HW key - // exchange. - COM_EXPECT_CALL(video_device_mock_, CheckCryptoKeyExchange(_, _, Lt(1u), _)) - .WillOnce( - DoAll(SetArgPointee<3>(D3D11_CRYPTO_TYPE_AES128_CTR), Return(S_OK))); - - proxy_->Initialize(&client_, - base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_))); -} - -// Verifies that Process() won't work if not initialized. -TEST_F(D3D11CdmProxyTest, ProcessUninitialized) { - // The size nor value here matter, so making non empty non zero vector. - const std::vector<uint8_t> kAnyInput(16, 0xFF); - // Output size is also arbitrary, just has to match with the mock. - const uint32_t kExpectedOutputDataSize = 20; - EXPECT_CALL(callback_mock_, ProcessCallback(CdmProxy::Status::kFail, _)); - proxy_->Process(kTestFunction, 0, kAnyInput, kExpectedOutputDataSize, - base::BindOnce(&CallbackMock::ProcessCallback, - base::Unretained(&callback_mock_))); -} - -// Verifies that using a crypto session that is not reported will fail. -TEST_F(D3D11CdmProxyTest, ProcessInvalidCryptoSessionID) { - uint32_t crypto_session_id = 0; - EXPECT_CALL(callback_mock_, InitializeCallback(CdmProxy::Status::kOk, _, _)) - .WillOnce(SaveArg<2>(&crypto_session_id)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - Mock::VerifyAndClearExpectations(&callback_mock_); - - // The size nor value here matter, so making non empty non zero vector. - const std::vector<uint8_t> kAnyInput(16, 0xFF); - // Output size is also arbitrary, just has to match with the mock. - const uint32_t kExpectedOutputDataSize = 20; - EXPECT_CALL(callback_mock_, ProcessCallback(CdmProxy::Status::kFail, _)); - - // Use a crypto session ID that hasn't been reported. - proxy_->Process(kTestFunction, crypto_session_id + 1, kAnyInput, - kExpectedOutputDataSize, - base::BindOnce(&CallbackMock::ProcessCallback, - base::Unretained(&callback_mock_))); -} - -// Matcher for checking whether the structure passed to -// NegotiateCryptoSessionKeyExchange has the expected values. -MATCHER_P2(MatchesKeyExchangeStructure, expected, input_struct_size, "") { - D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA* actual = - static_cast<D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA*>(arg); - if (expected->HWProtectionFunctionID != actual->HWProtectionFunctionID) { - *result_listener << "function IDs mismatch. Expected " - << expected->HWProtectionFunctionID << " actual " - << actual->HWProtectionFunctionID; - return false; - } - D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA* expected_input_data = - expected->pInputData; - D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA* actual_input_data = - actual->pInputData; - if (memcmp(expected_input_data, actual_input_data, input_struct_size) != 0) { - *result_listener - << "D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA don't match."; - return false; - } - D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA* expected_output_data = - expected->pOutputData; - D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA* actual_output_data = - actual->pOutputData; - // Don't check that pbOutput field. It's filled by the callee. - if (expected_output_data->PrivateDataSize != - actual_output_data->PrivateDataSize) { - *result_listener << "D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA::" - "PrivateDataSize don't match. Expected " - << expected_output_data->PrivateDataSize << " actual " - << actual_output_data->PrivateDataSize; - return false; - } - if (expected_output_data->HWProtectionDataSize != - actual_output_data->HWProtectionDataSize) { - *result_listener << "D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA::" - "HWProtectionDataSize don't match. Expected " - << expected_output_data->HWProtectionDataSize << " actual " - << actual_output_data->HWProtectionDataSize; - return false; - } - if (expected_output_data->TransportTime != - actual_output_data->TransportTime) { - *result_listener << "D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA::" - "TransportTime don't match. Expected " - << expected_output_data->TransportTime << " actual " - << actual_output_data->TransportTime; - return false; - } - if (expected_output_data->ExecutionTime != - actual_output_data->ExecutionTime) { - *result_listener << "D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA::" - "ExecutionTime don't match. Expected " - << expected_output_data->ExecutionTime << " actual " - << actual_output_data->ExecutionTime; - return false; - } - if (expected_output_data->MaxHWProtectionDataSize != - actual_output_data->MaxHWProtectionDataSize) { - *result_listener << "D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA::" - "MaxHWProtectionDataSize don't match. Expected " - << expected_output_data->MaxHWProtectionDataSize - << " actual " - << actual_output_data->MaxHWProtectionDataSize; - return false; - } - return true; -} - -// Verifies that Process() works. -TEST_F(D3D11CdmProxyTest, Process) { - uint32_t crypto_session_id = 0; - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kOk, kTestProtocol, _)) - .WillOnce(SaveArg<2>(&crypto_session_id)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - Mock::VerifyAndClearExpectations(&callback_mock_); - - // The size nor value here matter, so making non empty non zero vector. - const std::vector<uint8_t> kAnyInput(16, 0xFF); - // Output size is also arbitrary, just has to match with the mock. - const uint32_t kExpectedOutputDataSize = 20; - - const uint32_t input_structure_size = - sizeof(D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA) - 4 + - kAnyInput.size(); - const uint32_t output_structure_size = - sizeof(D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA) - 4 + - kExpectedOutputDataSize; - std::unique_ptr<uint8_t[]> input_data_raw(new uint8_t[input_structure_size]); - std::unique_ptr<uint8_t[]> output_data_raw( - new uint8_t[output_structure_size]); - - D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA* input_data = - reinterpret_cast<D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA*>( - input_data_raw.get()); - D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA* output_data = - reinterpret_cast<D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA*>( - output_data_raw.get()); - - D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA expected_key_exchange_data = {}; - expected_key_exchange_data.HWProtectionFunctionID = kTestFunctionId; - expected_key_exchange_data.pInputData = input_data; - expected_key_exchange_data.pOutputData = output_data; - input_data->PrivateDataSize = kPrivateInputSize; - input_data->HWProtectionDataSize = 0; - memcpy(input_data->pbInput, kAnyInput.data(), kAnyInput.size()); - - output_data->PrivateDataSize = kPrivateOutputSize; - output_data->HWProtectionDataSize = 0; - output_data->TransportTime = 0; - output_data->ExecutionTime = 0; - output_data->MaxHWProtectionDataSize = kExpectedOutputDataSize; - - // The value does not matter, so making non zero vector. - std::vector<uint8_t> test_output_data(kExpectedOutputDataSize, 0xAA); - EXPECT_CALL(callback_mock_, - ProcessCallback(CdmProxy::Status::kOk, test_output_data)); - - auto set_test_output_data = [&test_output_data](void* output) { - D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA* kex_struct = - static_cast<D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA*>(output); - memcpy(kex_struct->pOutputData->pbOutput, test_output_data.data(), - test_output_data.size()); - }; - - COM_EXPECT_CALL(video_context_mock_, - NegotiateCryptoSessionKeyExchange( - _, sizeof(expected_key_exchange_data), - MatchesKeyExchangeStructure(&expected_key_exchange_data, - input_structure_size))) - .WillOnce(DoAll(WithArgs<2>(Invoke(set_test_output_data)), Return(S_OK))); - - proxy_->Process(kTestFunction, crypto_session_id, kAnyInput, - kExpectedOutputDataSize, - base::BindOnce(&CallbackMock::ProcessCallback, - base::Unretained(&callback_mock_))); -} - -TEST_F(D3D11CdmProxyTest, CreateMediaCryptoSessionUninitialized) { - // The size nor value here matter, so making non empty non zero vector. - const std::vector<uint8_t> kAnyInput(16, 0xFF); - EXPECT_CALL(callback_mock_, - CreateMediaCryptoSessionCallback(CdmProxy::Status::kFail, _, _)); - proxy_->CreateMediaCryptoSession( - kAnyInput, base::BindOnce(&CallbackMock::CreateMediaCryptoSessionCallback, - base::Unretained(&callback_mock_))); -} - -// Tests the case where no extra data is specified. This is a success case. -TEST_F(D3D11CdmProxyTest, CreateMediaCryptoSessionNoExtraData) { - uint32_t crypto_session_id_from_initialize = 0; - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kOk, kTestProtocol, _)) - .WillOnce(SaveArg<2>(&crypto_session_id_from_initialize)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - Mock::VerifyAndClearExpectations(&callback_mock_); - - // Expect a new crypto session. - EXPECT_CALL(callback_mock_, CreateMediaCryptoSessionCallback( - CdmProxy::Status::kOk, - Ne(crypto_session_id_from_initialize), _)); - auto media_crypto_session_mock = CreateD3D11Mock<D3D11CryptoSessionMock>(); - COM_EXPECT_CALL(video_device_mock_, - CreateCryptoSession(Pointee(CRYPTO_TYPE_GUID), _, - Pointee(CRYPTO_TYPE_GUID), _)) - .WillOnce(SetComPointeeAndReturnOk<3>(media_crypto_session_mock.Get())); - - COM_EXPECT_CALL(video_context1_mock_, GetDataForNewHardwareKey(_, _, _, _)) - .Times(0); - - COM_EXPECT_CALL(video_context1_mock_, - CheckCryptoSessionStatus(media_crypto_session_mock.Get(), _)) - .WillOnce(DoAll(SetArgPointee<1>(D3D11_CRYPTO_SESSION_STATUS_OK), - Return(S_OK))); - proxy_->CreateMediaCryptoSession( - std::vector<uint8_t>(), - base::BindOnce(&CallbackMock::CreateMediaCryptoSessionCallback, - base::Unretained(&callback_mock_))); -} - -// |arg| is void*. This casts the pointer to uint8_t* and checks whether they -// match. -MATCHER_P(CastedToUint8Are, expected, "") { - const uint8_t* actual = static_cast<const uint8_t*>(arg); - for (size_t i = 0; i < expected.size(); ++i) { - if (actual[i] != expected[i]) { - *result_listener << "Mismatch at element " << i; - return false; - } - } - return true; -} - -// Verifies that extra data is used when creating a media crypto session. -TEST_F(D3D11CdmProxyTest, CreateMediaCryptoSessionWithExtraData) { - uint32_t crypto_session_id_from_initialize = 0; - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kOk, kTestProtocol, _)) - .WillOnce(SaveArg<2>(&crypto_session_id_from_initialize)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - Mock::VerifyAndClearExpectations(&callback_mock_); - - // Expect a new crypto session. - EXPECT_CALL(callback_mock_, CreateMediaCryptoSessionCallback( - CdmProxy::Status::kOk, - Ne(crypto_session_id_from_initialize), _)); - - auto media_crypto_session_mock = CreateD3D11Mock<D3D11CryptoSessionMock>(); - COM_EXPECT_CALL(video_device_mock_, - CreateCryptoSession(Pointee(CRYPTO_TYPE_GUID), _, - Pointee(CRYPTO_TYPE_GUID), _)) - .WillOnce(SetComPointeeAndReturnOk<3>(media_crypto_session_mock.Get())); - // The size nor value here matter, so making non empty non zero vector. - const std::vector<uint8_t> kAnyInput(16, 0xFF); - const uint64_t kAnyOutputData = 23298u; - COM_EXPECT_CALL(video_context1_mock_, - GetDataForNewHardwareKey(media_crypto_session_mock.Get(), - kAnyInput.size(), - CastedToUint8Are(kAnyInput), _)) - .WillOnce(DoAll(SetArgPointee<3>(kAnyOutputData), Return(S_OK))); - - COM_EXPECT_CALL(video_context1_mock_, - CheckCryptoSessionStatus(media_crypto_session_mock.Get(), _)) - .WillOnce(DoAll(SetArgPointee<1>(D3D11_CRYPTO_SESSION_STATUS_OK), - Return(S_OK))); - proxy_->CreateMediaCryptoSession( - kAnyInput, base::BindOnce(&CallbackMock::CreateMediaCryptoSessionCallback, - base::Unretained(&callback_mock_))); -} - -// Verify that GetCdmContext() is implemented and does not return null. -TEST_F(D3D11CdmProxyTest, GetCdmContext) { - base::WeakPtr<CdmContext> context = proxy_->GetCdmContext(); - ASSERT_TRUE(context); -} - -TEST_F(D3D11CdmProxyTest, GetCdmProxyContext) { - base::WeakPtr<CdmContext> context = proxy_->GetCdmContext(); - ASSERT_TRUE(context); - ASSERT_TRUE(context->GetCdmProxyContext()); -} - -// No keys are set. -TEST_F(D3D11CdmProxyTest, GetD3D11DecryptContextNoKey) { - base::WeakPtr<CdmContext> context = proxy_->GetCdmContext(); - ASSERT_TRUE(context); - CdmProxyContext* proxy_context = context->GetCdmProxyContext(); - auto decrypt_context = - proxy_context->GetD3D11DecryptContext(kTestKeyType, ""); - EXPECT_FALSE(decrypt_context); -} - -// A key is set but no keys for the key type requested. -TEST_F(D3D11CdmProxyTest, GetD3D11DecryptContextNoKeyForKeyType) { - uint32_t crypto_session_id_from_initialize = 0; - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kOk, kTestProtocol, _)) - .WillOnce(SaveArg<2>(&crypto_session_id_from_initialize)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - Mock::VerifyAndClearExpectations(&callback_mock_); - - const std::vector<uint8_t> kAnyBlob = {0x01, 0x4f, 0x83}; - - EXPECT_CALL(callback_mock_, SetKeyCallback(CdmProxy::Status::kOk)); - proxy_->SetKey(crypto_session_id_from_initialize, kAnyBlob, - CdmProxy::KeyType::kDecryptAndDecode, kAnyBlob, - base::BindOnce(&CallbackMock::SetKeyCallback, - base::Unretained(&callback_mock_))); - - base::WeakPtr<CdmContext> context = proxy_->GetCdmContext(); - CdmProxyContext* proxy_context = context->GetCdmProxyContext(); - auto decrypt_context = proxy_context->GetD3D11DecryptContext( - CdmProxy::KeyType::kDecryptOnly, - std::string(kAnyBlob.begin(), kAnyBlob.end())); - EXPECT_FALSE(decrypt_context); -} - -// Verifies that keys are set and is accessible with a getter. -TEST_F(D3D11CdmProxyTest, SetKeyAndGetDecryptContext) { - base::WeakPtr<CdmContext> context = proxy_->GetCdmContext(); - ASSERT_TRUE(context); - CdmProxyContext* proxy_context = context->GetCdmProxyContext(); - - uint32_t crypto_session_id_from_initialize = 0; - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kOk, kTestProtocol, _)) - .WillOnce(SaveArg<2>(&crypto_session_id_from_initialize)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - Mock::VerifyAndClearExpectations(&callback_mock_); - - std::vector<uint8_t> kKeyId = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - }; - std::vector<uint8_t> kKeyBlob = { - 0xab, 0x01, 0x20, 0xd3, 0xee, 0x05, 0x99, 0x87, - 0xff, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x7F, - }; - - base::MockCallback<CdmContext::EventCB> event_cb; - auto callback_registration = context->RegisterEventCB(event_cb.Get()); - EXPECT_CALL(event_cb, Run(CdmContext::Event::kHasAdditionalUsableKey)); - - EXPECT_CALL(callback_mock_, SetKeyCallback(CdmProxy::Status::kOk)); - proxy_->SetKey(crypto_session_id_from_initialize, kKeyId, kTestKeyType, - kKeyBlob, - base::BindOnce(&CallbackMock::SetKeyCallback, - base::Unretained(&callback_mock_))); - - // |event_cb| is posted. Run the loop to make sure it's fired. - base::RunLoop().RunUntilIdle(); - - std::string key_id_str(kKeyId.begin(), kKeyId.end()); - auto decrypt_context = - proxy_context->GetD3D11DecryptContext(kTestKeyType, key_id_str); - ASSERT_TRUE(decrypt_context); - - EXPECT_TRUE(decrypt_context->crypto_session) - << "Crypto session should not be null."; - const uint8_t* key_blob = - reinterpret_cast<const uint8_t*>(decrypt_context->key_blob); - EXPECT_EQ(kKeyBlob, std::vector<uint8_t>( - key_blob, key_blob + decrypt_context->key_blob_size)); - EXPECT_EQ(CRYPTO_TYPE_GUID, decrypt_context->key_info_guid); -} - -// Verify that the keys are not accessible via CdmProxyContext, after a -// teardown.. -TEST_F(D3D11CdmProxyTest, ClearKeysAfterHardwareContentProtectionTeardown) { - base::RunLoop run_loop; - - uint32_t crypto_session_id_from_initialize = 0; - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kOk, kTestProtocol, _)) - .WillOnce(SaveArg<2>(&crypto_session_id_from_initialize)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - Mock::VerifyAndClearExpectations(&callback_mock_); - - std::vector<uint8_t> kKeyId = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - }; - std::vector<uint8_t> kKeyBlob = { - 0xab, 0x01, 0x20, 0xd3, 0xee, 0x05, 0x99, 0x87, - 0xff, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x7F, - }; - EXPECT_CALL(callback_mock_, SetKeyCallback(CdmProxy::Status::kOk)); - proxy_->SetKey(crypto_session_id_from_initialize, kKeyId, kTestKeyType, - kKeyBlob, - base::BindOnce(&CallbackMock::SetKeyCallback, - base::Unretained(&callback_mock_))); - - EXPECT_CALL(client_, NotifyHardwareReset()).WillOnce(Invoke([&run_loop]() { - run_loop.Quit(); - })); - - SetEvent(teardown_event_); - run_loop.Run(); - - base::WeakPtr<CdmContext> context = proxy_->GetCdmContext(); - ASSERT_TRUE(context); - CdmProxyContext* proxy_context = context->GetCdmProxyContext(); - - std::string key_id_str(kKeyId.begin(), kKeyId.end()); - auto decrypt_context = - proxy_context->GetD3D11DecryptContext(kTestKeyType, key_id_str); - ASSERT_FALSE(decrypt_context); -} - -// Verify that removing a key works. -TEST_F(D3D11CdmProxyTest, RemoveKey) { - base::WeakPtr<CdmContext> context = proxy_->GetCdmContext(); - ASSERT_TRUE(context); - CdmProxyContext* proxy_context = context->GetCdmProxyContext(); - - uint32_t crypto_session_id_from_initialize = 0; - EXPECT_CALL(callback_mock_, - InitializeCallback(CdmProxy::Status::kOk, kTestProtocol, _)) - .WillOnce(SaveArg<2>(&crypto_session_id_from_initialize)); - ASSERT_NO_FATAL_FAILURE( - Initialize(&client_, base::BindOnce(&CallbackMock::InitializeCallback, - base::Unretained(&callback_mock_)))); - Mock::VerifyAndClearExpectations(&callback_mock_); - - std::vector<uint8_t> kKeyId = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - }; - std::vector<uint8_t> kKeyBlob = { - 0xab, 0x01, 0x20, 0xd3, 0xee, 0x05, 0x99, 0x87, - 0xff, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x7F, - }; - EXPECT_CALL(callback_mock_, SetKeyCallback(CdmProxy::Status::kOk)); - EXPECT_CALL(callback_mock_, RemoveKeyCallback(CdmProxy::Status::kOk)); - proxy_->SetKey(crypto_session_id_from_initialize, kKeyId, kTestKeyType, - kKeyBlob, - base::BindOnce(&CallbackMock::SetKeyCallback, - base::Unretained(&callback_mock_))); - proxy_->RemoveKey(crypto_session_id_from_initialize, kKeyId, - base::BindOnce(&CallbackMock::RemoveKeyCallback, - base::Unretained(&callback_mock_))); - - std::string keyblob_str(kKeyId.begin(), kKeyId.end()); - auto decrypt_context = - proxy_context->GetD3D11DecryptContext(kTestKeyType, keyblob_str); - EXPECT_FALSE(decrypt_context); -} - -// Calling SetKey() and RemoveKey() for non-existent crypto session should -// fail but not crash. -TEST_F(D3D11CdmProxyTest, SetRemoveKeyWrongCryptoSessionId) { - const uint32_t kAnyCryptoSessionId = 0x9238; - const std::vector<uint8_t> kEmpty; - EXPECT_CALL(callback_mock_, RemoveKeyCallback(CdmProxy::Status::kFail)); - EXPECT_CALL(callback_mock_, SetKeyCallback(CdmProxy::Status::kFail)); - proxy_->RemoveKey(kAnyCryptoSessionId, kEmpty, - base::BindOnce(&CallbackMock::RemoveKeyCallback, - base::Unretained(&callback_mock_))); - proxy_->SetKey(kAnyCryptoSessionId, kEmpty, kTestKeyType, kEmpty, - base::BindOnce(&CallbackMock::SetKeyCallback, - base::Unretained(&callback_mock_))); -} - -TEST_F(D3D11CdmProxyTest, ProxyInvalidationInvalidatesCdmContext) { - base::WeakPtr<CdmContext> context = proxy_->GetCdmContext(); - EXPECT_TRUE(context); - proxy_.reset(); - EXPECT_FALSE(context); -} - -} // namespace media
diff --git a/media/gpu/windows/d3d11_decryptor.cc b/media/gpu/windows/d3d11_decryptor.cc deleted file mode 100644 index 9f64e0c..0000000 --- a/media/gpu/windows/d3d11_decryptor.cc +++ /dev/null
@@ -1,381 +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 "media/gpu/windows/d3d11_decryptor.h" - -#include "base/bind.h" -#include "base/logging.h" -#include "base/stl_util.h" -#include "media/base/decoder_buffer.h" -#include "media/gpu/windows/d3d11_com_defs.h" - -namespace media { - -namespace { - -// "A buffer is defined as a single subresource." -// https://msdn.microsoft.com/en-us/library/windows/desktop/ff476901(v=vs.85).aspx -const UINT kSubresourceIndex = 0; -const UINT kWaitIfGPUBusy = 0; - -// This value is somewhat arbitrary but is a multiple of 16 and 4K and is -// equal to D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION. Since the buffers are cast -// to ID3D11Texture2D, setting it as its size should make sense. -const UINT kBufferSize = 16384; - -// Creates ID3D11Buffer using the values. Return true on success. -bool CreateBuffer(ID3D11Device* device, - D3D11_USAGE usage, - UINT bind_flags, - UINT cpu_access, - ID3D11Buffer** out) { - D3D11_BUFFER_DESC buf_desc = {}; - - buf_desc.ByteWidth = kBufferSize; - buf_desc.BindFlags = bind_flags; - buf_desc.Usage = usage; - buf_desc.CPUAccessFlags = cpu_access; - - HRESULT hresult = device->CreateBuffer(&buf_desc, nullptr, out); - return SUCCEEDED(hresult); -} - -// Copies |input| into |output|, the output buffer should be a staging buffer -// that is CPU writable. -bool CopyDataToBuffer(base::span<const uint8_t> input, - ID3D11DeviceContext* device_context, - ID3D11Buffer* output) { - D3D11_BUFFER_DESC output_buffer_desc = {}; - output->GetDesc(&output_buffer_desc); - - if (output_buffer_desc.ByteWidth < input.size()) { - DVLOG(1) << input.size() << " does not fit in " - << output_buffer_desc.ByteWidth; - return false; - } - - D3D11_MAPPED_SUBRESOURCE map_resource = {}; - HRESULT hresult = - device_context->Map(output, kSubresourceIndex, D3D11_MAP_WRITE, - kWaitIfGPUBusy, &map_resource); - if (FAILED(hresult)) { - DVLOG(3) << "Failed to map buffer for writing."; - return false; - } - memcpy(map_resource.pData, input.data(), input.size_bytes()); - device_context->Unmap(output, kSubresourceIndex); - return true; -} - -// Copies |input| into |output|. The input buffer is should be a staging buffer -// that is CPU readable. -bool CopyDataOutFromBuffer(ID3D11Buffer* input, - size_t input_size, - ID3D11DeviceContext* device_context, - std::vector<uint8_t>* output) { - D3D11_MAPPED_SUBRESOURCE map_resource = {}; - HRESULT hresult = device_context->Map( - input, kSubresourceIndex, D3D11_MAP_READ, kWaitIfGPUBusy, &map_resource); - if (FAILED(hresult)) { - DVLOG(3) << "Failed to map buffer for reading."; - return false; - } - output->resize(input_size); - memcpy(output->data(), map_resource.pData, input_size); - device_context->Unmap(input, kSubresourceIndex); - return true; -} - -D3D11_AES_CTR_IV StringIvToD3D11Iv(const std::string& iv) { - D3D11_AES_CTR_IV d3d11_iv = {}; - DCHECK_LE(iv.size(), 16u); - memcpy(&d3d11_iv, iv.data(), iv.size()); - return d3d11_iv; -} - -// Returns true if the entire sample is encrypted. -bool IsWholeSampleEncrypted(const DecryptConfig& decrypt_config, - size_t sample_size) { - const auto& subsamples = decrypt_config.subsamples(); - if (subsamples.size() != 1) - return false; - - return subsamples.front().clear_bytes == 0 && - subsamples.front().cypher_bytes == sample_size; -} - -// Checks whether |device1| is the same component as |device2|. -// Note that comparing COM pointers require using their IUnknowns. -// https://docs.microsoft.com/en-us/windows/desktop/api/unknwn/nf-unknwn-iunknown-queryinterface(q_) -bool SameDevices(ComD3D11Device device1, ComD3D11Device device2) { - // For the case where both are nullptrs, they aren't devices, so returning - // false here. - if (!device1 || !device2) - return false; - Microsoft::WRL::ComPtr<IUnknown> device1_iunknown; - Microsoft::WRL::ComPtr<IUnknown> device2_iunknown; - HRESULT hr = device1.CopyTo(device1_iunknown.ReleaseAndGetAddressOf()); - if (FAILED(hr)) - return false; - hr = device2.CopyTo(device2_iunknown.ReleaseAndGetAddressOf()); - if (FAILED(hr)) - return false; - return device1_iunknown == device2_iunknown; -} - -// Returns a value that is bigger than or equal to |num| that is a -// multiple of 16. -// E.g. num = 15 returns 16, 17 returns 32. -UINT To16Multiple(size_t num) { - return ((num + 15) >> 4) << 4; -} - -} // namespace - -D3D11Decryptor::D3D11Decryptor(CdmProxyContext* cdm_proxy_context) - : cdm_proxy_context_(cdm_proxy_context) { - DCHECK(cdm_proxy_context_); -} - -D3D11Decryptor::~D3D11Decryptor() {} - -void D3D11Decryptor::RegisterNewKeyCB(StreamType stream_type, - NewKeyCB new_key_cb) { - // TODO(crbug.com/821288): Use RegisterNewKeyCB() on CdmContext, and remove - // RegisterNewKeyCB from Decryptor interface. - NOTREACHED(); -} - -void D3D11Decryptor::Decrypt(StreamType stream_type, - scoped_refptr<DecoderBuffer> encrypted, - DecryptCB decrypt_cb) { - if (encrypted->end_of_stream()) { - std::move(decrypt_cb).Run(kSuccess, encrypted); - return; - } - - const auto* decrypt_config = encrypted->decrypt_config(); - if (!decrypt_config) { - // Not encrypted, nothing to do. - std::move(decrypt_cb).Run(kSuccess, encrypted); - return; - } - - if (decrypt_config->HasPattern()) { - DVLOG(3) << "Cannot handle pattern decryption."; - std::move(decrypt_cb).Run(kError, nullptr); - return; - } - - auto context = cdm_proxy_context_->GetD3D11DecryptContext( - CdmProxy::KeyType::kDecryptOnly, decrypt_config->key_id()); - if (!context) { - std::move(decrypt_cb).Run(kNoKey, nullptr); - return; - } - - // Because DecryptionBlt() implementation checks whether the device, buffers, - // and the crypto session are from the same device, the buffers have to be - // recreated. - if (!InitializeDecryptionBuffer(*context)) { - std::move(decrypt_cb).Run(kError, nullptr); - return; - } - - std::vector<uint8_t> output; - if (IsWholeSampleEncrypted(*encrypted->decrypt_config(), - encrypted->data_size())) { - if (!CtrDecrypt(base::make_span(encrypted->data(), encrypted->data_size()), - encrypted->decrypt_config()->iv(), *context, &output)) { - std::move(decrypt_cb).Run(kError, nullptr); - return; - } - } else { - if (!SubsampleCtrDecrypt(encrypted, *context, &output)) { - std::move(decrypt_cb).Run(kError, nullptr); - return; - } - } - - auto decoder_buffer = DecoderBuffer::CopyFrom(output.data(), output.size()); - decoder_buffer->set_timestamp(encrypted->timestamp()); - decoder_buffer->set_duration(encrypted->duration()); - decoder_buffer->set_is_key_frame(encrypted->is_key_frame()); - decoder_buffer->CopySideDataFrom(encrypted->side_data(), - encrypted->side_data_size()); - std::move(decrypt_cb).Run(kSuccess, decoder_buffer); -} - -void D3D11Decryptor::CancelDecrypt(StreamType stream_type) { - // Decrypt() calls the DecryptCB synchronously so there's nothing to cancel. -} - -void D3D11Decryptor::InitializeAudioDecoder(const AudioDecoderConfig& config, - DecoderInitCB init_cb) { - // D3D11Decryptor does not support audio decoding. - std::move(init_cb).Run(false); -} - -void D3D11Decryptor::InitializeVideoDecoder(const VideoDecoderConfig& config, - DecoderInitCB init_cb) { - // D3D11Decryptor does not support video decoding. - std::move(init_cb).Run(false); -} - -void D3D11Decryptor::DecryptAndDecodeAudio( - scoped_refptr<DecoderBuffer> encrypted, - const AudioDecodeCB& audio_decode_cb) { - NOTREACHED() << "D3D11Decryptor does not support audio decoding"; -} - -void D3D11Decryptor::DecryptAndDecodeVideo( - scoped_refptr<DecoderBuffer> encrypted, - const VideoDecodeCB& video_decode_cb) { - NOTREACHED() << "D3D11Decryptor does not support video decoding"; -} - -void D3D11Decryptor::ResetDecoder(StreamType stream_type) { - NOTREACHED() << "D3D11Decryptor does not support audio/video decoding"; -} - -void D3D11Decryptor::DeinitializeDecoder(StreamType stream_type) { - // D3D11Decryptor does not support audio/video decoding, but since this can be - // called any time after InitializeAudioDecoder/InitializeVideoDecoder, - // nothing to be done here. -} - -bool D3D11Decryptor::InitializeDecryptionBuffer( - const CdmProxyContext::D3D11DecryptContext& decrypt_context) { - ComPtr<ID3D11Device> crypto_session_device; - decrypt_context.crypto_session->GetDevice( - crypto_session_device.ReleaseAndGetAddressOf()); - - // If they are the same devices, then there is no reason to reinitialize the - // buffers. - if (SameDevices(crypto_session_device, device_)) - return true; - - device_ = crypto_session_device; - device_->GetImmediateContext(device_context_.ReleaseAndGetAddressOf()); - - HRESULT hresult = - device_context_.CopyTo(video_context_.ReleaseAndGetAddressOf()); - if (FAILED(hresult)) { - DVLOG(2) << "Failed to get video context."; - return false; - } - - // The buffer is staging so that the data can be accessed by the CPU and HW. - if (!CreateBuffer(device_.Get(), D3D11_USAGE_STAGING, 0, // no binding. - D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE, - encrypted_sample_buffer_.ReleaseAndGetAddressOf())) { - DVLOG(2) << "Failed to create buffer for encrypted sample."; - return false; - } - - // Note that the cpu access flag is 0 because this buffer is used to write the - // decrypted buffer in HW. - if (!CreateBuffer(device_.Get(), D3D11_USAGE_DEFAULT, - D3D11_BIND_RENDER_TARGET, - 0, // no cpu access. - decrypted_sample_buffer_.ReleaseAndGetAddressOf())) { - DVLOG(2) << "Failed to create buffer for decrypted sample."; - return false; - } - - if (!CreateBuffer(device_.Get(), D3D11_USAGE_STAGING, 0, // no binding. - D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE, - cpu_accessible_buffer_.ReleaseAndGetAddressOf())) { - DVLOG(2) << "Failed to create cpu accessible buffer."; - return false; - } - - return true; -} - -bool D3D11Decryptor::CtrDecrypt( - base::span<const uint8_t> input, - const std::string& iv, - const CdmProxyContext::D3D11DecryptContext& context, - std::vector<uint8_t>* output) { - output->clear(); - if (input.empty()) - return true; - - if (!CopyDataToBuffer(input, device_context_.Get(), - encrypted_sample_buffer_.Get())) { - return false; - } - - D3D11_AES_CTR_IV aes_ctr_iv = StringIvToD3D11Iv(iv); - - // The size of the encrypted bytes must be a multiple of 16. See more at - // https://crbug.com/849466. - D3D11_ENCRYPTED_BLOCK_INFO block_info = {}; - block_info.NumEncryptedBytesAtBeginning = To16Multiple(input.size()); - DCHECK_LE(block_info.NumEncryptedBytesAtBeginning, kBufferSize); - block_info.NumBytesInSkipPattern = - kBufferSize - block_info.NumEncryptedBytesAtBeginning; - - // ID3D11Buffers should be used but since the interface takes ID3D11Texture2D, - // it is reinterpret cast. See more at https://crbug.com/849466. - video_context_->DecryptionBlt( - context.crypto_session, - reinterpret_cast<ID3D11Texture2D*>(encrypted_sample_buffer_.Get()), - reinterpret_cast<ID3D11Texture2D*>(decrypted_sample_buffer_.Get()), - &block_info, context.key_blob_size, context.key_blob, sizeof(aes_ctr_iv), - &aes_ctr_iv); - - // Because DecryptionBlt() doesn't have a return value, this is a hack to - // check for decryption operation status. If it has been modified, then there - // was an error. See more at https://crbug.com/849466. - HRESULT result = static_cast<HRESULT>(block_info.NumBytesInEncryptPattern); - if (FAILED(result)) { - DVLOG(3) << "Decryption error :" - << logging::SystemErrorCodeToString(result); - return false; - } - - device_context_->CopyResource(cpu_accessible_buffer_.Get(), - decrypted_sample_buffer_.Get()); - return CopyDataOutFromBuffer(cpu_accessible_buffer_.Get(), input.size(), - device_context_.Get(), output); -} - -// TODO(crbug.com/845631): This is the same as DecryptCencBuffer(), so it should -// be deduped. -bool D3D11Decryptor::SubsampleCtrDecrypt( - scoped_refptr<DecoderBuffer> encrypted, - const CdmProxyContext::D3D11DecryptContext& context, - std::vector<uint8_t>* output) { - const auto& subsamples = encrypted->decrypt_config()->subsamples(); - std::vector<uint8_t> encrypted_data; - const uint8_t* data = encrypted->data(); - for (const auto& subsample : subsamples) { - data += subsample.clear_bytes; - encrypted_data.insert(encrypted_data.end(), data, - data + subsample.cypher_bytes); - data += subsample.cypher_bytes; - } - - std::vector<uint8_t> decrypted_data; - if (!CtrDecrypt(encrypted_data, encrypted->decrypt_config()->iv(), context, - &decrypted_data)) { - return false; - } - - data = encrypted->data(); - const uint8_t* decrypted_data_ptr = decrypted_data.data(); - for (const auto& subsample : subsamples) { - output->insert(output->end(), data, data + subsample.clear_bytes); - data += subsample.clear_bytes; - output->insert(output->end(), decrypted_data_ptr, - decrypted_data_ptr + subsample.cypher_bytes); - decrypted_data_ptr += subsample.cypher_bytes; - data += subsample.cypher_bytes; - } - return true; -} - -} // namespace media
diff --git a/media/gpu/windows/d3d11_decryptor.h b/media/gpu/windows/d3d11_decryptor.h deleted file mode 100644 index 2f49a28..0000000 --- a/media/gpu/windows/d3d11_decryptor.h +++ /dev/null
@@ -1,96 +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 MEDIA_GPU_WINDOWS_D3D11_DECRYPTOR_H_ -#define MEDIA_GPU_WINDOWS_D3D11_DECRYPTOR_H_ - -#include <wrl/client.h> - -#include "base/containers/span.h" -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "media/base/decryptor.h" -#include "media/base/win/d3d11_create_device_cb.h" -#include "media/cdm/cdm_proxy_context.h" -#include "media/gpu/media_gpu_export.h" - -namespace media { - -class MEDIA_GPU_EXPORT D3D11Decryptor : public Decryptor { - public: - explicit D3D11Decryptor(CdmProxyContext* cdm_proxy_context); - ~D3D11Decryptor() final; - - // Decryptor implementation. - void RegisterNewKeyCB(StreamType stream_type, NewKeyCB key_added_cb) final; - void Decrypt(StreamType stream_type, - scoped_refptr<DecoderBuffer> encrypted, - DecryptCB decrypt_cb) final; - void CancelDecrypt(StreamType stream_type) final; - void InitializeAudioDecoder(const AudioDecoderConfig& config, - DecoderInitCB init_cb) final; - void InitializeVideoDecoder(const VideoDecoderConfig& config, - DecoderInitCB init_cb) final; - void DecryptAndDecodeAudio(scoped_refptr<DecoderBuffer> encrypted, - const AudioDecodeCB& audio_decode_cb) final; - void DecryptAndDecodeVideo(scoped_refptr<DecoderBuffer> encrypted, - const VideoDecodeCB& video_decode_cb) final; - void ResetDecoder(StreamType stream_type) final; - void DeinitializeDecoder(StreamType stream_type) final; - - private: - // Initialize the buffers for decryption from decryption context. - bool InitializeDecryptionBuffer( - const CdmProxyContext::D3D11DecryptContext& decrypt_context); - - // CTR mode decrypts |encrypted| data into |output|. |output| is always - // cleared. Returns true on success. - bool CtrDecrypt(base::span<const uint8_t> input, - const std::string& iv, - const CdmProxyContext::D3D11DecryptContext& context, - std::vector<uint8_t>* output); - - // CTR mode decryption method, aware of subsamples. |output| is always - // cleared. Returns true and populates |output| on success. - bool SubsampleCtrDecrypt(scoped_refptr<DecoderBuffer> encrypted, - const CdmProxyContext::D3D11DecryptContext& context, - std::vector<uint8_t>* output); - - CdmProxyContext* cdm_proxy_context_; - - template <class T> - using ComPtr = Microsoft::WRL::ComPtr<T>; - - // After a successful InitializeDecryptionBuffer() call, these are set for the - // current Decrypt() call. - ComPtr<ID3D11Device> device_; - ComPtr<ID3D11DeviceContext> device_context_; - ComPtr<ID3D11VideoContext> video_context_; - - // Due to how D3D11 resource permissons work, there are differences between - // CPU (user) and HW accessible buffers. And things get more complicated with - // what can read or write from/to it, what combinations are valid, and - // performance tradeoffs in giving different permissions. The most straight - // forward way is to use three buffers as described below. - - // A buffer where encrypted data is written by the CPU and is readable by the - // HW. - ComPtr<ID3D11Buffer> encrypted_sample_buffer_; - - // A buffer where the decrypted buffer is written by the HW that is not CPU - // accessible. - ComPtr<ID3D11Buffer> decrypted_sample_buffer_; - - // A CPU accessible buffer where the content of |decrypted_buffer_| is copied - // to. - ComPtr<ID3D11Buffer> cpu_accessible_buffer_; - - base::WeakPtrFactory<D3D11Decryptor> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(D3D11Decryptor); -}; - -} // namespace media - -#endif // MEDIA_GPU_WINDOWS_D3D11_DECRYPTOR_H_
diff --git a/media/gpu/windows/d3d11_decryptor_unittest.cc b/media/gpu/windows/d3d11_decryptor_unittest.cc deleted file mode 100644 index f00dbec..0000000 --- a/media/gpu/windows/d3d11_decryptor_unittest.cc +++ /dev/null
@@ -1,519 +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 "media/gpu/windows/d3d11_decryptor.h" - -#include <initguid.h> - -#include <array> - -#include "base/bind.h" -#include "base/containers/span.h" -#include "base/stl_util.h" -#include "media/base/decoder_buffer.h" -#include "media/base/subsample_entry.h" -#include "media/base/win/d3d11_mocks.h" -#include "media/cdm/cdm_proxy_context.h" - -using ::testing::_; -using ::testing::AtLeast; -using ::testing::DoAll; -using ::testing::ElementsAreArray; -using ::testing::Invoke; -using ::testing::IsNull; -using ::testing::Mock; -using ::testing::Pointee; -using ::testing::Return; -using ::testing::SetArgPointee; - -template <class T> -using ComPtr = Microsoft::WRL::ComPtr<T>; - -namespace media { - -namespace { -// clang-format off -// The value doesn't matter this is just a GUID. -DEFINE_GUID(TEST_GUID, - 0x01020304, 0xffee, 0xefba, - 0x93, 0xaa, 0x47, 0x77, 0x43, 0xb1, 0x22, 0x98); -// clang-format on - -// Should be non-0 so that it's different from the default TimeDelta. -constexpr base::TimeDelta kTestTimestamp = - base::TimeDelta::FromMilliseconds(33); - -const uint8_t kAnyKeyBlob[] = {3, 5, 38, 19}; -const char kKeyId[] = "some 16 byte id."; -const char kIv[] = "some 16 byte iv."; - -// For tests where the input doesn't matter. -const uint8_t kAnyInput[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -}; - -const SubsampleEntry kAnyInputSubsample(0, base::size(kAnyInput)); - -scoped_refptr<DecoderBuffer> TestDecoderBuffer( - const uint8_t* input, - size_t data_size, - const std::string& key_id, - const std::string& iv, - const std::vector<SubsampleEntry>& subsamples) { - scoped_refptr<DecoderBuffer> encrypted_buffer = - DecoderBuffer::CopyFrom(input, data_size); - - encrypted_buffer->set_decrypt_config( - DecryptConfig::CreateCencConfig(key_id, iv, subsamples)); - encrypted_buffer->set_timestamp(kTestTimestamp); - return encrypted_buffer; -} - -CdmProxyContext::D3D11DecryptContext TestDecryptContext( - ComPtr<D3D11CryptoSessionMock> crypto_session_mock) { - CdmProxyContext::D3D11DecryptContext decrypt_context = {}; - decrypt_context.crypto_session = crypto_session_mock.Get(); - decrypt_context.key_blob = kAnyKeyBlob; - decrypt_context.key_blob_size = base::size(kAnyKeyBlob); - decrypt_context.key_info_guid = TEST_GUID; - return decrypt_context; -} - -class CallbackMock { - public: - MOCK_METHOD2(DecryptCallback, Decryptor::DecryptCB::RunType); -}; - -class CdmProxyContextMock : public CdmProxyContext { - public: - MOCK_METHOD2(GetD3D11DecryptContext, - base::Optional<D3D11DecryptContext>(CdmProxy::KeyType key_type, - const std::string& key_id)); -}; - -// Checks that BUFFER_DESC has these fields match. -// Flags are ORed values, so this only checks that the expected flags are set. -// The other fields are ignored. -MATCHER_P3(BufferDescHas, usage, bind_flags, cpu_access, "") { - const D3D11_BUFFER_DESC& buffer_desc = *arg; - if (buffer_desc.Usage != usage) - return false; - - // Because the flags are enums the compiler infers that the input flags are - // signed ints. And the compiler rejects comparing signed int and unsigned - // int, so they are cast here. - const UINT unsigned_bind_flags = bind_flags; - const UINT unsigned_cpu_access_flags = cpu_access; - - if ((buffer_desc.BindFlags & unsigned_bind_flags) != unsigned_bind_flags) - return false; - - return (buffer_desc.CPUAccessFlags & unsigned_cpu_access_flags) == - unsigned_cpu_access_flags; -} - -// NumEncryptedBytesAtBeginning must be greater than or equal to the size of the -// encrypted data, and also a multiple of 16. -MATCHER_P(NumEncryptedBytesAtBeginningGreaterOrEq, value, "") { - const D3D11_ENCRYPTED_BLOCK_INFO& block_info = *arg; - if (block_info.NumEncryptedBytesAtBeginning < value) { - *result_listener << block_info.NumEncryptedBytesAtBeginning - << " is not less than " << value; - return false; - } - return block_info.NumEncryptedBytesAtBeginning % 16 == 0; -} - -ACTION_P(SetBufferDescSize, size) { - arg0->ByteWidth = size; -} - -MATCHER_P2(OutputDataEquals, data, size, "") { - scoped_refptr<DecoderBuffer> buffer = arg; - if (size != buffer->data_size()) { - return false; - } - if (buffer->timestamp() != kTestTimestamp) { - return false; - } - - std::vector<uint8_t> expected(data, data + size); - std::vector<uint8_t> actual(buffer->data(), - buffer->data() + buffer->data_size()); - return actual == expected; -} - -} // namespace - -class D3D11DecryptorTest : public ::testing::Test { - protected: - void SetUp() override { - decryptor_ = std::make_unique<D3D11Decryptor>(&mock_proxy_); - - device_mock_ = CreateD3D11Mock<D3D11DeviceMock>(); - device_context_mock_ = CreateD3D11Mock<D3D11DeviceContextMock>(); - video_context_mock_ = CreateD3D11Mock<D3D11VideoContextMock>(); - staging_buffer1_ = CreateD3D11Mock<D3D11BufferMock>(); - staging_buffer2_ = CreateD3D11Mock<D3D11BufferMock>(); - gpu_buffer_ = CreateD3D11Mock<D3D11BufferMock>(); - } - - // Only sets mock expectations to the objects. Use this for the case where the - // buffers are expected to be created from |device_mock_|, that's accessible - // through |crypto_session_mock|'s GetDevice() function. - void SetExpectationsForSuccessfulBufferInitialization( - D3D11CryptoSessionMock* crypto_session_mock, - CdmProxyContext::D3D11DecryptContext* decrypt_context) { - // As noted in the function comment, the device is accessible from the - // crypto session. - EXPECT_CALL(*crypto_session_mock, GetDevice(_)) - .Times(AtLeast(1)) - .WillRepeatedly(SetComPointee<0>(device_mock_.Get())); - - // The other components accessible (directly or indirectly) from the device. - COM_EXPECT_CALL(device_mock_, GetImmediateContext(_)) - .Times(AtLeast(1)) - .WillRepeatedly(SetComPointee<0>(device_context_mock_.Get())); - COM_EXPECT_CALL(device_context_mock_, - QueryInterface(IID_ID3D11VideoContext, _)) - .Times(AtLeast(1)) - .WillRepeatedly(SetComPointeeAndReturnOk<1>(video_context_mock_.Get())); - - EXPECT_CALL(mock_proxy_, - GetD3D11DecryptContext(CdmProxy::KeyType::kDecryptOnly, kKeyId)) - .WillOnce(Return(*decrypt_context)); - - // These return big enough size. - COM_ON_CALL(staging_buffer1_, GetDesc(_)) - .WillByDefault(SetBufferDescSize(20000)); - COM_ON_CALL(staging_buffer2_, GetDesc(_)) - .WillByDefault(SetBufferDescSize(20000)); - COM_ON_CALL(gpu_buffer_, GetDesc(_)) - .WillByDefault(SetBufferDescSize(20000)); - - // It should be requesting for 2 staging buffers one for writing the data to - // a GPU buffer and one for reading from the a GPU buffer. - COM_EXPECT_CALL(device_mock_, - CreateBuffer(BufferDescHas(D3D11_USAGE_STAGING, 0u, - D3D11_CPU_ACCESS_READ | - D3D11_CPU_ACCESS_WRITE), - nullptr, _)) - .WillOnce(SetComPointeeAndReturnOk<2>(staging_buffer1_.Get())) - .WillOnce(SetComPointeeAndReturnOk<2>(staging_buffer2_.Get())); - - // It should be requesting a GPU only accessible buffer to the decrypted - // output. - COM_EXPECT_CALL(device_mock_, - CreateBuffer(BufferDescHas(D3D11_USAGE_DEFAULT, - D3D11_BIND_RENDER_TARGET, 0u), - nullptr, _)) - .WillOnce(SetComPointeeAndReturnOk<2>(gpu_buffer_.Get())); - } - - // |input| is the input to the Decrypt() function, the subsample information - // is in |subsamples| therefore |input| may not be entirely encrypted. The - // data that is encrypted in |input| should be |encrypted_input|. - // |whole_output| is the expected output from the Decrypt() call, reported by - // the callback. The decrypted result of |encrypted_input| should be - // |decrypted_output|. - void ExpectSuccessfulDecryption(D3D11CryptoSessionMock* crypto_session_mock, - base::span<const uint8_t> input, - base::span<const uint8_t> encrypted_input, - base::span<const uint8_t> whole_output, - base::span<const uint8_t> decrypted_output, - const std::vector<SubsampleEntry>& subsamples, - D3D11Decryptor* decryptor) { - D3D11_MAPPED_SUBRESOURCE staging_buffer1_subresource = {}; - auto staging_buffer1_subresource_buffer = - std::make_unique<uint8_t[]>(20000); - staging_buffer1_subresource.pData = - staging_buffer1_subresource_buffer.get(); - - // It should be requesting for a memory mapped buffer, from the staging - // buffer, to pass the encrypted data to the GPU. - COM_EXPECT_CALL(device_context_mock_, - Map(staging_buffer1_.Get(), 0, D3D11_MAP_WRITE, _, _)) - .WillOnce( - DoAll(SetArgPointee<4>(staging_buffer1_subresource), Return(S_OK))); - COM_EXPECT_CALL(device_context_mock_, Unmap(staging_buffer1_.Get(), 0)); - - COM_EXPECT_CALL( - video_context_mock_, - DecryptionBlt( - crypto_session_mock, - reinterpret_cast<ID3D11Texture2D*>(staging_buffer1_.Get()), - reinterpret_cast<ID3D11Texture2D*>(gpu_buffer_.Get()), - NumEncryptedBytesAtBeginningGreaterOrEq(encrypted_input.size()), - sizeof(kAnyKeyBlob), kAnyKeyBlob, _, _)); - COM_EXPECT_CALL(device_context_mock_, - CopyResource(staging_buffer2_.Get(), gpu_buffer_.Get())); - - D3D11_MAPPED_SUBRESOURCE staging_buffer2_subresource = {}; - - // pData field is non-const void* so make a copy of kFakeDecryptedData that - // can be cast to void*. - std::unique_ptr<uint8_t[]> decrypted_data = - std::make_unique<uint8_t[]>(decrypted_output.size()); - memcpy(decrypted_data.get(), decrypted_output.data(), - decrypted_output.size()); - staging_buffer2_subresource.pData = decrypted_data.get(); - - // Tt should be requesting for a memory mapped buffer, from the staging - // buffer, to read the decrypted data out from the GPU buffer. - COM_EXPECT_CALL(device_context_mock_, - Map(staging_buffer2_.Get(), 0, D3D11_MAP_READ, _, _)) - .WillOnce( - DoAll(SetArgPointee<4>(staging_buffer2_subresource), Return(S_OK))); - COM_EXPECT_CALL(device_context_mock_, Unmap(staging_buffer2_.Get(), 0)); - - CallbackMock callbacks; - EXPECT_CALL(callbacks, - DecryptCallback(Decryptor::kSuccess, - OutputDataEquals(whole_output.data(), - whole_output.size()))); - - scoped_refptr<DecoderBuffer> encrypted_buffer = - TestDecoderBuffer(input.data(), input.size(), kKeyId, kIv, subsamples); - decryptor->Decrypt(Decryptor::kAudio, encrypted_buffer, - base::BindRepeating(&CallbackMock::DecryptCallback, - base::Unretained(&callbacks))); - - // Verify that the data copied to the GPU buffer is the encrypted portion. - EXPECT_TRUE(std::equal(encrypted_input.begin(), encrypted_input.end(), - staging_buffer1_subresource_buffer.get())); - } - - std::unique_ptr<D3D11Decryptor> decryptor_; - CdmProxyContextMock mock_proxy_; - - ComPtr<D3D11DeviceMock> device_mock_; - ComPtr<D3D11DeviceContextMock> device_context_mock_; - ComPtr<D3D11VideoContextMock> video_context_mock_; - - private: - ComPtr<D3D11BufferMock> staging_buffer1_; - ComPtr<D3D11BufferMock> staging_buffer2_; - ComPtr<D3D11BufferMock> gpu_buffer_; -}; - -// Verify that full sample encrypted sample works. -TEST_F(D3D11DecryptorTest, FullSampleCtrDecrypt) { - const uint8_t kInput[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - }; - const SubsampleEntry kSubsample(0, base::size(kInput)); - // This is arbitrary. Just used to check that this value is output from the - // method. - const uint8_t kFakeDecryptedData[] = { - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, - }; - static_assert(base::size(kFakeDecryptedData) == base::size(kInput), - "Fake input and output data size must match."); - - ComPtr<D3D11CryptoSessionMock> crypto_session_mock = - CreateD3D11Mock<D3D11CryptoSessionMock>(); - CdmProxyContext::D3D11DecryptContext decrypt_context = - TestDecryptContext(crypto_session_mock); - SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), - &decrypt_context); - - // The entire sample is encrypted so the encrypted/decrypted portions are the - // input/output. - ExpectSuccessfulDecryption(crypto_session_mock.Get(), kInput, kInput, - kFakeDecryptedData, kFakeDecryptedData, - {kSubsample}, decryptor_.get()); -} - -// Verify that it works for encrypted input that's not a multiple of 16. -TEST_F(D3D11DecryptorTest, InputSizeNotMultipleOf16) { - const uint8_t kInput[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - }; - const SubsampleEntry kSubsample(0, base::size(kInput)); - // This is arbitrary. Just used to check that this value is output from the - // method. - const uint8_t kFakeDecryptedData[] = { - 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, - }; - static_assert(base::size(kFakeDecryptedData) == base::size(kInput), - "Fake input and output data size must match."); - - ComPtr<D3D11CryptoSessionMock> crypto_session_mock = - CreateD3D11Mock<D3D11CryptoSessionMock>(); - CdmProxyContext::D3D11DecryptContext decrypt_context = - TestDecryptContext(crypto_session_mock); - - SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), - &decrypt_context); - - // The entire sample is encrypted so the encrypted/decrypted portions are the - // input/output. - ExpectSuccessfulDecryption(crypto_session_mock.Get(), kInput, kInput, - kFakeDecryptedData, kFakeDecryptedData, - {kSubsample}, decryptor_.get()); -} - -// Verify subsample decryption works. -TEST_F(D3D11DecryptorTest, SubsampleCtrDecrypt) { - // clang-format off - const uint8_t kInput[] = { - // clear 16 bytes. - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - // encrypted 16 bytes. - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - // clear 5 bytes. - 0, 1, 2, 3, 4, - // encrypted 16 bytes. - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - }; - // Encrypted parts of the input - const uint8_t kInputEncrypted[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - }; - // This is arbitrary. Just used to check that this value is output from the - // method. - const uint8_t kFakeOutputData[] = { - // clear 16 bytes. - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - // decrypted 16 bytes. - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, - // clear 5 bytes. - 0, 1, 2, 3, 4, - // decrypted 16 bytes. - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, - }; - const uint8_t kFakeDecryptedData[] = { - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, - }; - // clang-format on - static_assert(base::size(kFakeOutputData) == base::size(kInput), - "Fake input and output data size must match."); - const std::vector<SubsampleEntry> subsamples = {SubsampleEntry(16, 16), - SubsampleEntry(5, 16)}; - - ComPtr<D3D11CryptoSessionMock> crypto_session_mock = - CreateD3D11Mock<D3D11CryptoSessionMock>(); - CdmProxyContext::D3D11DecryptContext decrypt_context = - TestDecryptContext(crypto_session_mock); - - SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), - &decrypt_context); - ExpectSuccessfulDecryption(crypto_session_mock.Get(), kInput, kInputEncrypted, - kFakeOutputData, kFakeDecryptedData, subsamples, - decryptor_.get()); -} - -// Verify that if the input is too big, it fails. This may be removed if the -// implementation supports big input. -TEST_F(D3D11DecryptorTest, DecryptInputTooBig) { - // Something pretty big to be an audio frame. The actual data size doesn't - // matter. - std::array<uint8_t, 1000000> kInput; - const SubsampleEntry kSubsample(0, base::size(kInput)); - - ComPtr<D3D11CryptoSessionMock> crypto_session_mock = - CreateD3D11Mock<D3D11CryptoSessionMock>(); - CdmProxyContext::D3D11DecryptContext decrypt_context = - TestDecryptContext(crypto_session_mock); - - SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), - &decrypt_context); - CallbackMock callbacks; - EXPECT_CALL(callbacks, DecryptCallback(Decryptor::kError, IsNull())); - - scoped_refptr<DecoderBuffer> encrypted_buffer = TestDecoderBuffer( - kInput.data(), base::size(kInput), kKeyId, kIv, {kSubsample}); - decryptor_->Decrypt(Decryptor::kAudio, encrypted_buffer, - base::BindRepeating(&CallbackMock::DecryptCallback, - base::Unretained(&callbacks))); -} - -// If there is no decrypt config, it must be in the clear, so it shouldn't -// change the output. -TEST_F(D3D11DecryptorTest, NoDecryptConfig) { - scoped_refptr<DecoderBuffer> clear_buffer = - DecoderBuffer::CopyFrom(kAnyInput, base::size(kAnyInput)); - clear_buffer->set_timestamp(kTestTimestamp); - CallbackMock callbacks; - EXPECT_CALL( - callbacks, - DecryptCallback(Decryptor::kSuccess, - OutputDataEquals(kAnyInput, base::size(kAnyInput)))); - decryptor_->Decrypt(Decryptor::kAudio, clear_buffer, - base::BindRepeating(&CallbackMock::DecryptCallback, - base::Unretained(&callbacks))); -} - -// The current decryptor cannot deal with pattern encryption. -TEST_F(D3D11DecryptorTest, PatternDecryption) { - scoped_refptr<DecoderBuffer> encrypted_buffer = - DecoderBuffer::CopyFrom(kAnyInput, base::size(kAnyInput)); - encrypted_buffer->set_decrypt_config(DecryptConfig::CreateCbcsConfig( - kKeyId, kIv, {kAnyInputSubsample}, EncryptionPattern(1, 9))); - - CallbackMock callbacks; - EXPECT_CALL(callbacks, DecryptCallback(Decryptor::kError, IsNull())); - decryptor_->Decrypt(Decryptor::kAudio, encrypted_buffer, - base::BindRepeating(&CallbackMock::DecryptCallback, - base::Unretained(&callbacks))); -} - -// If there is no decrypt context, it's missing a key. -TEST_F(D3D11DecryptorTest, NoDecryptContext) { - scoped_refptr<DecoderBuffer> encrypted_buffer = TestDecoderBuffer( - kAnyInput, base::size(kAnyInput), kKeyId, kIv, {kAnyInputSubsample}); - - EXPECT_CALL(mock_proxy_, - GetD3D11DecryptContext(CdmProxy::KeyType::kDecryptOnly, kKeyId)) - .WillOnce(Return(base::nullopt)); - - CallbackMock callbacks; - EXPECT_CALL(callbacks, DecryptCallback(Decryptor::kNoKey, IsNull())); - decryptor_->Decrypt(Decryptor::kAudio, encrypted_buffer, - base::BindRepeating(&CallbackMock::DecryptCallback, - base::Unretained(&callbacks))); -} - -// Verify that if the crypto session's device is the same as the previous call, -// the buffers aren't recreated. -TEST_F(D3D11DecryptorTest, ReuseBuffers) { - ComPtr<D3D11CryptoSessionMock> crypto_session_mock = - CreateD3D11Mock<D3D11CryptoSessionMock>(); - CdmProxyContext::D3D11DecryptContext decrypt_context = - TestDecryptContext(crypto_session_mock); - - SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), - &decrypt_context); - - // This test doesn't require checking the output or the correctness of the - // decyrption, so just pass the input buffer for output. - ExpectSuccessfulDecryption(crypto_session_mock.Get(), kAnyInput, kAnyInput, - kAnyInput, kAnyInput, {kAnyInputSubsample}, - decryptor_.get()); - Mock::VerifyAndClearExpectations(crypto_session_mock.Get()); - Mock::VerifyAndClearExpectations(device_mock_.Get()); - Mock::VerifyAndClearExpectations(video_context_mock_.Get()); - Mock::VerifyAndClearExpectations(device_context_mock_.Get()); - Mock::VerifyAndClearExpectations(&mock_proxy_); - - COM_EXPECT_CALL(crypto_session_mock, GetDevice(_)) - .Times(AtLeast(1)) - .WillRepeatedly(SetComPointee<0>(device_mock_.Get())); - EXPECT_CALL(mock_proxy_, - GetD3D11DecryptContext(CdmProxy::KeyType::kDecryptOnly, kKeyId)) - .WillOnce(Return(decrypt_context)); - - // Buffers should not be (re)initialized on the next call to decrypt because - // it's the same device as the previous call. - COM_EXPECT_CALL(device_mock_, CreateBuffer(_, _, _)).Times(0); - - // This calls Decrypt() so that the expectations above are triggered. - ExpectSuccessfulDecryption(crypto_session_mock.Get(), kAnyInput, kAnyInput, - kAnyInput, kAnyInput, {kAnyInputSubsample}, - decryptor_.get()); -} - -} // namespace media
diff --git a/media/gpu/windows/d3d11_h264_accelerator.cc b/media/gpu/windows/d3d11_h264_accelerator.cc index b1e6e5e..df549d3a3 100644 --- a/media/gpu/windows/d3d11_h264_accelerator.cc +++ b/media/gpu/windows/d3d11_h264_accelerator.cc
@@ -10,7 +10,6 @@ #include "base/trace_event/trace_event.h" #include "media/base/media_log.h" #include "media/base/win/mf_helpers.h" -#include "media/cdm/cdm_proxy_context.h" #include "media/gpu/h264_decoder.h" #include "media/gpu/h264_dpb.h" #include "media/gpu/windows/d3d11_picture_buffer.h" @@ -64,20 +63,16 @@ D3D11H264Accelerator::D3D11H264Accelerator( D3D11VideoDecoderClient* client, MediaLog* media_log, - CdmProxyContext* cdm_proxy_context, ComD3D11VideoDecoder video_decoder, ComD3D11VideoDevice video_device, std::unique_ptr<VideoContextWrapper> video_context) : client_(client), media_log_(media_log), - cdm_proxy_context_(cdm_proxy_context), video_decoder_(video_decoder), video_device_(video_device), video_context_(std::move(video_context)) { DCHECK(client); DCHECK(media_log_); - // |cdm_proxy_context_| is non-null for encrypted content but can be null for - // clear content. } D3D11H264Accelerator::~D3D11H264Accelerator() {} @@ -99,28 +94,9 @@ const H264Picture::Vector& ref_pic_listb1, scoped_refptr<H264Picture> pic) { const bool is_encrypted = pic->decrypt_config(); - - std::unique_ptr<D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION> content_key; - // This decrypt context has to be outside the if block because pKeyInfo in - // D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION is a pointer (to a GUID). - base::Optional<CdmProxyContext::D3D11DecryptContext> decrypt_context; if (is_encrypted) { - DCHECK(cdm_proxy_context_) << "No CdmProxyContext but picture is encrypted"; - decrypt_context = cdm_proxy_context_->GetD3D11DecryptContext( - CdmProxy::KeyType::kDecryptAndDecode, pic->decrypt_config()->key_id()); - if (!decrypt_context) { - RecordFailure("Cannot find decrypt context for the frame."); - return DecoderStatus::kTryAgain; - } - - content_key = - std::make_unique<D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION>(); - content_key->pCryptoSession = decrypt_context->crypto_session; - content_key->pBlob = const_cast<void*>(decrypt_context->key_blob); - content_key->BlobSize = decrypt_context->key_blob_size; - content_key->pKeyInfoId = &decrypt_context->key_info_guid; - frame_iv_.assign(pic->decrypt_config()->iv().begin(), - pic->decrypt_config()->iv().end()); + RecordFailure("Cannot find decrypt context for the frame."); + return DecoderStatus::kFail; } HRESULT hr; @@ -128,7 +104,7 @@ hr = video_context_->DecoderBeginFrame( video_decoder_.Get(), static_cast<D3D11H264Picture*>(pic.get())->picture->output_view().Get(), - content_key ? sizeof(*content_key) : 0, content_key.get()); + 0, nullptr); if (hr == E_PENDING || hr == D3DERR_WASSTILLDRAWING) { // Hardware is busy. We should make the call again.
diff --git a/media/gpu/windows/d3d11_h264_accelerator.h b/media/gpu/windows/d3d11_h264_accelerator.h index 7022dc8c..cd9dd46 100644 --- a/media/gpu/windows/d3d11_h264_accelerator.h +++ b/media/gpu/windows/d3d11_h264_accelerator.h
@@ -26,17 +26,14 @@ #include "ui/gl/gl_image.h" namespace media { -class CdmProxyContext; + class D3D11H264Accelerator; class MediaLog; - class D3D11H264Accelerator : public H264Decoder::H264Accelerator { public: - // |cdm_proxy_context| may be null for clear content. D3D11H264Accelerator(D3D11VideoDecoderClient* client, MediaLog* media_log, - CdmProxyContext* cdm_proxy_context, ComD3D11VideoDecoder video_decoder, ComD3D11VideoDevice video_device, std::unique_ptr<VideoContextWrapper> video_context); @@ -90,7 +87,6 @@ D3D11VideoDecoderClient* client_; MediaLog* media_log_ = nullptr; - CdmProxyContext* const cdm_proxy_context_; ComD3D11VideoDecoder video_decoder_; ComD3D11VideoDevice video_device_;
diff --git a/media/gpu/windows/d3d11_video_decoder.cc b/media/gpu/windows/d3d11_video_decoder.cc index 4cb754a..17ad1be 100644 --- a/media/gpu/windows/d3d11_video_decoder.cc +++ b/media/gpu/windows/d3d11_video_decoder.cc
@@ -150,7 +150,6 @@ HRESULT D3D11VideoDecoder::InitializeAcceleratedDecoder( const VideoDecoderConfig& config, - CdmProxyContext* proxy_context, ComD3D11VideoDecoder video_decoder) { TRACE_EVENT0("gpu", "D3D11VideoDecoder::InitializeAcceleratedDecoder"); // If we got an 11.1 D3D11 Device, we can use a |ID3D11VideoContext1|, @@ -168,18 +167,18 @@ profile_ = config.profile(); if (config.codec() == kCodecVP9) { accelerated_video_decoder_ = std::make_unique<VP9Decoder>( - std::make_unique<D3D11VP9Accelerator>( - this, media_log_.get(), proxy_context, video_decoder, video_device_, - std::move(video_context)), + std::make_unique<D3D11VP9Accelerator>(this, media_log_.get(), + video_decoder, video_device_, + std::move(video_context)), profile_, config.color_space_info()); return hr; } if (config.codec() == kCodecH264) { accelerated_video_decoder_ = std::make_unique<H264Decoder>( - std::make_unique<D3D11H264Accelerator>( - this, media_log_.get(), proxy_context, video_decoder, video_device_, - std::move(video_context)), + std::make_unique<D3D11H264Accelerator>(this, media_log_.get(), + video_decoder, video_device_, + std::move(video_context)), profile_, config.color_space_info()); return hr; } @@ -189,7 +188,7 @@ void D3D11VideoDecoder::Initialize(const VideoDecoderConfig& config, bool low_delay, - CdmContext* cdm_context, + CdmContext* /* cdm_context */, InitCB init_cb, const OutputCB& output_cb, const WaitingCB& waiting_cb) { @@ -365,19 +364,13 @@ return; } - CdmProxyContext* proxy_context = nullptr; -#if BUILDFLAG(ENABLE_CDM_PROXY) - if (cdm_context) - proxy_context = cdm_context->GetCdmProxyContext(); -#endif - // Ensure that if we are encrypted, that we have a CDM. - if (config_.is_encrypted() && !proxy_context) { - NotifyError("Video stream is encrypted, but no cdm was found"); + if (config_.is_encrypted()) { + NotifyError("Encrypted stream not supported"); return; } - hr = InitializeAcceleratedDecoder(config, proxy_context, video_decoder); + hr = InitializeAcceleratedDecoder(config, video_decoder); if (!SUCCEEDED(hr)) { NotifyError("Failed to get device context"); @@ -396,14 +389,6 @@ config.GetHumanReadableCodecName()); } - // |cdm_context| could be null for clear playback. - // TODO(liberato): On re-init, should this still happen? - if (cdm_context) { - new_key_callback_registration_ = - cdm_context->RegisterEventCB(base::BindRepeating( - &D3D11VideoDecoder::OnCdmContextEvent, weak_factory_.GetWeakPtr())); - } - auto impl_init_cb = base::BindOnce(&D3D11VideoDecoder::OnGpuInitComplete, weak_factory_.GetWeakPtr());
diff --git a/media/gpu/windows/d3d11_video_decoder.h b/media/gpu/windows/d3d11_video_decoder.h index 44af77a0e..ba8f7164 100644 --- a/media/gpu/windows/d3d11_video_decoder.h +++ b/media/gpu/windows/d3d11_video_decoder.h
@@ -132,7 +132,6 @@ // instantiate |accelerated_video_decoder_| based on the video profile HRESULT InitializeAcceleratedDecoder(const VideoDecoderConfig& config, - CdmProxyContext* proxy_context, ComD3D11VideoDecoder video_decoder); // Query the video device for a specific decoder ID.
diff --git a/media/gpu/windows/d3d11_vp9_accelerator.cc b/media/gpu/windows/d3d11_vp9_accelerator.cc index 267f09a4..8ad2c1a 100644 --- a/media/gpu/windows/d3d11_vp9_accelerator.cc +++ b/media/gpu/windows/d3d11_vp9_accelerator.cc
@@ -9,7 +9,6 @@ #include <utility> #include "base/memory/ptr_util.h" -#include "media/cdm/cdm_proxy_context.h" #include "media/gpu/windows/d3d11_vp9_picture.h" namespace media { @@ -37,21 +36,17 @@ D3D11VP9Accelerator::D3D11VP9Accelerator( D3D11VideoDecoderClient* client, MediaLog* media_log, - CdmProxyContext* cdm_proxy_context, ComD3D11VideoDecoder video_decoder, ComD3D11VideoDevice video_device, std::unique_ptr<VideoContextWrapper> video_context) : client_(client), media_log_(media_log), - cdm_proxy_context_(cdm_proxy_context), status_feedback_(0), video_decoder_(std::move(video_decoder)), video_device_(std::move(video_device)), video_context_(std::move(video_context)) { DCHECK(client); DCHECK(media_log_); - // |cdm_proxy_context_| is non-null for encrypted content but can be null for - // clear content. } D3D11VP9Accelerator::~D3D11VP9Accelerator() {} @@ -70,33 +65,18 @@ } bool D3D11VP9Accelerator::BeginFrame(const D3D11VP9Picture& pic) { - // This |decrypt_context| has to be outside the if block because pKeyInfo in - // D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION is a pointer (to a GUID). - base::Optional<CdmProxyContext::D3D11DecryptContext> decrypt_context; - std::unique_ptr<D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION> content_key; - if (const DecryptConfig* config = pic.decrypt_config()) { - DCHECK(cdm_proxy_context_) << "No CdmProxyContext but picture is encrypted"; - decrypt_context = cdm_proxy_context_->GetD3D11DecryptContext( - CdmProxy::KeyType::kDecryptAndDecode, config->key_id()); - if (!decrypt_context) { - RecordFailure("crypto_config", - "Cannot find the decrypt context for the frame."); - return false; // TODO(crbug.com/894573): support kTryAgain. - } - - content_key = - std::make_unique<D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION>(); - content_key->pCryptoSession = decrypt_context->crypto_session; - content_key->pBlob = const_cast<void*>(decrypt_context->key_blob); - content_key->BlobSize = decrypt_context->key_blob_size; - content_key->pKeyInfoId = &decrypt_context->key_info_guid; + const bool is_encrypted = pic.decrypt_config(); + if (is_encrypted) { + RecordFailure("crypto_config", + "Cannot find the decrypt context for the frame."); + return false; } HRESULT hr; do { hr = video_context_->DecoderBeginFrame( - video_decoder_.Get(), pic.picture_buffer()->output_view().Get(), - content_key ? sizeof(*content_key) : 0, content_key.get()); + video_decoder_.Get(), pic.picture_buffer()->output_view().Get(), 0, + nullptr); } while (hr == E_PENDING || hr == D3DERR_WASSTILLDRAWING); if (FAILED(hr)) {
diff --git a/media/gpu/windows/d3d11_vp9_accelerator.h b/media/gpu/windows/d3d11_vp9_accelerator.h index e31d7a3..a79fdac 100644 --- a/media/gpu/windows/d3d11_vp9_accelerator.h +++ b/media/gpu/windows/d3d11_vp9_accelerator.h
@@ -19,13 +19,11 @@ #include "media/gpu/windows/d3d11_vp9_picture.h" namespace media { -class CdmProxyContext; class D3D11VP9Accelerator : public VP9Decoder::VP9Accelerator { public: D3D11VP9Accelerator(D3D11VideoDecoderClient* client, MediaLog* media_log, - CdmProxyContext* cdm_proxy_context, ComD3D11VideoDecoder video_decoder, ComD3D11VideoDevice video_device, std::unique_ptr<VideoContextWrapper> video_context); @@ -73,7 +71,6 @@ D3D11VideoDecoderClient* client_; MediaLog* const media_log_; - CdmProxyContext* cdm_proxy_context_; UINT status_feedback_; ComD3D11VideoDecoder video_decoder_; ComD3D11VideoDevice video_device_;
diff --git a/media/media_options.gni b/media/media_options.gni index 22494a60..c66e189 100644 --- a/media/media_options.gni +++ b/media/media_options.gni
@@ -181,17 +181,11 @@ # (which takes precedence), or by setting |alternate_cdm_storage_id_key|. # The key must be a string of at least 32 characters. alternate_cdm_storage_id_key = "" - - # This feature is still under development. See crbug.com/641132. - enable_cdm_proxy = false } assert(!enable_cdm_host_verification || is_mac || is_win, "CDM host verification is only supported on Mac and Windows.") -assert(enable_library_cdms || !enable_cdm_proxy, - "CDM Proxy should only be enabled when library CDM is enabled.") - # Default |mojo_media_services| and |mojo_media_host| on various platforms. See # comments below for valid values. Can be overridden by gn build arguments from # the --args command line flag. @@ -213,17 +207,13 @@ _default_mojo_media_host = "gpu" } -# On Fuchsia, this is only enabled to build libclearkeycdm.so, the mojo CDM -# service is not used. +# When |enable_library_cdms| is true, the "cdm" service will run in a separate +# CdmService in the CDM (utility) process. Therefor there's no need to specify +# |_default_mojo_media_host| which controls where the MediaService runs in. +# On Fuchsia, |enable_library_cdms| is only enabled to build libclearkeycdm.so, +# the mojo CDM service is not used. if (enable_library_cdms && !is_fuchsia) { _default_mojo_media_services += [ "cdm" ] - - # Having a CDM running means it could require a CdmProxy running in the GPU - # process. - assert(_default_mojo_media_host == "" || _default_mojo_media_host == "gpu", - "For now, mojo_media_host should not overwrite it with a different " + - "value if it has been set.") - _default_mojo_media_host = "gpu" } declare_args() {
diff --git a/media/mojo/README.md b/media/mojo/README.md index c91b3498..d13dc2c6 100644 --- a/media/mojo/README.md +++ b/media/mojo/README.md
@@ -339,7 +339,6 @@ * `PlatformVerification`: to check whether the platform is secure * `CdmFileIO`: for the CDM to store persistent data * `ProvisionFetcher`: for Android MediaDrm device provisioning -* `CdmProxy`: (in progress) ### Security @@ -358,8 +357,7 @@ Also note that all the [Secure Auxiliary Services](#Secure-Auxiliary-Services) are running in a more privileged process than the process where the media components that use them run in. For example, all of the existing services run -in the browser process except for the `CdmProxy`, which runs in the GPU process. -They must defend against compromised media components. +in the browser process. They must defend against compromised media components. ### Adoption @@ -400,7 +398,6 @@ * `MediaService` in the GPU process (registered in `GpuServiceFactory` with `GpuMojoMediaClient`) * `MojoVideoDecoder` + hardware video decoders such as D3D11VideoDecoder - * Provides `CdmProxy` to the `CdmService` ## Other Services
diff --git a/media/mojo/clients/mojo_cdm.cc b/media/mojo/clients/mojo_cdm.cc index 1bd9ba9..acc9d1c 100644 --- a/media/mojo/clients/mojo_cdm.cc +++ b/media/mojo/clients/mojo_cdm.cc
@@ -21,7 +21,6 @@ #include "media/mojo/clients/mojo_decryptor.h" #include "media/mojo/common/media_type_converters.h" #include "media/mojo/mojom/decryptor.mojom.h" -#include "media/mojo/mojom/interface_factory.mojom.h" #include "services/service_manager/public/cpp/connect.h" #include "services/service_manager/public/mojom/interface_provider.mojom.h" #include "url/origin.h" @@ -43,15 +42,14 @@ const url::Origin& security_origin, const CdmConfig& cdm_config, mojo::PendingRemote<mojom::ContentDecryptionModule> remote_cdm, - mojom::InterfaceFactory* interface_factory, const SessionMessageCB& session_message_cb, const SessionClosedCB& session_closed_cb, const SessionKeysChangeCB& session_keys_change_cb, const SessionExpirationUpdateCB& session_expiration_update_cb, CdmCreatedCB cdm_created_cb) { - scoped_refptr<MojoCdm> mojo_cdm(new MojoCdm( - std::move(remote_cdm), interface_factory, session_message_cb, - session_closed_cb, session_keys_change_cb, session_expiration_update_cb)); + scoped_refptr<MojoCdm> mojo_cdm( + new MojoCdm(std::move(remote_cdm), session_message_cb, session_closed_cb, + session_keys_change_cb, session_expiration_update_cb)); // |mojo_cdm| ownership is passed to the promise. auto promise = std::make_unique<CdmInitializedPromise>( @@ -62,13 +60,11 @@ } MojoCdm::MojoCdm(mojo::PendingRemote<mojom::ContentDecryptionModule> remote_cdm, - mojom::InterfaceFactory* interface_factory, const SessionMessageCB& session_message_cb, const SessionClosedCB& session_closed_cb, const SessionKeysChangeCB& session_keys_change_cb, const SessionExpirationUpdateCB& session_expiration_update_cb) : remote_cdm_(std::move(remote_cdm)), - interface_factory_(interface_factory), cdm_id_(CdmContext::kInvalidCdmId), session_message_cb_(session_message_cb), session_closed_cb_(session_closed_cb), @@ -305,26 +301,12 @@ if (decryptor_) return decryptor_.get(); - mojo::PendingRemote<mojom::Decryptor> decryptor_remote; - // Can be called on a different thread. if (decryptor_remote_.is_valid()) { DVLOG(1) << __func__ << ": Using Decryptor exposed by the CDM directly"; - decryptor_remote = std::move(decryptor_remote_); - } else if (interface_factory_ && cdm_id_ != CdmContext::kInvalidCdmId) { -#if BUILDFLAG(ENABLE_CDM_PROXY) - // TODO(xhwang): Pass back info on whether Decryptor is supported by the - // remote CDM. - DVLOG(1) << __func__ << ": Using Decryptor associated with CDM ID " - << cdm_id_ << ", typically hosted by CdmProxy in MediaService"; - interface_factory_->CreateDecryptor( - cdm_id_, decryptor_remote.InitWithNewPipeAndPassReceiver()); -#endif // BUILDFLAG(ENABLE_CDM_PROXY) + decryptor_ = std::make_unique<MojoDecryptor>(std::move(decryptor_remote_)); } - if (decryptor_remote) - decryptor_ = std::make_unique<MojoDecryptor>(std::move(decryptor_remote)); - return decryptor_.get(); }
diff --git a/media/mojo/clients/mojo_cdm.h b/media/mojo/clients/mojo_cdm.h index 4c1a0ff..45f0fcb0 100644 --- a/media/mojo/clients/mojo_cdm.h +++ b/media/mojo/clients/mojo_cdm.h
@@ -35,10 +35,6 @@ namespace media { -namespace mojom { -class InterfaceFactory; -} - class MojoDecryptor; // A ContentDecryptionModule that proxies to a mojom::ContentDecryptionModule. @@ -55,7 +51,6 @@ const url::Origin& security_origin, const CdmConfig& cdm_config, mojo::PendingRemote<mojom::ContentDecryptionModule> remote_cdm, - mojom::InterfaceFactory* interface_factory, const SessionMessageCB& session_message_cb, const SessionClosedCB& session_closed_cb, const SessionKeysChangeCB& session_keys_change_cb, @@ -91,7 +86,6 @@ private: MojoCdm(mojo::PendingRemote<mojom::ContentDecryptionModule> remote_cdm, - mojom::InterfaceFactory* interface_factory, const SessionMessageCB& session_message_cb, const SessionClosedCB& session_closed_cb, const SessionKeysChangeCB& session_keys_change_cb, @@ -140,7 +134,6 @@ THREAD_CHECKER(thread_checker_); mojo::Remote<mojom::ContentDecryptionModule> remote_cdm_; - mojom::InterfaceFactory* interface_factory_; mojo::AssociatedReceiver<ContentDecryptionModuleClient> client_receiver_{ this};
diff --git a/media/mojo/clients/mojo_cdm_factory.cc b/media/mojo/clients/mojo_cdm_factory.cc index 118f0ab..d606e735 100644 --- a/media/mojo/clients/mojo_cdm_factory.cc +++ b/media/mojo/clients/mojo_cdm_factory.cc
@@ -64,8 +64,8 @@ key_system, cdm_pending_remote.InitWithNewPipeAndPassReceiver()); MojoCdm::Create(key_system, security_origin, cdm_config, - std::move(cdm_pending_remote), interface_factory_, - session_message_cb, session_closed_cb, session_keys_change_cb, + std::move(cdm_pending_remote), session_message_cb, + session_closed_cb, session_keys_change_cb, session_expiration_update_cb, std::move(cdm_created_cb)); }
diff --git a/media/mojo/clients/mojo_cdm_unittest.cc b/media/mojo/clients/mojo_cdm_unittest.cc index ab0eb09b..f7b402b 100644 --- a/media/mojo/clients/mojo_cdm_unittest.cc +++ b/media/mojo/clients/mojo_cdm_unittest.cc
@@ -99,7 +99,6 @@ MojoCdm::Create(key_system, url::Origin::Create(GURL(kTestSecurityOrigin)), CdmConfig(), cdm_receiver_.BindNewPipeAndPassRemote(), - nullptr, base::Bind(&MockCdmClient::OnSessionMessage, base::Unretained(&cdm_client_)), base::Bind(&MockCdmClient::OnSessionClosed,
diff --git a/media/mojo/mojom/BUILD.gn b/media/mojo/mojom/BUILD.gn index 0a4415f6..27f5362 100644 --- a/media/mojo/mojom/BUILD.gn +++ b/media/mojo/mojom/BUILD.gn
@@ -78,11 +78,6 @@ enabled_features = [ "enable_cast_renderer" ] } - if (enable_cdm_proxy) { - enabled_features = [ "enable_cdm_proxy" ] - sources += [ "cdm_proxy.mojom" ] - } - export_class_attribute_blink = "BLINK_PLATFORM_EXPORT" export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" export_header_blink = "third_party/blink/public/platform/web_common.h"
diff --git a/media/mojo/mojom/cdm_proxy.mojom b/media/mojo/mojom/cdm_proxy.mojom deleted file mode 100644 index d503763..0000000 --- a/media/mojo/mojom/cdm_proxy.mojom +++ /dev/null
@@ -1,77 +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 media.mojom; - -// An interface that helps proxy part of ContentDecryptionModule (CDM) -// functionalities to a different entity, e.g. hardware CDM modules. -// In general, the interpretation of the method and callback parameters are -// protocol dependent. -// CdmProxy implementation is hosted in the GPU process. -interface CdmProxy { - // See media/cdm/cdm_proxy.h for the following native enums. - [Native] - enum Status; - - [Native] - enum Protocol; - - [Native] - enum Function; - - [Native] - enum KeyType; - - // Initializes the proxy. - // If the proxy created a crypto session, then the ID for the crypto session - // is |crypto_session_id|. - // |cdm_id| can be used to connect the remote media pipeline and CdmProxy. - Initialize(pending_associated_remote<CdmProxyClient> client) - => (Status status, - Protocol protocol, - uint32 crypto_session_id, - int32 cdm_id); - - // Processes and updates the state of the proxy. - // |func| specifies what type of function to use. - // |crypto_session_id| is a value returned from Initialize() or - // CreateMediaCryptoSessions(). - // |input_data| is the input data to be processed. - // |output_data_size| is the expected size of |output_data|. Some protocols - // require this field in order to determine the size of the output, but some - // may completely ignore it. - // The output data is passed back in |output_data|. - Process(Function func, - uint32 crypto_session_id, - array<uint8> input_data, - uint32 output_data_size) => (Status status, - array<uint8> output_data); - - // Creates a crypto session for handling media. - // If extra data has to be passed to further setup the media crypto session, - // pass the data as |input_data|. - // |crypto_session_id| is the ID for the crypto session. - // |output_data| is extra value, if any. - CreateMediaCryptoSession(array<uint8> input_data) => ( - Status status, uint32 crypto_session_id, uint64 output_data); - - // Sets a key in the proxy. - // |crypto_session_id| is the crypto session for decryption. - // |key_id| is the ID of the key. - // |key_blob| is the opaque key blob for decrypting or decoding. - SetKey(uint32 crypto_session_id, array<uint8> key_id, KeyType key_type, - array<uint8> key_blob) => (Status status); - - // Removes a key from the proxy. - // |crypto_session_id| is the crypto session for decryption. - // |key_id| is the ID of the key. - RemoveKey(uint32 crypto_session_id, array<uint8> key_id) => (Status status); -}; - -// Client of CdmProxy. -// CdmProxyClient is running in the fully sandboxed CDM (e.g. utility) process. -interface CdmProxyClient { - // Notifies the client that there has been a hardware reset. - NotifyHardwareReset(); -};
diff --git a/media/mojo/mojom/cdm_proxy.typemap b/media/mojo/mojom/cdm_proxy.typemap deleted file mode 100644 index d2f0539..0000000 --- a/media/mojo/mojom/cdm_proxy.typemap +++ /dev/null
@@ -1,21 +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. - -mojom = "//media/mojo/mojom/cdm_proxy.mojom" - -public_headers = [ "//media/cdm/cdm_proxy.h" ] - -traits_headers = [ "//media/base/ipc/media_param_traits_macros.h" ] - -deps = [ - "//media", - "//media/base/ipc", -] - -type_mappings = [ - "media.mojom.CdmProxy.Function=::media::CdmProxy::Function", - "media.mojom.CdmProxy.KeyType=::media::CdmProxy::KeyType", - "media.mojom.CdmProxy.Protocol=::media::CdmProxy::Protocol", - "media.mojom.CdmProxy.Status=::media::CdmProxy::Status", -]
diff --git a/media/mojo/mojom/interface_factory.mojom b/media/mojo/mojom/interface_factory.mojom index 8cea7ee2..5783311 100644 --- a/media/mojo/mojom/interface_factory.mojom +++ b/media/mojo/mojom/interface_factory.mojom
@@ -5,8 +5,6 @@ module media.mojom; import "media/mojo/mojom/audio_decoder.mojom"; -[EnableIf=enable_cdm_proxy] -import "media/mojo/mojom/cdm_proxy.mojom"; import "media/mojo/mojom/decryptor.mojom"; import "media/mojo/mojom/content_decryption_module.mojom"; import "media/mojo/mojom/renderer.mojom"; @@ -66,11 +64,4 @@ // Creates a Decryptor associated with the |cdm_id|. CreateDecryptor(int32 cdm_id, pending_receiver<Decryptor> decryptor); - - // Creates a CdmProxy that proxies part of CDM functionalities to a different - // entity, e.g. hardware CDM modules. The created |cdm_proxy| must match the - // type of the CDM, identified by |cdm_guid|. - [EnableIf=enable_cdm_proxy] - CreateCdmProxy(mojo_base.mojom.Token cdm_guid, - pending_receiver<CdmProxy> cdm_proxy); };
diff --git a/media/mojo/mojom/key_system_support.mojom b/media/mojo/mojom/key_system_support.mojom index 06ede1b..69d608ca 100644 --- a/media/mojo/mojom/key_system_support.mojom +++ b/media/mojo/mojom/key_system_support.mojom
@@ -16,8 +16,7 @@ bool supports_vp9_profile2; array<EncryptionScheme> encryption_schemes; - // Hardware secure codecs and encryption schemes supported by the CDM, - // directly or indirectly through CdmProxy. + // Hardware secure codecs and encryption schemes supported by the CDM. array<VideoCodec> hw_secure_video_codecs; array<EncryptionScheme> hw_secure_encryption_schemes;
diff --git a/media/mojo/mojom/typemaps.gni b/media/mojo/mojom/typemaps.gni index 8e5ef00..44e40101 100644 --- a/media/mojo/mojom/typemaps.gni +++ b/media/mojo/mojom/typemaps.gni
@@ -27,7 +27,3 @@ if (enable_media_drm_storage) { typemaps += [ "//media/mojo/mojom/media_drm_storage.typemap" ] } - -if (enable_cdm_proxy) { - typemaps += [ "//media/mojo/mojom/cdm_proxy.typemap" ] -}
diff --git a/media/mojo/services/BUILD.gn b/media/mojo/services/BUILD.gn index 13acf15..90639589 100644 --- a/media/mojo/services/BUILD.gn +++ b/media/mojo/services/BUILD.gn
@@ -132,19 +132,6 @@ "//media/cdm:cdm_paths", ] - if (enable_cdm_proxy) { - sources += [ - "mojo_cdm_proxy.cc", - "mojo_cdm_proxy.h", - "mojo_cdm_proxy_service.cc", - "mojo_cdm_proxy_service.h", - ] - deps += [ - # Needed by test_mojo_media_client.cc to create ClearKeyCdmProxy. - "//media/cdm/library_cdm/clear_key_cdm:clear_key_cdm_proxy", - ] - } - # TODO(xhwang): Ideally media should not worry about sandbox. Find a way to # remove this dependency. if (is_mac) { @@ -200,10 +187,6 @@ "mojo_cdm_helper_unittest.cc", ] - if (enable_cdm_proxy) { - sources += [ "mojo_cdm_proxy_unittest.cc" ] - } - deps += [ "//media/cdm:cdm_api" ] }
diff --git a/media/mojo/services/gpu_mojo_media_client.cc b/media/mojo/services/gpu_mojo_media_client.cc index f7882160..fe95231 100644 --- a/media/mojo/services/gpu_mojo_media_client.cc +++ b/media/mojo/services/gpu_mojo_media_client.cc
@@ -118,18 +118,18 @@ scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner, base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager, gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory, - AndroidOverlayMojoFactoryCB android_overlay_factory_cb, - CdmProxyFactoryCB cdm_proxy_factory_cb) + AndroidOverlayMojoFactoryCB android_overlay_factory_cb) : gpu_preferences_(gpu_preferences), gpu_workarounds_(gpu_workarounds), gpu_feature_info_(gpu_feature_info), gpu_task_runner_(std::move(gpu_task_runner)), media_gpu_channel_manager_(std::move(media_gpu_channel_manager)), - android_overlay_factory_cb_(std::move(android_overlay_factory_cb)), + android_overlay_factory_cb_(std::move(android_overlay_factory_cb)) #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION) - gpu_memory_buffer_factory_(gpu_memory_buffer_factory), + , + gpu_memory_buffer_factory_(gpu_memory_buffer_factory) #endif // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION) - cdm_proxy_factory_cb_(std::move(cdm_proxy_factory_cb)) { +{ } GpuMojoMediaClient::~GpuMojoMediaClient() = default; @@ -332,14 +332,4 @@ #endif // defined(OS_ANDROID) } -#if BUILDFLAG(ENABLE_CDM_PROXY) -std::unique_ptr<CdmProxy> GpuMojoMediaClient::CreateCdmProxy( - const base::Token& cdm_guid) { - if (cdm_proxy_factory_cb_) - return cdm_proxy_factory_cb_.Run(cdm_guid); - - return nullptr; -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - } // namespace media
diff --git a/media/mojo/services/gpu_mojo_media_client.h b/media/mojo/services/gpu_mojo_media_client.h index ead98885..e62511d 100644 --- a/media/mojo/services/gpu_mojo_media_client.h +++ b/media/mojo/services/gpu_mojo_media_client.h
@@ -17,7 +17,6 @@ #include "gpu/config/gpu_feature_info.h" #include "gpu/config/gpu_preferences.h" #include "media/base/android_overlay_mojo_factory.h" -#include "media/cdm/cdm_proxy.h" #include "media/media_buildflags.h" #include "media/mojo/services/mojo_media_client.h" #include "media/video/supported_video_decoder_config.h" @@ -34,8 +33,6 @@ public: // |media_gpu_channel_manager| must only be used on |gpu_task_runner|, which // is expected to be the GPU main thread task runner. - // |cdm_proxy_factory_cb| can be used to create a CdmProxy. May be null if - // CdmProxy is not supported on the platform. GpuMojoMediaClient( const gpu::GpuPreferences& gpu_preferences, const gpu::GpuDriverBugWorkarounds& gpu_workarounds, @@ -43,8 +40,7 @@ scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner, base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager, gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory, - AndroidOverlayMojoFactoryCB android_overlay_factory_cb, - CdmProxyFactoryCB cdm_proxy_factory_cb); + AndroidOverlayMojoFactoryCB android_overlay_factory_cb); ~GpuMojoMediaClient() final; // MojoMediaClient implementation. @@ -60,9 +56,6 @@ const gfx::ColorSpace& target_color_space) final; std::unique_ptr<CdmFactory> CreateCdmFactory( mojom::FrameInterfaceFactory* interface_provider) final; -#if BUILDFLAG(ENABLE_CDM_PROXY) - std::unique_ptr<CdmProxy> CreateCdmProxy(const base::Token& cdm_guid) final; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) private: gpu::GpuPreferences gpu_preferences_; @@ -76,7 +69,6 @@ gpu::GpuMemoryBufferFactory* const gpu_memory_buffer_factory_; base::Optional<SupportedVideoDecoderConfigs> cros_supported_configs_; #endif // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION) - CdmProxyFactoryCB cdm_proxy_factory_cb_; #if defined(OS_WIN) base::Optional<SupportedVideoDecoderConfigs> d3d11_supported_configs_; #endif // defined(OS_WIN)
diff --git a/media/mojo/services/interface_factory_impl.cc b/media/mojo/services/interface_factory_impl.cc index cd0a4ed..e43f28d 100644 --- a/media/mojo/services/interface_factory_impl.cc +++ b/media/mojo/services/interface_factory_impl.cc
@@ -34,10 +34,6 @@ #include "media/mojo/services/mojo_cdm_service.h" #endif // BUILDFLAG(ENABLE_MOJO_CDM) -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/mojo/services/mojo_cdm_proxy_service.h" -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - namespace media { InterfaceFactoryImpl::InterfaceFactoryImpl( @@ -196,22 +192,6 @@ decryptor_receivers_.Add(std::move(mojo_decryptor_service), std::move(receiver)); } -#if BUILDFLAG(ENABLE_CDM_PROXY) -void InterfaceFactoryImpl::CreateCdmProxy( - const base::Token& cdm_guid, - mojo::PendingReceiver<mojom::CdmProxy> receiver) { - DVLOG(2) << __func__; - auto cdm_proxy = mojo_media_client_->CreateCdmProxy(cdm_guid); - if (!cdm_proxy) { - DLOG(ERROR) << "CdmProxy creation failed."; - return; - } - - cdm_proxy_receivers_.Add(std::make_unique<MojoCdmProxyService>( - std::move(cdm_proxy), &cdm_service_context_), - std::move(receiver)); -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) void InterfaceFactoryImpl::OnDestroyPending(base::OnceClosure destroy_cb) { DVLOG(1) << __func__; @@ -242,11 +222,6 @@ return false; #endif // BUILDFLAG(ENABLE_MOJO_CDM) -#if BUILDFLAG(ENABLE_CDM_PROXY) - if (!cdm_proxy_receivers_.empty()) - return false; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - if (!decryptor_receivers_.empty()) return false; @@ -276,10 +251,6 @@ cdm_receivers_.set_disconnect_handler(disconnect_cb); #endif // BUILDFLAG(ENABLE_MOJO_CDM) -#if BUILDFLAG(ENABLE_CDM_PROXY) - cdm_proxy_receivers_.set_disconnect_handler(disconnect_cb); -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - decryptor_receivers_.set_disconnect_handler(disconnect_cb); }
diff --git a/media/mojo/services/interface_factory_impl.h b/media/mojo/services/interface_factory_impl.h index 439ff6a9..c4acf0b 100644 --- a/media/mojo/services/interface_factory_impl.h +++ b/media/mojo/services/interface_factory_impl.h
@@ -28,10 +28,6 @@ #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/unique_receiver_set.h" -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/mojo/mojom/cdm_proxy.mojom.h" -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - namespace media { class CdmFactory; @@ -75,10 +71,6 @@ mojo::PendingReceiver<mojom::ContentDecryptionModule> receiver) final; void CreateDecryptor(int cdm_id, mojo::PendingReceiver<mojom::Decryptor> receiver) final; -#if BUILDFLAG(ENABLE_CDM_PROXY) - void CreateCdmProxy(const base::Token& cdm_guid, - mojo::PendingReceiver<mojom::CdmProxy> receiver) final; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) // DeferredDestroy<mojom::InterfaceFactory> implemenation. void OnDestroyPending(base::OnceClosure destroy_cb) final; @@ -119,10 +111,6 @@ mojo::UniqueReceiverSet<mojom::ContentDecryptionModule> cdm_receivers_; #endif // BUILDFLAG(ENABLE_MOJO_CDM) -#if BUILDFLAG(ENABLE_CDM_PROXY) - mojo::UniqueReceiverSet<mojom::CdmProxy> cdm_proxy_receivers_; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - mojo::Remote<mojom::FrameInterfaceFactory> frame_interfaces_; mojo::UniqueReceiverSet<mojom::Decryptor> decryptor_receivers_;
diff --git a/media/mojo/services/media_service_factory.cc b/media/mojo/services/media_service_factory.cc index 828efea0..7e1f4afa 100644 --- a/media/mojo/services/media_service_factory.cc +++ b/media/mojo/services/media_service_factory.cc
@@ -38,14 +38,12 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner, base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager, gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory, - AndroidOverlayMojoFactoryCB android_overlay_factory_cb, - CdmProxyFactoryCB cdm_proxy_factory_cb) { + AndroidOverlayMojoFactoryCB android_overlay_factory_cb) { return std::make_unique<MediaService>( std::make_unique<GpuMojoMediaClient>( gpu_preferences, gpu_workarounds, gpu_feature_info, task_runner, media_gpu_channel_manager, gpu_memory_buffer_factory, - std::move(android_overlay_factory_cb), - std::move(cdm_proxy_factory_cb)), + std::move(android_overlay_factory_cb)), std::move(receiver)); }
diff --git a/media/mojo/services/media_service_factory.h b/media/mojo/services/media_service_factory.h index 9fb37da..d0052bf2 100644 --- a/media/mojo/services/media_service_factory.h +++ b/media/mojo/services/media_service_factory.h
@@ -14,7 +14,6 @@ #include "gpu/config/gpu_feature_info.h" #include "gpu/config/gpu_preferences.h" #include "media/base/android_overlay_mojo_factory.h" -#include "media/cdm/cdm_proxy.h" #include "media/mojo/mojom/media_service.mojom.h" #include "media/mojo/services/media_mojo_export.h" #include "media/mojo/services/media_service.h" @@ -36,8 +35,6 @@ // Creates a MediaService instance using the GpuMojoMediaClient. // |media_gpu_channel_manager| must only be used on |task_runner|, which is // expected to be the GPU main thread task runner. -// |cdm_proxy_factory_cb| can be used to create a CdmProxy. May be null if -// CdmProxy is not supported on the platform. std::unique_ptr<MediaService> MEDIA_MOJO_EXPORT CreateGpuMediaService( mojo::PendingReceiver<mojom::MediaService> receiver, const gpu::GpuPreferences& gpu_preferences, @@ -46,8 +43,7 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner, base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager, gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory, - AndroidOverlayMojoFactoryCB android_overlay_factory_cb, - CdmProxyFactoryCB cdm_proxy_factory_cb); + AndroidOverlayMojoFactoryCB android_overlay_factory_cb); // Creates a MediaService instance using the TestMojoMediaClient. std::unique_ptr<MediaService> MEDIA_MOJO_EXPORT CreateMediaServiceForTesting(
diff --git a/media/mojo/services/media_service_unittest.cc b/media/mojo/services/media_service_unittest.cc index cd5e99b..cd59935 100644 --- a/media/mojo/services/media_service_unittest.cc +++ b/media/mojo/services/media_service_unittest.cc
@@ -37,11 +37,6 @@ #include "url/gurl.h" #include "url/origin.h" -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/cdm/cdm_paths.h" // nogncheck -#include "media/mojo/mojom/cdm_proxy.mojom.h" -#endif - namespace media { namespace { @@ -74,20 +69,6 @@ return encrypted_buffer; } -#if BUILDFLAG(ENABLE_CDM_PROXY) -class MockCdmProxyClient : public mojom::CdmProxyClient { - public: - MockCdmProxyClient() = default; - ~MockCdmProxyClient() override = default; - - // mojom::CdmProxyClient implementation. - MOCK_METHOD0(NotifyHardwareReset, void()); - - private: - DISALLOW_COPY_AND_ASSIGN(MockCdmProxyClient); -}; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - class MockRendererClient : public mojom::RendererClient { public: MockRendererClient() = default; @@ -126,13 +107,8 @@ class MediaServiceTest : public testing::Test { public: MediaServiceTest() - : -#if BUILDFLAG(ENABLE_CDM_PROXY) - cdm_proxy_client_receiver_(&cdm_proxy_client_), -#endif - renderer_client_receiver_(&renderer_client_), - video_stream_(DemuxerStream::VIDEO) { - } + : renderer_client_receiver_(&renderer_client_), + video_stream_(DemuxerStream::VIDEO) {} ~MediaServiceTest() override = default; void SetUp() override { @@ -179,35 +155,6 @@ return cdm_id; } -#if BUILDFLAG(ENABLE_CDM_PROXY) - MOCK_METHOD4(OnCdmProxyInitialized, - void(CdmProxy::Status status, - CdmProxy::Protocol protocol, - uint32_t crypto_session_id, - int cdm_id)); - - // Returns the CDM ID associated with the CdmProxy. - int InitializeCdmProxy(const base::Token& cdm_guid) { - base::RunLoop run_loop; - interface_factory_->CreateCdmProxy(cdm_guid, - cdm_proxy_.BindNewPipeAndPassReceiver()); - - mojo::PendingAssociatedRemote<mojom::CdmProxyClient> client_remote; - cdm_proxy_client_receiver_.Bind( - client_remote.InitWithNewEndpointAndPassReceiver()); - int cdm_id = CdmContext::kInvalidCdmId; - - EXPECT_CALL(*this, OnCdmProxyInitialized(CdmProxy::Status::kOk, _, _, _)) - .WillOnce(DoAll(SaveArg<3>(&cdm_id), QuitLoop(&run_loop))); - cdm_proxy_->Initialize( - std::move(client_remote), - base::BindOnce(&MediaServiceTest::OnCdmProxyInitialized, - base::Unretained(this))); - run_loop.Run(); - return cdm_id; - } -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - MOCK_METHOD2(OnDecrypted, void(Decryptor::Status, scoped_refptr<DecoderBuffer>)); @@ -273,12 +220,6 @@ std::unique_ptr<MediaService> media_service_impl_; -#if BUILDFLAG(ENABLE_CDM_PROXY) - mojo::Remote<mojom::CdmProxy> cdm_proxy_; - NiceMock<MockCdmProxyClient> cdm_proxy_client_; - mojo::AssociatedReceiver<mojom::CdmProxyClient> cdm_proxy_client_receiver_; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - NiceMock<MockRendererClient> renderer_client_; mojo::AssociatedReceiver<mojom::RendererClient> renderer_client_receiver_; @@ -321,40 +262,8 @@ } #endif // BUILDFLAG(ENABLE_MOJO_RENDERER) -#if BUILDFLAG(ENABLE_CDM_PROXY) -TEST_F(MediaServiceTest, CdmProxy) { - InitializeCdmProxy(kClearKeyCdmGuid); -} - -TEST_F(MediaServiceTest, Decryptor_WithCdmProxy) { - int cdm_id = InitializeCdmProxy(kClearKeyCdmGuid); - CreateDecryptor(cdm_id, true); -} - -TEST_F(MediaServiceTest, Decryptor_WrongCdmId) { - int cdm_id = InitializeCdmProxy(kClearKeyCdmGuid); - CreateDecryptor(cdm_id + 1, false); -} - -TEST_F(MediaServiceTest, CdmProxyPreventsIdling) { - InitializeCdmProxy(kClearKeyCdmGuid); - - // Disconnecting InterfaceFactory should not terminate the MediaService since - // there is still a CdmProxy hosted. - interface_factory_.reset(); - cdm_proxy_.FlushForTesting(); - - // Disconnecting CdmProxy will cause the service to idle since no other - // connections should be active. - base::RunLoop run_loop; - EXPECT_CALL(*this, OnMediaServiceIdle()).WillOnce(QuitLoop(&run_loop)); - cdm_proxy_.reset(); - run_loop.Run(); -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - -TEST_F(MediaServiceTest, Decryptor_WithoutCdmOrCdmProxy) { - // Creating decryptor without creating CDM or CdmProxy. +TEST_F(MediaServiceTest, Decryptor_WithoutCdm) { + // Creating decryptor without creating CDM. CreateDecryptor(1, false); }
diff --git a/media/mojo/services/mojo_cdm_helper.cc b/media/mojo/services/mojo_cdm_helper.cc index 0bc620f..2d5761e 100644 --- a/media/mojo/services/mojo_cdm_helper.cc +++ b/media/mojo/services/mojo_cdm_helper.cc
@@ -37,27 +37,6 @@ return cdm_file_io; } -#if BUILDFLAG(ENABLE_CDM_PROXY) -cdm::CdmProxy* MojoCdmHelper::CreateCdmProxy(cdm::CdmProxyClient* client) { - DVLOG(3) << __func__; - if (cdm_proxy_) { - DVLOG(1) << __func__ << ": Only one outstanding CdmProxy allowed."; - return nullptr; - } - - mojo::PendingRemote<mojom::CdmProxy> cdm_proxy_remote; - frame_interfaces_->CreateCdmProxy( - cdm_proxy_remote.InitWithNewPipeAndPassReceiver()); - cdm_proxy_ = - std::make_unique<MojoCdmProxy>(std::move(cdm_proxy_remote), client); - return cdm_proxy_.get(); -} - -int MojoCdmHelper::GetCdmProxyCdmId() { - return cdm_proxy_ ? cdm_proxy_->GetCdmId() : CdmContext::kInvalidCdmId; -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - cdm::Buffer* MojoCdmHelper::CreateCdmBuffer(size_t capacity) { return GetAllocator()->CreateCdmBuffer(capacity); }
diff --git a/media/mojo/services/mojo_cdm_helper.h b/media/mojo/services/mojo_cdm_helper.h index cc07baf..25bf7d13 100644 --- a/media/mojo/services/mojo_cdm_helper.h +++ b/media/mojo/services/mojo_cdm_helper.h
@@ -21,11 +21,6 @@ #include "media/mojo/services/mojo_cdm_file_io.h" #include "mojo/public/cpp/bindings/remote.h" -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/mojo/mojom/cdm_proxy.mojom.h" -#include "media/mojo/services/mojo_cdm_proxy.h" -#endif - namespace media { // Helper class that connects the CDM to various auxiliary services. All @@ -40,10 +35,6 @@ // CdmAuxiliaryHelper implementation. void SetFileReadCB(FileReadCB file_read_cb) final; cdm::FileIO* CreateCdmFileIO(cdm::FileIOClient* client) final; -#if BUILDFLAG(ENABLE_CDM_PROXY) - cdm::CdmProxy* CreateCdmProxy(cdm::CdmProxyClient* client) final; - int GetCdmProxyCdmId() final; -#endif cdm::Buffer* CreateCdmBuffer(size_t capacity) final; std::unique_ptr<VideoFrameImpl> CreateCdmVideoFrame() final; void QueryStatus(QueryStatusCB callback) final; @@ -83,10 +74,6 @@ // TODO(xhwang): Switch to use UniquePtrComparator. std::vector<std::unique_ptr<MojoCdmFileIO>> cdm_file_io_set_; -#if BUILDFLAG(ENABLE_CDM_PROXY) - std::unique_ptr<MojoCdmProxy> cdm_proxy_; -#endif - base::WeakPtrFactory<MojoCdmHelper> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(MojoCdmHelper); };
diff --git a/media/mojo/services/mojo_cdm_helper_unittest.cc b/media/mojo/services/mojo_cdm_helper_unittest.cc index db3e2df..1b52d25 100644 --- a/media/mojo/services/mojo_cdm_helper_unittest.cc +++ b/media/mojo/services/mojo_cdm_helper_unittest.cc
@@ -73,9 +73,6 @@ mojo::MakeSelfOwnedReceiver(std::make_unique<MockCdmStorage>(), std::move(receiver)); } -#if BUILDFLAG(ENABLE_CDM_PROXY) - void CreateCdmProxy(mojo::PendingReceiver<mojom::CdmProxy>) override {} -#endif void BindEmbedderReceiver(mojo::GenericPendingReceiver) override {} };
diff --git a/media/mojo/services/mojo_cdm_proxy.cc b/media/mojo/services/mojo_cdm_proxy.cc deleted file mode 100644 index 4c454fa..0000000 --- a/media/mojo/services/mojo_cdm_proxy.cc +++ /dev/null
@@ -1,217 +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 "media/mojo/services/mojo_cdm_proxy.h" - -#include <vector> - -#include "base/bind.h" -#include "base/callback.h" -#include "base/logging.h" -#include "media/base/cdm_context.h" -#include "mojo/public/cpp/bindings/callback_helpers.h" - -namespace media { - -namespace { - -inline std::ostream& operator<<(std::ostream& out, CdmProxy::Status status) { - switch (status) { - case CdmProxy::Status::kOk: - return out << "kOk"; - case CdmProxy::Status::kFail: - return out << "kFail"; - } - NOTREACHED(); - return out << "Invalid Status!"; -} - -cdm::CdmProxyClient::Status ToCdmStatus(CdmProxy::Status status) { - switch (status) { - case CdmProxy::Status::kOk: - return cdm::CdmProxyClient::Status::kOk; - case CdmProxy::Status::kFail: - return cdm::CdmProxyClient::Status::kFail; - } - - NOTREACHED() << "Unexpected status: " << status; - return cdm::CdmProxyClient::Status::kFail; -} - -cdm::CdmProxyClient::Protocol ToCdmProtocol(CdmProxy::Protocol protocol) { - switch (protocol) { - case CdmProxy::Protocol::kNone: - return cdm::CdmProxyClient::Protocol::kNone; - case CdmProxy::Protocol::kIntel: - return cdm::CdmProxyClient::Protocol::kIntel; - } - - NOTREACHED() << "Unexpected protocol: " << static_cast<int32_t>(protocol); - return cdm::CdmProxyClient::Protocol::kNone; -} - -CdmProxy::Function ToMediaFunction(cdm::CdmProxy::Function function) { - switch (function) { - case cdm::CdmProxy::Function::kIntelNegotiateCryptoSessionKeyExchange: - return CdmProxy::Function::kIntelNegotiateCryptoSessionKeyExchange; - } - - // TODO(xhwang): Return an invalid function? - NOTREACHED() << "Unexpected function: " << static_cast<int32_t>(function); - return CdmProxy::Function::kIntelNegotiateCryptoSessionKeyExchange; -} - -CdmProxy::KeyType ToMediaKeyType(cdm::CdmProxy::KeyType key_type) { - switch (key_type) { - case cdm::CdmProxy::KeyType::kDecryptOnly: - return CdmProxy::KeyType::kDecryptOnly; - case cdm::CdmProxy::KeyType::kDecryptAndDecode: - return CdmProxy::KeyType::kDecryptAndDecode; - } - - NOTREACHED() << "Unexpected key type: " << static_cast<int32_t>(key_type); - return CdmProxy::KeyType::kDecryptOnly; -} - -} // namespace - -MojoCdmProxy::MojoCdmProxy( - mojo::PendingRemote<mojom::CdmProxy> cdm_proxy_remote, - cdm::CdmProxyClient* client) - : cdm_proxy_remote_(std::move(cdm_proxy_remote)), client_(client) { - DVLOG(1) << __func__; - DCHECK(client); -} - -MojoCdmProxy::~MojoCdmProxy() { - DVLOG(1) << __func__; -} - -void MojoCdmProxy::Initialize() { - DVLOG(2) << __func__; - - auto callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun( - base::BindOnce(&MojoCdmProxy::OnInitialized, weak_factory_.GetWeakPtr()), - media::CdmProxy::Status::kFail, media::CdmProxy::Protocol::kNone, 0, - CdmContext::kInvalidCdmId); - cdm_proxy_remote_->Initialize(client_receiver_.BindNewEndpointAndPassRemote(), - std::move(callback)); -} - -void MojoCdmProxy::Process(Function function, - uint32_t crypto_session_id, - const uint8_t* input_data, - uint32_t input_data_size, - uint32_t expected_output_data_size) { - DVLOG(3) << __func__; - CHECK(client_) << "Initialize not called."; - - auto callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun( - base::BindOnce(&MojoCdmProxy::OnProcessed, weak_factory_.GetWeakPtr()), - media::CdmProxy::Status::kFail, std::vector<uint8_t>()); - - cdm_proxy_remote_->Process( - ToMediaFunction(function), crypto_session_id, - std::vector<uint8_t>(input_data, input_data + input_data_size), - expected_output_data_size, std::move(callback)); -} - -void MojoCdmProxy::CreateMediaCryptoSession(const uint8_t* input_data, - uint32_t input_data_size) { - DVLOG(3) << __func__; - CHECK(client_) << "Initialize not called."; - - auto callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun( - base::BindOnce(&MojoCdmProxy::OnMediaCryptoSessionCreated, - weak_factory_.GetWeakPtr()), - media::CdmProxy::Status::kFail, 0, 0); - - cdm_proxy_remote_->CreateMediaCryptoSession( - std::vector<uint8_t>(input_data, input_data + input_data_size), - std::move(callback)); -} - -void MojoCdmProxy::SetKey(uint32_t crypto_session_id, - const uint8_t* key_id, - uint32_t key_id_size, - KeyType key_type, - const uint8_t* key_blob, - uint32_t key_blob_size) { - DVLOG(3) << __func__; - CHECK(client_) << "Initialize not called."; - - auto callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun( - base::BindOnce(&MojoCdmProxy::OnKeySet, weak_factory_.GetWeakPtr()), - media::CdmProxy::Status::kFail); - - cdm_proxy_remote_->SetKey( - crypto_session_id, std::vector<uint8_t>(key_id, key_id + key_id_size), - ToMediaKeyType(key_type), - std::vector<uint8_t>(key_blob, key_blob + key_blob_size), - std::move(callback)); -} - -void MojoCdmProxy::RemoveKey(uint32_t crypto_session_id, - const uint8_t* key_id, - uint32_t key_id_size) { - DVLOG(3) << __func__; - CHECK(client_) << "Initialize not called."; - - auto callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun( - base::BindOnce(&MojoCdmProxy::OnKeyRemoved, weak_factory_.GetWeakPtr()), - media::CdmProxy::Status::kFail); - - cdm_proxy_remote_->RemoveKey( - crypto_session_id, std::vector<uint8_t>(key_id, key_id + key_id_size), - std::move(callback)); -} - -void MojoCdmProxy::NotifyHardwareReset() { - DVLOG(2) << __func__; - client_->NotifyHardwareReset(); -} - -int MojoCdmProxy::GetCdmId() { - DVLOG(2) << __func__ << ": cdm_id = " << cdm_id_; - return cdm_id_; -} - -void MojoCdmProxy::OnInitialized(media::CdmProxy::Status status, - media::CdmProxy::Protocol protocol, - uint32_t crypto_session_id, - int cdm_id) { - DVLOG(3) << __func__ << ": status = " << status - << ", crypto_session_id = " << crypto_session_id; - cdm_id_ = cdm_id; - client_->OnInitialized(ToCdmStatus(status), ToCdmProtocol(protocol), - crypto_session_id); -} - -void MojoCdmProxy::OnProcessed(media::CdmProxy::Status status, - const std::vector<uint8_t>& output_data) { - DVLOG(3) << __func__ << ": status = " << status; - client_->OnProcessed(ToCdmStatus(status), output_data.data(), - output_data.size()); -} - -void MojoCdmProxy::OnMediaCryptoSessionCreated(media::CdmProxy::Status status, - uint32_t crypto_session_id, - uint64_t output_data) { - DVLOG(3) << __func__ << ": status = " << status - << ", crypto_session_id = " << crypto_session_id; - client_->OnMediaCryptoSessionCreated(ToCdmStatus(status), crypto_session_id, - output_data); -} - -void MojoCdmProxy::OnKeySet(media::CdmProxy::Status status) { - DVLOG(3) << __func__ << ": status = " << status; - client_->OnKeySet(ToCdmStatus(status)); -} - -void MojoCdmProxy::OnKeyRemoved(media::CdmProxy::Status status) { - DVLOG(3) << __func__ << ": status = " << status; - client_->OnKeyRemoved(ToCdmStatus(status)); -} - -} // namespace media
diff --git a/media/mojo/services/mojo_cdm_proxy.h b/media/mojo/services/mojo_cdm_proxy.h deleted file mode 100644 index 5c72640..0000000 --- a/media/mojo/services/mojo_cdm_proxy.h +++ /dev/null
@@ -1,85 +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 MEDIA_MOJO_SERVICES_MOJO_CDM_PROXY_H_ -#define MEDIA_MOJO_SERVICES_MOJO_CDM_PROXY_H_ - -#include <stdint.h> - -#include <vector> - -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "media/base/cdm_context.h" -#include "media/cdm/api/content_decryption_module.h" -#include "media/mojo/mojom/cdm_proxy.mojom.h" -#include "media/mojo/services/media_mojo_export.h" -#include "mojo/public/cpp/bindings/associated_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/remote.h" - -namespace media { - -// Implements a cdm::CdmProxy that communicates with mojom::CdmProxy. -class MEDIA_MOJO_EXPORT MojoCdmProxy : public cdm::CdmProxy, - mojom::CdmProxyClient { - public: - MojoCdmProxy(mojo::PendingRemote<mojom::CdmProxy> cdm_proxy_remote, - cdm::CdmProxyClient* client); - ~MojoCdmProxy() override; - - // cdm::CdmProxy implementation. - void Initialize() final; - void Process(Function function, - uint32_t crypto_session_id, - const uint8_t* input_data, - uint32_t input_data_size, - uint32_t expected_output_data_size) final; - void CreateMediaCryptoSession(const uint8_t* input_data, - uint32_t input_data_size) final; - void SetKey(uint32_t crypto_session_id, - const uint8_t* key_id, - uint32_t key_id_size, - KeyType key_type, - const uint8_t* key_blob, - uint32_t key_blob_size) final; - void RemoveKey(uint32_t crypto_session_id, - const uint8_t* key_id, - uint32_t key_id_size) final; - - // mojom::CdmProxyClient implementation. - void NotifyHardwareReset() final; - - // Returns the CDM ID associated with the remote CdmProxy. - int GetCdmId(); - - private: - void OnInitialized(media::CdmProxy::Status status, - media::CdmProxy::Protocol protocol, - uint32_t crypto_session_id, - int cdm_id); - void OnProcessed(media::CdmProxy::Status status, - const std::vector<uint8_t>& output_data); - void OnMediaCryptoSessionCreated(media::CdmProxy::Status status, - uint32_t crypto_session_id, - uint64_t output_data); - void OnKeySet(media::CdmProxy::Status status); - void OnKeyRemoved(media::CdmProxy::Status status); - - mojo::Remote<mojom::CdmProxy> cdm_proxy_remote_; - cdm::CdmProxyClient* client_; - - mojo::AssociatedReceiver<mojom::CdmProxyClient> client_receiver_{this}; - - int cdm_id_ = CdmContext::kInvalidCdmId; - - // NOTE: Weak pointers must be invalidated before all other member variables. - base::WeakPtrFactory<MojoCdmProxy> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(MojoCdmProxy); -}; - -} // namespace media - -#endif // MEDIA_MOJO_SERVICES_MOJO_CDM_PROXY_H_
diff --git a/media/mojo/services/mojo_cdm_proxy_service.cc b/media/mojo/services/mojo_cdm_proxy_service.cc deleted file mode 100644 index 1c74993..0000000 --- a/media/mojo/services/mojo_cdm_proxy_service.cc +++ /dev/null
@@ -1,101 +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 "media/mojo/services/mojo_cdm_proxy_service.h" - -#include "base/bind.h" -#include "base/macros.h" -#include "media/mojo/services/mojo_cdm_service_context.h" - -namespace media { - -MojoCdmProxyService::MojoCdmProxyService( - std::unique_ptr<::media::CdmProxy> cdm_proxy, - MojoCdmServiceContext* context) - : cdm_proxy_(std::move(cdm_proxy)), context_(context) { - DVLOG(1) << __func__; - DCHECK(cdm_proxy_); - DCHECK(context_); -} - -MojoCdmProxyService::~MojoCdmProxyService() { - DVLOG(1) << __func__; - - if (cdm_id_ != CdmContext::kInvalidCdmId) - context_->UnregisterCdmProxy(cdm_id_); -} - -void MojoCdmProxyService::Initialize( - mojo::PendingAssociatedRemote<mojom::CdmProxyClient> client, - InitializeCallback callback) { - DVLOG(2) << __func__; - - CHECK(!has_initialize_been_called_) << "Initialize should only happen once"; - has_initialize_been_called_ = true; - - client_.Bind(std::move(client)); - - cdm_proxy_->Initialize( - this, base::BindOnce(&MojoCdmProxyService::OnInitialized, - weak_factory_.GetWeakPtr(), std::move(callback))); -} - -void MojoCdmProxyService::Process(media::CdmProxy::Function function, - uint32_t crypto_session_id, - const std::vector<uint8_t>& input_data, - uint32_t expected_output_data_size, - ProcessCallback callback) { - DVLOG(3) << __func__; - cdm_proxy_->Process(function, crypto_session_id, input_data, - expected_output_data_size, std::move(callback)); -} - -void MojoCdmProxyService::CreateMediaCryptoSession( - const std::vector<uint8_t>& input_data, - CreateMediaCryptoSessionCallback callback) { - DVLOG(3) << __func__; - cdm_proxy_->CreateMediaCryptoSession(input_data, std::move(callback)); -} - -void MojoCdmProxyService::SetKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - media::CdmProxy::KeyType key_type, - const std::vector<uint8_t>& key_blob, - SetKeyCallback callback) { - DVLOG(3) << __func__; - cdm_proxy_->SetKey(crypto_session_id, key_id, key_type, key_blob, - std::move(callback)); -} - -void MojoCdmProxyService::RemoveKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - RemoveKeyCallback callback) { - DVLOG(3) << __func__; - cdm_proxy_->RemoveKey(crypto_session_id, key_id, std::move(callback)); -} - -void MojoCdmProxyService::NotifyHardwareReset() { - DVLOG(2) << __func__; - client_->NotifyHardwareReset(); -} - -base::WeakPtr<CdmContext> MojoCdmProxyService::GetCdmContext() { - DVLOG(2) << __func__; - return cdm_proxy_->GetCdmContext(); -} - -void MojoCdmProxyService::OnInitialized(InitializeCallback callback, - ::media::CdmProxy::Status status, - ::media::CdmProxy::Protocol protocol, - uint32_t crypto_session_id) { - CHECK_EQ(cdm_id_, CdmContext::kInvalidCdmId) - << "CDM proxy should only be created once."; - - if (status == ::media::CdmProxy::Status::kOk) - cdm_id_ = context_->RegisterCdmProxy(this); - - std::move(callback).Run(status, protocol, crypto_session_id, cdm_id_); -} - -} // namespace media
diff --git a/media/mojo/services/mojo_cdm_proxy_service.h b/media/mojo/services/mojo_cdm_proxy_service.h deleted file mode 100644 index e8eaa95..0000000 --- a/media/mojo/services/mojo_cdm_proxy_service.h +++ /dev/null
@@ -1,87 +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 MEDIA_MOJO_SERVICES_MOJO_CDM_PROXY_SERVICE_H_ -#define MEDIA_MOJO_SERVICES_MOJO_CDM_PROXY_SERVICE_H_ - -#include <stdint.h> - -#include <memory> - -#include "base/compiler_specific.h" -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "media/base/cdm_context.h" -#include "media/cdm/cdm_proxy.h" -#include "media/mojo/mojom/cdm_proxy.mojom.h" -#include "media/mojo/services/media_mojo_export.h" -#include "mojo/public/cpp/bindings/associated_remote.h" -#include "mojo/public/cpp/bindings/pending_associated_remote.h" - -namespace media { - -class MojoCdmServiceContext; - -// A mojom::CdmProxy implementation backed by a media::CdmProxy. -class MEDIA_MOJO_EXPORT MojoCdmProxyService : public mojom::CdmProxy, - public CdmProxy::Client { - public: - MojoCdmProxyService(std::unique_ptr<::media::CdmProxy> cdm_proxy, - MojoCdmServiceContext* context); - - ~MojoCdmProxyService() final; - - // mojom::CdmProxy implementation. - void Initialize(mojo::PendingAssociatedRemote<mojom::CdmProxyClient> client, - InitializeCallback callback) final; - void Process(media::CdmProxy::Function function, - uint32_t crypto_session_id, - const std::vector<uint8_t>& input_data, - uint32_t expected_output_data_size, - ProcessCallback callback) final; - void CreateMediaCryptoSession( - const std::vector<uint8_t>& input_data, - CreateMediaCryptoSessionCallback callback) final; - void SetKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - media::CdmProxy::KeyType key_type, - const std::vector<uint8_t>& key_blob, - SetKeyCallback callback) final; - void RemoveKey(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - RemoveKeyCallback callback) final; - - // CdmProxy::Client implementation. - void NotifyHardwareReset() final; - - // Get CdmContext to be used by the media pipeline. - base::WeakPtr<CdmContext> GetCdmContext(); - - int GetCdmIdForTesting() const { return cdm_id_; } - - private: - void OnInitialized(InitializeCallback callback, - ::media::CdmProxy::Status status, - ::media::CdmProxy::Protocol protocol, - uint32_t crypto_session_id); - - bool has_initialize_been_called_ = false; - - std::unique_ptr<::media::CdmProxy> cdm_proxy_; - MojoCdmServiceContext* const context_ = nullptr; - - mojo::AssociatedRemote<mojom::CdmProxyClient> client_; - - // Set to a valid CDM ID if the |cdm_proxy_| is successfully initialized. - int cdm_id_ = CdmContext::kInvalidCdmId; - - // NOTE: Weak pointers must be invalidated before all other member variables. - base::WeakPtrFactory<MojoCdmProxyService> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(MojoCdmProxyService); -}; - -} // namespace media - -#endif // MEDIA_MOJO_SERVICES_MOJO_CDM_PROXY_SERVICE_H_
diff --git a/media/mojo/services/mojo_cdm_proxy_unittest.cc b/media/mojo/services/mojo_cdm_proxy_unittest.cc deleted file mode 100644 index 8088e2ff..0000000 --- a/media/mojo/services/mojo_cdm_proxy_unittest.cc +++ /dev/null
@@ -1,390 +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 <stdint.h> - -#include <memory> - -#include "base/bind.h" -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "base/run_loop.h" -#include "base/test/gmock_callback_support.h" -#include "base/test/gtest_util.h" -#include "base/test/test_message_loop.h" -#include "media/base/mock_filters.h" -#include "media/cdm/cdm_proxy_context.h" -#include "media/mojo/mojom/cdm_proxy.mojom.h" -#include "media/mojo/services/mojo_cdm_proxy.h" -#include "media/mojo/services/mojo_cdm_proxy_service.h" -#include "media/mojo/services/mojo_cdm_service_context.h" -#include "mojo/public/cpp/bindings/interface_request.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "testing/gtest/include/gtest/gtest.h" - -using ::testing::_; -using ::testing::NotNull; -using ::testing::SaveArg; -using ::testing::StrictMock; - -namespace media { - -namespace { - -MATCHER_P(StatusEq, status, "") { - return (arg == cdm::CdmProxyClient::Status::kOk && - status == media::CdmProxy::Status::kOk) || - (arg == cdm::CdmProxyClient::Status::kFail && - status == media::CdmProxy::Status::kFail); -} - -constexpr uint32_t kCryptoSessionId = 1010; - -class MockCdmProxyContext : public CdmProxyContext {}; - -class MockCdmProxy : public media::CdmProxy, public media::CdmContext { - public: - MockCdmProxy() {} - ~MockCdmProxy() override = default; - - // media::CdmProxy implementation. - - base::WeakPtr<CdmContext> GetCdmContext() override { - return weak_factory_.GetWeakPtr(); - } - - MOCK_METHOD2(Initialize, void(Client* client, InitializeCB init_cb)); - - MOCK_METHOD5(Process, - void(Function function, - uint32_t crypto_session_id, - const std::vector<uint8_t>& input_data, - uint32_t expected_output_data_size, - ProcessCB process_cb)); - - MOCK_METHOD2(CreateMediaCryptoSession, - void(const std::vector<uint8_t>& input_data, - CreateMediaCryptoSessionCB create_media_crypto_session_cb)); - - MOCK_METHOD5(SetKey, - void(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - KeyType key_type, - const std::vector<uint8_t>& key_blob, - SetKeyCB set_key_cb)); - MOCK_METHOD3(RemoveKey, - void(uint32_t crypto_session_id, - const std::vector<uint8_t>& key_id, - RemoveKeyCB remove_key_cb)); - - // media::CdmContext implementation. - CdmProxyContext* GetCdmProxyContext() override { - return &mock_cdm_proxy_context_; - } - - private: - MockCdmProxyContext mock_cdm_proxy_context_; - base::WeakPtrFactory<MockCdmProxy> weak_factory_{this}; -}; - -class MockCdmProxyClient : public cdm::CdmProxyClient { - public: - MockCdmProxyClient() = default; - ~MockCdmProxyClient() override = default; - - MOCK_METHOD3(OnInitialized, - void(Status status, - Protocol protocol, - uint32_t crypto_session_id)); - MOCK_METHOD3(OnProcessed, - void(Status status, - const uint8_t* output_data, - uint32_t output_data_size)); - MOCK_METHOD3(OnMediaCryptoSessionCreated, - void(Status status, - uint32_t crypto_session_id, - uint64_t output_data)); - MOCK_METHOD1(OnKeySet, void(Status status)); - MOCK_METHOD1(OnKeyRemoved, void(Status status)); - MOCK_METHOD0(NotifyHardwareReset, void()); -}; - -} // namespace - -class MojoCdmProxyTest : public ::testing::Test { - public: - using Status = CdmProxy::Status; - - MojoCdmProxyTest() { - // Client side setup. - mojo::PendingRemote<mojom::CdmProxy> cdm_proxy_remote; - auto receiver = cdm_proxy_remote.InitWithNewPipeAndPassReceiver(); - mojo_cdm_proxy_.reset( - new MojoCdmProxy(std::move(cdm_proxy_remote), &client_)); - cdm_proxy_ = mojo_cdm_proxy_.get(); - - // Service side setup. - std::unique_ptr<MockCdmProxy> mock_cdm_proxy(new MockCdmProxy()); - mock_cdm_proxy_ = mock_cdm_proxy.get(); - mojo_cdm_proxy_service_.reset(new MojoCdmProxyService( - std::move(mock_cdm_proxy), &mojo_cdm_service_context_)); - receiver_.reset(new mojo::Receiver<mojom::CdmProxy>( - mojo_cdm_proxy_service_.get(), std::move(receiver))); - receiver_->set_disconnect_handler(base::BindOnce( - &MojoCdmProxyTest::OnConnectionError, base::Unretained(this))); - - base::RunLoop().RunUntilIdle(); - } - - ~MojoCdmProxyTest() override = default; - - void Initialize(Status expected_status = Status::kOk, - bool has_connection = true) { - if (has_connection) { - EXPECT_CALL(*mock_cdm_proxy_, Initialize(NotNull(), _)) - .WillOnce([&](auto, auto init_cb) { - std::move(init_cb).Run(expected_status, CdmProxy::Protocol::kNone, - kCryptoSessionId); - }); - EXPECT_CALL(client_, - OnInitialized(StatusEq(expected_status), - cdm::CdmProxyClient::kNone, kCryptoSessionId)) - .WillOnce(SaveArg<2>(&crypto_session_id_)); - } else { - // Client should always be called even without connection. But we only - // care about status in this case. - EXPECT_CALL(client_, OnInitialized(StatusEq(expected_status), _, _)); - } - - cdm_proxy_->Initialize(); - base::RunLoop().RunUntilIdle(); - } - - void Process(Status expected_status = Status::kOk, - bool has_connection = true) { - const std::vector<uint8_t> kInputData = {1, 2}; - const uint32_t kExpectedOutputDataSize = 111; - const std::vector<uint8_t> kOutputData = {3, 4, 5}; - - if (has_connection) { - EXPECT_CALL( - *mock_cdm_proxy_, - Process(CdmProxy::Function::kIntelNegotiateCryptoSessionKeyExchange, - crypto_session_id_, kInputData, kExpectedOutputDataSize, _)) - .WillOnce([&](auto, auto, auto, auto, auto process_cb) { - std::move(process_cb).Run(expected_status, kOutputData); - }); - EXPECT_CALL(client_, OnProcessed(StatusEq(expected_status), NotNull(), - kOutputData.size())); - } else { - // Client should always be called even without connection. But we only - // care about status in this case. - EXPECT_CALL(client_, OnProcessed(StatusEq(expected_status), _, _)); - } - - cdm_proxy_->Process( - cdm::CdmProxy::Function::kIntelNegotiateCryptoSessionKeyExchange, - crypto_session_id_, kInputData.data(), kInputData.size(), - kExpectedOutputDataSize); - base::RunLoop().RunUntilIdle(); - } - - void CreateMediaCryptoSession(Status expected_status = Status::kOk, - bool has_connection = true) { - const std::vector<uint8_t> kInputData = {6, 7}; - const uint32_t kMediaCryptoSessionId = 222; - const uint64_t kOutputData = 333; - - if (has_connection) { - EXPECT_CALL(*mock_cdm_proxy_, CreateMediaCryptoSession(kInputData, _)) - .WillOnce([&](auto, auto create_media_crypto_session_cb) { - std::move(create_media_crypto_session_cb) - .Run(expected_status, kMediaCryptoSessionId, kOutputData); - }); - EXPECT_CALL(client_, OnMediaCryptoSessionCreated( - StatusEq(expected_status), kMediaCryptoSessionId, - kOutputData)); - } else { - // Client should always be called even without connection. But we only - // care about status in this case. - EXPECT_CALL(client_, - OnMediaCryptoSessionCreated(StatusEq(expected_status), _, _)); - } - - cdm_proxy_->CreateMediaCryptoSession(kInputData.data(), kInputData.size()); - base::RunLoop().RunUntilIdle(); - } - - void SetKey() { - const std::vector<uint8_t> key_id = {8, 9}; - const std::vector<uint8_t> key_blob = {10, 11, 12}; - EXPECT_CALL(*mock_cdm_proxy_, - SetKey(crypto_session_id_, key_id, _, key_blob, _)) - .WillOnce([&](auto, auto, auto, auto, auto set_key_cb) { - std::move(set_key_cb).Run(Status::kOk); - }); - EXPECT_CALL(client_, OnKeySet(StatusEq(Status::kOk))); - cdm_proxy_->SetKey(crypto_session_id_, key_id.data(), key_id.size(), - cdm::CdmProxy::KeyType::kDecryptOnly, key_blob.data(), - key_blob.size()); - base::RunLoop().RunUntilIdle(); - } - - void RemoveKey() { - const std::vector<uint8_t> key_id = {13, 14}; - EXPECT_CALL(*mock_cdm_proxy_, RemoveKey(crypto_session_id_, key_id, _)) - .WillOnce([&](auto, auto, auto remove_key_cb) { - std::move(remove_key_cb).Run(Status::kOk); - }); - EXPECT_CALL(client_, OnKeyRemoved(StatusEq(Status::kOk))); - cdm_proxy_->RemoveKey(crypto_session_id_, key_id.data(), key_id.size()); - base::RunLoop().RunUntilIdle(); - } - - // Simulate connecting the media component with the CdmContext. Can only be - // called after the CdmProxy is successfully initialized (see Initialize()). - void SetCdm() { - int cdm_id = mojo_cdm_proxy_service_->GetCdmIdForTesting(); - cdm_context_ref_ = mojo_cdm_service_context_.GetCdmContextRef(cdm_id); - cdm_context_ = cdm_context_ref_->GetCdmContext(); - } - - CdmProxyContext* GetCdmProxyContext() { - return cdm_context_->GetCdmProxyContext(); - } - - void Destroy() { - mojo_cdm_proxy_.reset(); - base::RunLoop().RunUntilIdle(); - } - - void OnConnectionError() { mojo_cdm_proxy_service_.reset(); } - - void ForceConnectionError() { - receiver_->ResetWithReason(2, "Test closed connection."); - mojo_cdm_proxy_service_.reset(); - base::RunLoop().RunUntilIdle(); - } - - base::TestMessageLoop message_loop_; - uint32_t crypto_session_id_ = 0; - - // Client side members. - StrictMock<MockCdmProxyClient> client_; - std::unique_ptr<MojoCdmProxy> mojo_cdm_proxy_; - cdm::CdmProxy* cdm_proxy_ = nullptr; - - // Service side members. - MojoCdmServiceContext mojo_cdm_service_context_; - std::unique_ptr<MojoCdmProxyService> mojo_cdm_proxy_service_; - std::unique_ptr<mojo::Receiver<mojom::CdmProxy>> receiver_; - MockCdmProxy* mock_cdm_proxy_ = nullptr; - - // Media component side members. - std::unique_ptr<CdmContextRef> cdm_context_ref_; - CdmContext* cdm_context_ = nullptr; - - private: - DISALLOW_COPY_AND_ASSIGN(MojoCdmProxyTest); -}; - -TEST_F(MojoCdmProxyTest, Initialize) { - Initialize(); -} - -TEST_F(MojoCdmProxyTest, Initialize_Failure) { - Initialize(Status::kFail); -} - -TEST_F(MojoCdmProxyTest, Initialize_Twice) { - Initialize(); - EXPECT_CHECK_DEATH(Initialize()); -} - -TEST_F(MojoCdmProxyTest, Process) { - Initialize(); - Process(); -} - -TEST_F(MojoCdmProxyTest, Process_Failure) { - Initialize(); - Process(Status::kFail); -} - -TEST_F(MojoCdmProxyTest, CreateMediaCryptoSession) { - Initialize(); - Process(); - CreateMediaCryptoSession(); -} - -TEST_F(MojoCdmProxyTest, CreateMediaCryptoSession_Failure) { - Initialize(); - Process(); - CreateMediaCryptoSession(Status::kFail); -} - -TEST_F(MojoCdmProxyTest, SetKey) { - Initialize(); - Process(); - CreateMediaCryptoSession(); - SetKey(); -} - -TEST_F(MojoCdmProxyTest, RemoveKey) { - Initialize(); - Process(); - CreateMediaCryptoSession(); - RemoveKey(); -} - -TEST_F(MojoCdmProxyTest, Destroy) { - Initialize(); - Process(); - EXPECT_TRUE(mojo_cdm_proxy_service_); - Destroy(); - EXPECT_FALSE(mojo_cdm_proxy_service_); -} - -TEST_F(MojoCdmProxyTest, ConnectionError_BeforeInitialize) { - ForceConnectionError(); - Initialize(Status::kFail, false); -} - -TEST_F(MojoCdmProxyTest, ConnectionError_AfterInitialize) { - Initialize(); - Process(); - CreateMediaCryptoSession(); - - ForceConnectionError(); - - // Calling Process() and CreateMediaCryptoSession() without connection. These - // calls should fail but the client should still get notified (about the - // failure). - Process(Status::kFail, false); - CreateMediaCryptoSession(Status::kFail, false); -} - -TEST_F(MojoCdmProxyTest, GetCdmProxyContext) { - Initialize(); - SetCdm(); - EXPECT_TRUE(GetCdmProxyContext()); -} - -TEST_F(MojoCdmProxyTest, GetCdmProxyContext_AfterDestroy) { - Initialize(); - SetCdm(); - EXPECT_TRUE(GetCdmProxyContext()); - Destroy(); - EXPECT_FALSE(GetCdmProxyContext()); -} - -TEST_F(MojoCdmProxyTest, GetCdmProxyContext_AfterConnectionError) { - Initialize(); - SetCdm(); - EXPECT_TRUE(GetCdmProxyContext()); - ForceConnectionError(); - EXPECT_FALSE(GetCdmProxyContext()); -} - -} // namespace media
diff --git a/media/mojo/services/mojo_cdm_service.cc b/media/mojo/services/mojo_cdm_service.cc index 80910478..16e60b8 100644 --- a/media/mojo/services/mojo_cdm_service.cc +++ b/media/mojo/services/mojo_cdm_service.cc
@@ -188,16 +188,8 @@ &MojoCdmService::OnDecryptorConnectionError, base::Unretained(this))); } - // If the |context_| is not null, we should support connecting the |cdm| with - // the media player in the same process, which also has access to the - // |context_|. Hence pass back the |cdm_id_| obtained from the |context_|. - // Otherwise, if the |cdm| has a valid CDM ID by itself, this CDM can proxy - // all or parts of its functionalities to another remote CDM or CdmProxy. In - // this case, just we pass the remote CDM ID back. - int cdm_id = context_ ? cdm_id_ : cdm_context->GetCdmId(); - cdm_promise_result->success = true; - std::move(callback).Run(std::move(cdm_promise_result), cdm_id, + std::move(callback).Run(std::move(cdm_promise_result), cdm_id_, std::move(decryptor_remote)); }
diff --git a/media/mojo/services/mojo_cdm_service_context.cc b/media/mojo/services/mojo_cdm_service_context.cc index a49f74e..6279a4c 100644 --- a/media/mojo/services/mojo_cdm_service_context.cc +++ b/media/mojo/services/mojo_cdm_service_context.cc
@@ -11,58 +11,18 @@ #include "media/cdm/cdm_context_ref_impl.h" #include "media/mojo/services/mojo_cdm_service.h" -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/mojo/services/mojo_cdm_proxy_service.h" -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - namespace media { namespace { // Helper function to get the next unique (per-process) CDM ID to be assigned to -// a CDM or CdmProxy. It will be used to locate the CDM by the media players -// living in the same process. +// a CDM. It will be used to locate the CDM by the media players living in the +// same process. int GetNextCdmId() { static int g_next_cdm_id = CdmContext::kInvalidCdmId + 1; return g_next_cdm_id++; } -#if BUILDFLAG(ENABLE_CDM_PROXY) -class CdmProxyContextRef : public CdmContextRef, public CdmContext { - public: - explicit CdmProxyContextRef(base::WeakPtr<CdmContext> cdm_context) - : cdm_context_(cdm_context) {} - ~CdmProxyContextRef() final {} - - // CdmContextRef implementation. - CdmContext* GetCdmContext() final { return this; } - - private: - // CdmContext implementation. - std::unique_ptr<CallbackRegistration> RegisterEventCB( - EventCB event_cb) final { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return cdm_context_ ? cdm_context_->RegisterEventCB(std::move(event_cb)) - : nullptr; - } - - Decryptor* GetDecryptor() final { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return cdm_context_ ? cdm_context_->GetDecryptor() : nullptr; - } - - CdmProxyContext* GetCdmProxyContext() final { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return cdm_context_ ? cdm_context_->GetCdmProxyContext() : nullptr; - } - - base::WeakPtr<CdmContext> cdm_context_; - THREAD_CHECKER(thread_checker_); - - DISALLOW_COPY_AND_ASSIGN(CdmProxyContextRef); -}; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - } // namespace MojoCdmServiceContext::MojoCdmServiceContext() = default; @@ -83,23 +43,6 @@ cdm_services_.erase(cdm_id); } -#if BUILDFLAG(ENABLE_CDM_PROXY) -int MojoCdmServiceContext::RegisterCdmProxy( - MojoCdmProxyService* cdm_proxy_service) { - DCHECK(cdm_proxy_service); - int cdm_id = GetNextCdmId(); - cdm_proxy_services_[cdm_id] = cdm_proxy_service; - DVLOG(1) << __func__ << ": CdmProxyService registered with CDM ID " << cdm_id; - return cdm_id; -} - -void MojoCdmServiceContext::UnregisterCdmProxy(int cdm_id) { - DVLOG(1) << __func__ << ": cdm_id = " << cdm_id; - DCHECK(cdm_proxy_services_.count(cdm_id)); - cdm_proxy_services_.erase(cdm_id); -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - std::unique_ptr<CdmContextRef> MojoCdmServiceContext::GetCdmContextRef( int cdm_id) { DVLOG(1) << __func__ << ": cdm_id = " << cdm_id; @@ -114,15 +57,6 @@ return std::make_unique<CdmContextRefImpl>(cdm_service->second->GetCdm()); } -#if BUILDFLAG(ENABLE_CDM_PROXY) - // Next check all CdmProxies. - auto cdm_proxy_service = cdm_proxy_services_.find(cdm_id); - if (cdm_proxy_service != cdm_proxy_services_.end()) { - return std::make_unique<CdmProxyContextRef>( - cdm_proxy_service->second->GetCdmContext()); - } -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - LOG(ERROR) << "CdmContextRef cannot be obtained for CDM ID: " << cdm_id; return nullptr; }
diff --git a/media/mojo/services/mojo_cdm_service_context.h b/media/mojo/services/mojo_cdm_service_context.h index f074cf0..07290ba 100644 --- a/media/mojo/services/mojo_cdm_service_context.h +++ b/media/mojo/services/mojo_cdm_service_context.h
@@ -16,10 +16,8 @@ namespace media { -class CdmProxy; class CdmContextRef; class MojoCdmService; -class MojoCdmProxyService; // A class that creates, owns and manages all MojoCdmService instances. class MEDIA_MOJO_EXPORT MojoCdmServiceContext { @@ -33,15 +31,6 @@ // Unregisters the CDM. Must be called before the CDM is destroyed. void UnregisterCdm(int cdm_id); -#if BUILDFLAG(ENABLE_CDM_PROXY) - // Registers the |cdm_proxy_service| and returns a unique (per-process) CDM - // ID. - int RegisterCdmProxy(MojoCdmProxyService* cdm_proxy_service); - - // Unregisters the CdmProxy. Must be called before the CdmProxy is destroyed. - void UnregisterCdmProxy(int cdm_id); -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - // Returns the CdmContextRef associated with |cdm_id|. std::unique_ptr<CdmContextRef> GetCdmContextRef(int cdm_id); @@ -49,11 +38,6 @@ // A map between CDM ID and MojoCdmService. std::map<int, MojoCdmService*> cdm_services_; -#if BUILDFLAG(ENABLE_CDM_PROXY) - // A map between CDM ID and MojoCdmProxyService. - std::map<int, MojoCdmProxyService*> cdm_proxy_services_; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - DISALLOW_COPY_AND_ASSIGN(MojoCdmServiceContext); };
diff --git a/media/mojo/services/mojo_media_client.cc b/media/mojo/services/mojo_media_client.cc index bb5729b1..b9f53ad 100644 --- a/media/mojo/services/mojo_media_client.cc +++ b/media/mojo/services/mojo_media_client.cc
@@ -11,10 +11,6 @@ #include "media/base/renderer.h" #include "media/base/video_decoder.h" -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/cdm/cdm_proxy.h" -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - namespace media { MojoMediaClient::MojoMediaClient() = default; @@ -66,11 +62,4 @@ return nullptr; } -#if BUILDFLAG(ENABLE_CDM_PROXY) -std::unique_ptr<CdmProxy> MojoMediaClient::CreateCdmProxy( - const base::Token& cdm_guid) { - return nullptr; -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - } // namespace media
diff --git a/media/mojo/services/mojo_media_client.h b/media/mojo/services/mojo_media_client.h index 6dbbd2d..03263ee 100644 --- a/media/mojo/services/mojo_media_client.h +++ b/media/mojo/services/mojo_media_client.h
@@ -22,7 +22,6 @@ namespace base { class SingleThreadTaskRunner; -class Token; } // namespace base namespace gfx { @@ -33,7 +32,6 @@ class AudioDecoder; class CdmFactory; -class CdmProxy; class MediaLog; class Renderer; class VideoDecoder; @@ -95,12 +93,6 @@ virtual std::unique_ptr<CdmFactory> CreateCdmFactory( mojom::FrameInterfaceFactory* frame_interfaces); -#if BUILDFLAG(ENABLE_CDM_PROXY) - // Creates a CdmProxy that proxies part of CDM functionalities to a different - // entity, e.g. hardware CDM modules. - virtual std::unique_ptr<CdmProxy> CreateCdmProxy(const base::Token& cdm_guid); -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - protected: MojoMediaClient(); };
diff --git a/media/mojo/services/test_mojo_media_client.cc b/media/mojo/services/test_mojo_media_client.cc index 32a6fa86..7d51f3d 100644 --- a/media/mojo/services/test_mojo_media_client.cc +++ b/media/mojo/services/test_mojo_media_client.cc
@@ -22,12 +22,6 @@ #include "media/renderers/default_decoder_factory.h" #include "media/renderers/default_renderer_factory.h" -#if BUILDFLAG(ENABLE_CDM_PROXY) -#include "media/cdm/cdm_paths.h" // nogncheck -#include "media/cdm/cdm_proxy.h" // nogncheck -#include "media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.h" // nogncheck -#endif - namespace media { TestMojoMediaClient::TestMojoMediaClient() = default; @@ -113,15 +107,4 @@ return std::make_unique<DefaultCdmFactory>(); } -#if BUILDFLAG(ENABLE_CDM_PROXY) -std::unique_ptr<CdmProxy> TestMojoMediaClient::CreateCdmProxy( - const base::Token& cdm_guid) { - DVLOG(1) << __func__ << ": cdm_guid = " << cdm_guid.ToString(); - if (cdm_guid == kClearKeyCdmGuid) - return std::make_unique<ClearKeyCdmProxy>(); - - return nullptr; -} -#endif // BUILDFLAG(ENABLE_CDM_PROXY) - } // namespace media
diff --git a/media/mojo/services/test_mojo_media_client.h b/media/mojo/services/test_mojo_media_client.h index a626c13..c8899c0 100644 --- a/media/mojo/services/test_mojo_media_client.h +++ b/media/mojo/services/test_mojo_media_client.h
@@ -43,9 +43,6 @@ #endif // BUILDFLAG(ENABLE_CAST_RENDERER) std::unique_ptr<CdmFactory> CreateCdmFactory( mojom::FrameInterfaceFactory* /* frame_interfaces */) final; -#if BUILDFLAG(ENABLE_CDM_PROXY) - std::unique_ptr<CdmProxy> CreateCdmProxy(const base::Token& cdm_guid) final; -#endif // BUILDFLAG(ENABLE_CDM_PROXY) private: std::unique_ptr<AudioManager> audio_manager_;
diff --git a/media/test/data/eme_player_js/globals.js b/media/test/data/eme_player_js/globals.js index 329fb01..e3264599 100644 --- a/media/test/data/eme_player_js/globals.js +++ b/media/test/data/eme_player_js/globals.js
@@ -51,7 +51,6 @@ var VERIFY_HOST_FILES_TEST_KEYSYSTEM = 'org.chromium.externalclearkey.verifycdmhosttest'; var STORAGE_ID_TEST_KEYSYSTEM = 'org.chromium.externalclearkey.storageidtest'; -var EXTERNAL_CLEARKEY_CDM_PROXY = 'org.chromium.externalclearkey.cdmproxy'; // Key system name:value map to show on the document page. var KEY_SYSTEMS = {
diff --git a/media/test/data/eme_player_js/player_utils.js b/media/test/data/eme_player_js/player_utils.js index 5e2afa2..a352edac 100644 --- a/media/test/data/eme_player_js/player_utils.js +++ b/media/test/data/eme_player_js/player_utils.js
@@ -309,7 +309,6 @@ return WidevinePlayer; case CLEARKEY: case EXTERNAL_CLEARKEY: - case EXTERNAL_CLEARKEY_CDM_PROXY: case MESSAGE_TYPE_TEST_KEYSYSTEM: case CRASH_TEST_KEYSYSTEM: return ClearKeyPlayer;
diff --git a/media/video/video_encode_accelerator.cc b/media/video/video_encode_accelerator.cc index fe6a103..81528ab 100644 --- a/media/video/video_encode_accelerator.cc +++ b/media/video/video_encode_accelerator.cc
@@ -89,6 +89,18 @@ return str; } +bool VideoEncodeAccelerator::Config::HasTemporalLayer() const { + for (const auto& sl : spatial_layers) { + if (sl.num_of_temporal_layers > 1u) + return true; + } + return false; +} + +bool VideoEncodeAccelerator::Config::HasSpatialLayer() const { + return spatial_layers.size() > 1u; +} + void VideoEncodeAccelerator::Client::NotifyEncoderInfoChange( const VideoEncoderInfo& info) { // Do nothing if a client doesn't use the info.
diff --git a/media/video/video_encode_accelerator.h b/media/video/video_encode_accelerator.h index 26d1480..84a31261 100644 --- a/media/video/video_encode_accelerator.h +++ b/media/video/video_encode_accelerator.h
@@ -144,6 +144,9 @@ std::string AsHumanReadableString() const; + bool HasTemporalLayer() const; + bool HasSpatialLayer() const; + // Frame format of input stream (as would be reported by // VideoFrame::format() for frames passed to Encode()). VideoPixelFormat input_format;
diff --git a/net/base/escape.cc b/net/base/escape.cc index c9f4aec..7675c71 100644 --- a/net/base/escape.cc +++ b/net/base/escape.cc
@@ -240,6 +240,9 @@ code_point == 0x202F || // NARROW NO-BREAK SPACE (%E2%80%AF) code_point == 0x205F || // MEDIUM MATHEMATICAL SPACE (%E2%81%9F) code_point == 0x3000 || // IDEOGRAPHIC SPACE (%E3%80%80) + // U+2800 is rendered as a space, but is not considered whitespace (see + // crbug.com/1068531). + code_point == 0x2800 || // BRAILLE PATTERN BLANK (%E2%A0%80) // Default Ignorable ([:Default_Ignorable_Code_Point=Yes:]) and Format // characters ([:Cf:]) are also banned (see crbug.com/824715).
diff --git a/net/base/escape_unittest.cc b/net/base/escape_unittest.cc index a6dd0d5..31e0928 100644 --- a/net/base/escape_unittest.cc +++ b/net/base/escape_unittest.cc
@@ -203,6 +203,7 @@ "(%E2%80%89)(%E2%80%8A)(%E2%80%A8)(%E2%80%A9)"}, {"(%E2%80%AF)(%E2%81%9F)(%E3%80%80)", UnescapeRule::NORMAL, "(%E2%80%AF)(%E2%81%9F)(%E3%80%80)"}, + {"(%E2%A0%80)", UnescapeRule::NORMAL, "(%E2%A0%80)"}, // Default Ignorable and Formatting characters should not be unescaped. {"(%E2%81%A5)(%EF%BF%B0)(%EF%BF%B8)", UnescapeRule::NORMAL,
diff --git a/net/dns/BUILD.gn b/net/dns/BUILD.gn index 29953f7..4f451f9 100644 --- a/net/dns/BUILD.gn +++ b/net/dns/BUILD.gn
@@ -486,6 +486,15 @@ dict = "//net/data/fuzzer_dictionaries/net_dns_hosts_parse_fuzzer.dict" } +fuzzer_test("net_dns_integrity_record_fuzzer") { + sources = [ "integrity_record_fuzzer.cc" ] + deps = [ + "//base", + "//net", + "//net:net_fuzzer_test_support", + ] +} + fuzzer_test("net_dns_record_fuzzer") { sources = [ "dns_record_fuzzer.cc" ] deps = [
diff --git a/net/dns/integrity_record_fuzzer.cc b/net/dns/integrity_record_fuzzer.cc new file mode 100644 index 0000000..3619538e --- /dev/null +++ b/net/dns/integrity_record_fuzzer.cc
@@ -0,0 +1,64 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <limits> +#include <string> +#include <vector> + +#include "base/logging.h" +#include "base/optional.h" +#include "base/strings/string_piece.h" +#include "net/dns/record_rdata.h" + +namespace { + +base::StringPiece MakeStringPiece(const std::vector<uint8_t>& vec) { + return base::StringPiece(reinterpret_cast<const char*>(vec.data()), + vec.size()); +} + +// For arbitrary data, check that parse(data).serialize() == data. +void ParseThenSerializeProperty(const std::vector<uint8_t>& data) { + // Since |data| is chosen by a fuzzer, the digest is unlikely to match the + // nonce. As a result, |maybe_parsed| will likely be nullptr. However, we can + // still exercise the code. + auto maybe_parsed = net::IntegrityRecordRdata::Create(MakeStringPiece(data)); + if (!maybe_parsed) { + return; // Property is vacuously true since |data| was not parseable. + } + // Any parseable record's serialization should match the original input. + std::vector<uint8_t> serialized = maybe_parsed->Serialize(); + CHECK_EQ(serialized.size(), maybe_parsed->LengthForSerialization()); + CHECK(data == serialized); +} + +// For an arbitrary net::IntegrityRecordRdata r, test parse(r.serialize()) == r. +void SerializeThenParseProperty(const std::vector<uint8_t>& data) { + // Ensure that the nonce is not too long to be serialized. + if (data.size() > std::numeric_limits<uint16_t>::max()) { + // Property is vacuously true because the record is not serializable. + return; + } + // Build an IntegrityRecordRdata by treating |data| as a nonce. + net::IntegrityRecordRdata record_from_nonce(data); + std::vector<uint8_t> serialized = record_from_nonce.Serialize(); + CHECK_EQ(serialized.size(), record_from_nonce.LengthForSerialization()); + // Parsing |serialized| always produces a record identical to the original. + auto maybe_parsed = + net::IntegrityRecordRdata::Create(MakeStringPiece(serialized)); + CHECK(maybe_parsed); + CHECK(maybe_parsed->IsEqual(&record_from_nonce)); +} + +} // namespace + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + const std::vector<uint8_t> data_vec(data, data + size); + ParseThenSerializeProperty(data_vec); + SerializeThenParseProperty(data_vec); + // Construct a random IntegrityRecordRdata to exercise that code path. No need + // to exercise parse/serialize since we already did that with |data|. + net::IntegrityRecordRdata rand_record(net::IntegrityRecordRdata::Random()); + return 0; +}
diff --git a/net/dns/public/dns_protocol.h b/net/dns/public/dns_protocol.h index f26e281f..ea9112fe 100644 --- a/net/dns/public/dns_protocol.h +++ b/net/dns/public/dns_protocol.h
@@ -158,6 +158,11 @@ // https://tools.ietf.org/html/draft-ietf-tls-esni-04#section-8.3 static const uint16_t kExperimentalTypeEsniDraft4 = 65439; +// The INTEGRITY RR type exists purely for measuring how the DNS ecosystem +// handles new RR types. +// https://docs.google.com/document/d/14eCqVyT_3MSj7ydqNFl1Yl0yg1fs6g24qmYUUdi5V-k/edit?usp=sharing +static const uint16_t kExperimentalTypeIntegrity = 65521; + // DNS reply codes (RCODEs). // // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6
diff --git a/net/dns/record_parsed.cc b/net/dns/record_parsed.cc index 8b77b66..1ca18d8d 100644 --- a/net/dns/record_parsed.cc +++ b/net/dns/record_parsed.cc
@@ -65,6 +65,9 @@ case EsniRecordRdata::kType: rdata = EsniRecordRdata::Create(record.rdata, *parser); break; + case IntegrityRecordRdata::kType: + rdata = IntegrityRecordRdata::Create(record.rdata); + break; default: DVLOG(1) << "Unknown RData type for received record: " << record.type; return std::unique_ptr<const RecordParsed>();
diff --git a/net/dns/record_rdata.cc b/net/dns/record_rdata.cc index 6aef737..ef518cfd1 100644 --- a/net/dns/record_rdata.cc +++ b/net/dns/record_rdata.cc
@@ -9,6 +9,7 @@ #include "base/big_endian.h" #include "base/memory/ptr_util.h" +#include "base/rand_util.h" #include "net/base/ip_address.h" #include "net/dns/dns_response.h" #include "net/dns/public/dns_protocol.h" @@ -512,4 +513,98 @@ addresses_ == esni_other->addresses_; } +IntegrityRecordRdata::IntegrityRecordRdata(Nonce nonce) + : nonce_(std::move(nonce)), digest_(Hash(nonce_)) { + DCHECK(Hash(nonce_) == digest_); +} + +IntegrityRecordRdata::IntegrityRecordRdata(IntegrityRecordRdata&&) = default; +IntegrityRecordRdata::IntegrityRecordRdata(const IntegrityRecordRdata&) = + default; +IntegrityRecordRdata::~IntegrityRecordRdata() = default; + +// static +constexpr size_t IntegrityRecordRdata::kDigestLen; + +bool IntegrityRecordRdata::IsEqual(const RecordRdata* other) const { + if (other->Type() != Type()) + return false; + const IntegrityRecordRdata* integrity_other = + static_cast<const IntegrityRecordRdata*>(other); + return this->nonce_ == integrity_other->nonce_ && + this->digest_ == integrity_other->digest_; +} + +uint16_t IntegrityRecordRdata::Type() const { + return kType; +} + +// static +std::unique_ptr<IntegrityRecordRdata> IntegrityRecordRdata::Create( + const base::StringPiece& data) { + base::BigEndianReader reader(data.data(), data.size()); + // Parse a U16-prefixed |Nonce| followed by a |Digest|. + base::StringPiece parsed_nonce, parsed_digest; + if (!reader.ReadU16LengthPrefixed(&parsed_nonce) || + !reader.ReadPiece(&parsed_digest, kDigestLen)) { + return nullptr; + } + if (reader.remaining() > 0) { + return nullptr; + } + + // Generate an Integrity record given only the nonce. + auto record = std::make_unique<IntegrityRecordRdata>( + Nonce(parsed_nonce.begin(), parsed_nonce.end())); + + // Verify that the computed digest matches the parsed digest. + if (parsed_digest != record->digest()) { + return nullptr; + } + return record; +} + +// static +IntegrityRecordRdata IntegrityRecordRdata::Random() { + constexpr uint16_t kMinNonceLen = 32; + constexpr uint16_t kMaxNonceLen = 512; + + // Construct random nonce. + const uint16_t nonce_len = base::RandInt(kMinNonceLen, kMaxNonceLen); + Nonce nonce(nonce_len); + base::RandBytes(nonce.data(), nonce.size()); + + return IntegrityRecordRdata(std::move(nonce)); +} + +std::vector<uint8_t> IntegrityRecordRdata::Serialize() const { + // Create backing buffer and writer. + std::vector<uint8_t> serialized(LengthForSerialization()); + base::BigEndianWriter writer(reinterpret_cast<char*>(serialized.data()), + serialized.size()); + CHECK(writer.WriteU16(nonce_.size())); + CHECK(writer.WriteBytes(nonce_.data(), nonce_.size())); + CHECK(writer.WriteBytes(digest_.data(), digest_.size())); + CHECK_EQ(writer.remaining(), 0u); + return serialized; +} + +size_t IntegrityRecordRdata::LengthForSerialization() const { + // A serialized IntegrityRecordRdata consists of a U16-prefixed |nonce_|, + // followed by the bytes of |digest_|. + return sizeof(uint16_t) + nonce_.size() + digest_.size(); +} + +// static +IntegrityRecordRdata::Digest IntegrityRecordRdata::Hash(const Nonce& nonce) { + Digest digest; + SHA256(nonce.data(), nonce.size(), digest.data()); + return digest; +} + +base::StringPiece IntegrityRecordRdata::digest() const { + return base::StringPiece(reinterpret_cast<const char*>(digest_.data()), + digest_.size()); +} + } // namespace net
diff --git a/net/dns/record_rdata.h b/net/dns/record_rdata.h index e42c228..ac6d5ae 100644 --- a/net/dns/record_rdata.h +++ b/net/dns/record_rdata.h
@@ -14,11 +14,13 @@ #include "base/compiler_specific.h" #include "base/logging.h" #include "base/macros.h" +#include "base/optional.h" #include "base/strings/string_piece.h" #include "net/base/io_buffer.h" #include "net/base/ip_address.h" #include "net/base/net_export.h" #include "net/dns/public/dns_protocol.h" +#include "third_party/boringssl/src/include/openssl/sha.h" namespace net { @@ -310,6 +312,62 @@ DISALLOW_COPY_AND_ASSIGN(EsniRecordRdata); }; +// This class parses and serializes the INTEGRITY DNS record. +// +// This RR was invented for a preliminary HTTPSSVC experiment. See the public +// design doc: +// https://docs.google.com/document/d/14eCqVyT_3MSj7ydqNFl1Yl0yg1fs6g24qmYUUdi5V-k/edit?usp=sharing +// +// The wire format of INTEGRITY records consists of a U16-prefixed nonce +// followed by |kDigestLen| bytes, which should be equal to the SHA256 hash of +// the nonce contents. +class NET_EXPORT IntegrityRecordRdata : public RecordRdata { + public: + static constexpr uint16_t kType = dns_protocol::kExperimentalTypeIntegrity; + + static constexpr size_t kDigestLen = SHA256_DIGEST_LENGTH; + + using Nonce = std::vector<uint8_t>; + using Digest = std::array<uint8_t, kDigestLen>; + + IntegrityRecordRdata() = delete; + // Constructs a new record, computing the digest value from |nonce|. + explicit IntegrityRecordRdata(Nonce nonce); + IntegrityRecordRdata(IntegrityRecordRdata&&); + IntegrityRecordRdata(const IntegrityRecordRdata&); + ~IntegrityRecordRdata() override; + + IntegrityRecordRdata& operator=(const IntegrityRecordRdata&) = default; + IntegrityRecordRdata& operator=(IntegrityRecordRdata&&) = default; + + bool IsEqual(const RecordRdata* other) const override; + uint16_t Type() const override; + + // Attempts to parse an INTEGRITY record from |data|. Returns nullptr when the + // parse fails or when the parsed digest is not equal to the SHA256 hash of + // the parsed nonce. + static std::unique_ptr<IntegrityRecordRdata> Create( + const base::StringPiece& data); + + // Generate an integrity record with a random nonce and corresponding digest. + static IntegrityRecordRdata Random(); + + // Serialize |this| using the INTEGRITY wire format. + std::vector<uint8_t> Serialize() const; + + // Returns the exact number of bytes |this| will occupy when serialized. + size_t LengthForSerialization() const; + + const Nonce& nonce() const { return nonce_; } + base::StringPiece digest() const; + + private: + static Digest Hash(const Nonce& nonce); + + Nonce nonce_; + Digest digest_; +}; + } // namespace net #endif // NET_DNS_RECORD_RDATA_H_
diff --git a/net/dns/record_rdata_unittest.cc b/net/dns/record_rdata_unittest.cc index e245c67b..2a60629 100644 --- a/net/dns/record_rdata_unittest.cc +++ b/net/dns/record_rdata_unittest.cc
@@ -8,6 +8,7 @@ #include <memory> #include "base/big_endian.h" +#include "base/optional.h" #include "net/dns/dns_response.h" #include "net/dns/dns_test_util.h" #include "net/test/gtest_util.h" @@ -27,6 +28,10 @@ return base::StringPiece(data_cc, size); } +base::StringPiece MakeStringPiece(const std::vector<uint8_t>& vec) { + return MakeStringPiece(vec.data(), vec.size()); +} + TEST(RecordRdataTest, ParseSrvRecord) { // These are just the rdata portions of the DNS records, rather than complete // records, but it works well enough for this test. @@ -777,5 +782,120 @@ EXPECT_THAT(rdata.buf(), ElementsAreArray(expected_rdata)); } +// Test that for arbitrary IntegrityRecordRdata r, Parse(Serialize(r)) == r. +TEST(RecordRdataTest, IntegrityParseSerializeInverseProperty) { + IntegrityRecordRdata record(IntegrityRecordRdata::Random()); + base::Optional<std::vector<uint8_t>> serialized = record.Serialize(); + EXPECT_TRUE(serialized); + std::unique_ptr<IntegrityRecordRdata> reparsed = + IntegrityRecordRdata::Create(MakeStringPiece(*serialized)); + EXPECT_TRUE(reparsed); + EXPECT_TRUE(reparsed->IsEqual(&record)); +} + +TEST(RecordRdataTest, IntegrityEmptyNonceCornerCase) { + const IntegrityRecordRdata::Nonce empty_nonce; + IntegrityRecordRdata record(empty_nonce); + + base::Optional<std::vector<uint8_t>> serialized = record.Serialize(); + EXPECT_TRUE(serialized); + std::unique_ptr<IntegrityRecordRdata> reparsed = + IntegrityRecordRdata::Create(MakeStringPiece(*serialized)); + EXPECT_TRUE(reparsed); + EXPECT_TRUE(reparsed->IsEqual(&record)); + EXPECT_EQ(reparsed->nonce().size(), 0u); +} + +TEST(RecordRdataTest, IntegrityMoveConstructor) { + IntegrityRecordRdata record_a(IntegrityRecordRdata::Random()); + std::vector<uint8_t> serialized_a = record_a.Serialize(); + + IntegrityRecordRdata record_b = std::move(record_a); + std::vector<uint8_t> serialized_b = record_b.Serialize(); + + EXPECT_EQ(serialized_a, serialized_b); +} + +TEST(RecordRdataTest, IntegrityRandomRecordsDiffer) { + IntegrityRecordRdata record_a(IntegrityRecordRdata::Random()); + IntegrityRecordRdata record_b(IntegrityRecordRdata::Random()); + EXPECT_TRUE(!record_a.IsEqual(&record_b)); +} + +TEST(RecordRdataTest, IntegritySerialize) { + IntegrityRecordRdata record({'A'}); + const base::Optional<std::vector<uint8_t>> serialized = record.Serialize(); + EXPECT_TRUE(serialized); + + // Expected payload contains the SHA256 hash of 'A'. For the lazy: + // $ echo -n A | sha256sum | cut -f1 -d' ' | sed -e 's/\(..\)/0x\1, /g' + const std::vector<uint8_t> expected = { + 0, 1, 'A', // Length prefix and nonce + // Begin digest + 0x55, 0x9a, 0xea, 0xd0, 0x82, 0x64, 0xd5, 0x79, 0x5d, 0x39, 0x09, 0x71, + 0x8c, 0xdd, 0x05, 0xab, 0xd4, 0x95, 0x72, 0xe8, 0x4f, 0xe5, 0x55, 0x90, + 0xee, 0xf3, 0x1a, 0x88, 0xa0, 0x8f, 0xdf, 0xfd, // End digest + }; + + EXPECT_TRUE(*serialized == expected); +} + +TEST(RecordRdataTest, IntegrityParse) { + const std::vector<uint8_t> serialized = { + 0, 6, 'f', 'o', 'o', 'b', 'a', 'r', // Length prefix and nonce + 0xc3, 0xab, 0x8f, 0xf1, 0x37, 0x20, 0xe8, 0xad, 0x90, // Begin digest + 0x47, 0xdd, 0x39, 0x46, 0x6b, 0x3c, 0x89, 0x74, 0xe5, 0x92, 0xc2, + 0xfa, 0x38, 0x3d, 0x4a, 0x39, 0x60, 0x71, 0x4c, 0xae, 0xf0, 0xc4, + 0xf2, // End digest + }; + auto record = IntegrityRecordRdata::Create(MakeStringPiece(serialized)); + EXPECT_TRUE(record); +} + +TEST(RecordRdataTest, IntegrityBadParseTruncatedNonce) { + const std::vector<uint8_t> serialized = { + 0, 6, 'f', 'o', 'o' // Length prefix and truncated nonce + }; + auto record = IntegrityRecordRdata::Create(MakeStringPiece(serialized)); + EXPECT_EQ(record, nullptr); +} + +TEST(RecordRdataTest, IntegrityBadParseTruncatedDigest) { + const std::vector<uint8_t> serialized = { + 0, 6, 'f', 'o', 'o', 'b', 'a', 'r', // Length prefix and nonce + // Begin Digest + 0xc3, 0xab, 0x8f, 0xf1, 0x37, 0x20, 0xe8, 0xad, 0x90, 0x47, 0xdd, 0x39, + 0x46, 0x6b, 0x3c, 0x89, 0x74, 0xe5, 0x92, 0xc2, 0xfa, 0x38, 0x3d, + 0x4a, // End digest + }; + auto record = IntegrityRecordRdata::Create(MakeStringPiece(serialized)); + EXPECT_EQ(record, nullptr); +} + +TEST(RecordRdataTest, IntegrityBadParseExtraBytes) { + const std::vector<uint8_t> serialized = { + 0, 6, 'f', 'o', 'o', 'b', 'a', 'r', // Length prefix and nonce + // Begin digest + 0xc3, 0xab, 0x8f, 0xf1, 0x37, 0x20, 0xe8, 0xad, 0x90, 0x47, 0xdd, 0x39, + 0x46, 0x6b, 0x3c, 0x89, 0x74, 0xe5, 0x92, 0xc2, 0xfa, 0x38, 0x3d, 0x4a, + 0x39, 0x60, 0x71, 0x4c, 0xae, 0xf0, 0xc4, 0xf2, // End digest + 'e', 'x', 't', 'r', 'a' // Trailing bytes + }; + auto record = IntegrityRecordRdata::Create(MakeStringPiece(serialized)); + EXPECT_EQ(record, nullptr); +} + +TEST(RecordRdataTest, IntegrityCorruptedDigest) { + const std::vector<uint8_t> serialized = { + 0, 6, 'f', 'o', 'o', 'b', 'a', 'r', // Length prefix and nonce + 0xde, 0xad, 0xbe, 0xef, 0x37, 0x20, 0xe8, 0xad, 0x90, // Begin digest + 0x47, 0xdd, 0x39, 0x46, 0x6b, 0x3c, 0x89, 0x74, 0xe5, 0x92, 0xc2, + 0xfa, 0x38, 0x3d, 0x4a, 0x39, 0x60, 0x71, 0x4c, 0xae, 0xf0, 0xc4, + 0xf2, // End digest + }; + auto record = IntegrityRecordRdata::Create(MakeStringPiece(serialized)); + EXPECT_FALSE(record); +} + } // namespace } // namespace net
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json index 9aa418d2..bce937f 100644 --- a/net/http/transport_security_state_static.json +++ b/net/http/transport_security_state_static.json
@@ -47122,7 +47122,6 @@ { "name": "tufashionista.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tvhshop.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tvseries.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "twistdevelopment.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tycho.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "udvoukocek.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ultratech.software", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73757,8 +73756,6 @@ { "name": "jinsha8888888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jinsha99999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "johan-koffeman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "johnpenny.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "johnpenny.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jolfamarket.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jomsolat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jongcaxent.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74049,7 +74046,6 @@ { "name": "nevergirl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "new-smile.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newillusion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "newimage.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newlovers.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newlovers.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newlytricks.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -84448,7 +84444,6 @@ { "name": "kreativklinik.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "krypto-geld.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kurhotel-am-reischberg.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kweb.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "laab.gv.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "laby.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lajkatheme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91971,7 +91966,6 @@ { "name": "schorel.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schrok.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schweininchen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "scoutsberg.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "scrapcarremovalmississauga.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "seadrive.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "secluded.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -96054,7 +96048,6 @@ { "name": "green-adn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hackdown.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "harianaceh.co.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hehaohan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "heyrockerproductions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hformachine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hookahfoil.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -97388,7 +97381,6 @@ { "name": "wikimirror.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wilco-s.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wildmine.su", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wohao.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wowbabykids.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wp-bootstrap.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wsrn.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -107600,7 +107592,6 @@ { "name": "flexussolucoes.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "flubio.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fluidbb.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fotopianka.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fox-zulu.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "friherrsindemarit.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fulltextarchive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -107881,7 +107872,6 @@ { "name": "simokala.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "slothy.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smartseller.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "socialfirm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soilegustafsson.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soloroboto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "songlifty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -107905,7 +107895,6 @@ { "name": "swayampaaka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "taaltaal.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tapbutdao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tarihi.ist", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techiecomputers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "technews360.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teknisetdemarit.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -107966,6 +107955,620 @@ { "name": "youngsigncompany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zilsoft.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "016910804.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "123start.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2002000.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2makeu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "4driver.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "4hypo.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "88cakescorner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abbyvangrinsven.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "absentia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acgc.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adamliu.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adauge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adhdyogi.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adriankeenan.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ahmed-alasadi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akalpremkaur.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgate.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgate.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgate.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgate.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgateumc.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgateumc.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgateumc.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgateumc.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldersgateumc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alimak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allaccessglobal.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allinform.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allremotecodes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "almukhtar.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alperozmen.kim", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alphazure.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alquilerps5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amatista.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anlovegeek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ant.lgbt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antivirusgratuitos.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apuraytravel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arabwomen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "archaeology.lk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aromaimportado.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artlinestix.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artofclouds.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asdf.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asean-wen.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astyork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "at-machining.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atlaso.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "attoch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "audionpack.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aulasprofdanilo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aussieparrotlets.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avitus.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "awalong.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "backflow.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baecker-know-how.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baghtelecom.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bayanbennett.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bbcustomremodeling.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bbunits.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bcyw56.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bdikaros-network.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "be.gy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestappliancedoctor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestreviewcenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "betassl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bimechanics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "birthdaycakekuching.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bleatingsheep.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blocked.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bluebikesvalencia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bottom9clothing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boutiquedelhogar.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bowmanwilliams.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brain-dev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brajenovic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bran.cool", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "braxtonehle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brooklynreclaimed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "businessguide.co.ke", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bytetime.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "c-netsys.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "c057cl7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "campus-competences.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "candalgic.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canopy.garden", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "captainkids.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cardoneshop.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "careify.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cateromarket.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catsgalore.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cbdbflo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cdrjapan.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "changenow.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "charuni.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chatterbox-aws.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chinafree.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chinafree.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cibleclick.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cint.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clariti-health.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cleanvision.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clementpinon.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloudfree.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloudmyhome.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cnfree.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cnnc.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colbird.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colombiawebs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comedicgrouperu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "community-services.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comprocellularishop.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comunate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "confetayrona.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "connorfindlay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "constelacion3d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "convert2sql.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cookandgame.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cortesparapelo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coryluba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cosmicyes.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "covid-graphs.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "covid-model.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "covid19statstracker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "covidmodel.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cpad.org.pk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crea.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "creatapeak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "credee.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cricoff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crohnszone.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cryptomize.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cryptonewsz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cthu.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cuestiondegustos.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "czechglaskralen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dagjetreinen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danangcitytours.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danchestertonphoto.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danielmorales917.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deepclub-chat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deepwoodshop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "depedapplication.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "depedresearch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devoc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dezinfekcianaruky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "differmint.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digino.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digino.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digino.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalmarketerconsultant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dioxido.com.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dnddobbelstenen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dossierweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "download-audacity.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dream-factory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dsv-salesmanager.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dualscreenblog.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duoqichina.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duoqichina.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "durkinconstruction.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dvprogram.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-procurement.co.mz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebix.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebjork.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebooksinfocus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecosdanoticia.net.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eksk.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elinahafer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elpueblo.com.do", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eltd.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "embello.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emulationking.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "envisionsproperty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erenvakfi.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ericlight.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esajokinen.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "etcivil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everythingcebu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "expanddigital.media", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "factis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fakebusters.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fammamtl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "famousit.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "farumbedandbreakfast.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feelmingo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "felixvelarde.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fillu.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flagipanstw.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fletesymudanzasbaratas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flycheaps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forcewaterproofing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foreverreem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foto-mario.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotomodels.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fourcornerscb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frasermurray.scot", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freak-show.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frednet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freecn.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freegamesmac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gassero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gatekala.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getgroots.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gfmp.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "given2.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "given2.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "given2.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "given4.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goblackcat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goofy.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gpony.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guiaturisticanuevayork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gustavovelasco.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hack.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackade.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hafer.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haigekassa.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happybaby-ec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happywheels1.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hdmovies.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthynutritionguide.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heeftmijnwebsitehttpsnodig.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hermiyanto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herychreality.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horos.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotelsinroatan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "houseofaceonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htikeagkyaw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ifnet.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ihongchao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iliturkey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imaniprima.co.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imap.support", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imqyw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "industriascruzcentro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infomikulcice.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ingebroer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "instaon.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intcarshow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipv6.cool", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "isabelcaviedes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ispn.edu.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itcoolie.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itgalaxy.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jacobdorais.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jafarmehdipor.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jamesplumbingcompanypasadenatx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jfjtransport.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jhonmurillo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jmap.support", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jojo.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jon8rfc.homeip.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsdesign.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jub0bs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karaokerentalmontreal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karaokerentalottawa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karaokerentaltoronto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karpat.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katapult-impuls.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keycdn.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keysmedspa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kls-platform.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "koishi.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "komponenty.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "korkortonline.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krome.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krpaforum.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks178.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks187.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks500.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks700.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks800.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "l2l.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lablic-beta.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "langages-programmation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "latronicenergy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80803.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80804.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80807.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80810.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80811.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80813.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80817.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lc80820.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lejade.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "letterzaken.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leyendaluzrenacer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "licensediscovery.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lishup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "littleireland.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localssite.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locationkaraokemontreal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locationkaraokeottawa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locationkaraokequebec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithunit.cat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithunit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithunit.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "logodzyn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lojahbk.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lojavirtualdopsicopedagogo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "losangelesescorts.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luisabreu.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luna-zen.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lustylabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lyhathu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macrofox.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magisterjuris.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magnamus.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maintenancemtp.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "majalmirasol.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makeitshort.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manilacrawl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marielouise-oliwkiewicz.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marropax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvelweed.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masterin.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mateu.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "matronal.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mauriciodulce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maytinhxachtay.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mazelike.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "me.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meaningfulaction.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec000.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec111.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec222.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec333.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec555.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec666.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec777.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mec999.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mechasdepelo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mediaforkids.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medinorte.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meditez.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medklee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meier-stracke.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mereni.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meskimonos.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metdijital.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metro-detroit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michaelkosiba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "midiarioalcoholico.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miguelcolmenares.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miisy.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miisy.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "milchweg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "millbrookbedandbreakfast.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "milliarden-liste.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mindfulnessjourney.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftrealgold.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirasurclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mixmastermiguel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mizuasobi.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mkm.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobilerhandwerker.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobilise.solutions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mockups.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mokujinken.tokyo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mondsee-psychotherapie.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monicahq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moondsee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moovhl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moromsmile.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mostardela.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrak.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mtp-services.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muir.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muslimah.boutique", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mvmm.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mycloudhome.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mywestondental.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "n2ray.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "n3oxid.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "namisens.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naturallyvegan.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "negociosurbanos.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netsys.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nhahatde.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nhasicuibap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nianubo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nicaieri.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "niciunde.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "northstate.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "numit.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nyamulab.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "odo-pro.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "odontologiawilliampizarro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "odzywianie.info.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "omveda.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "on-air.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osteopathie-guggenberger.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otokirala.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ourwits.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "outdoorhaber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pansino.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pebkac.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perezplumbinginc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photo-booth.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piedroshop.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pilotpov.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piraten-kleinbasel.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plus36.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pop3.support", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "posukovskaschola.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prisonerresource.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "programer21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proj6.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psucompare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psv-herford-badminton.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pta-security.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pubsasiedzi.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qanatnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quasetio.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quel-dj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quizinn.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raamattuopisto.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radnas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ragnarokhpg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rallyekrumlov.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rapidxray.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ravihotel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ravijuhend.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rcsscontractors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rebelsewerservices.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recitoners.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recoveringfromfaith.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reikimontreal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reliabledegree.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "restock.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rmp-gebaeudedienste.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robeschinoises.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robi-aesch.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rolibo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romeing.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rsrnd.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rugbugecoflooring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruifu.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rundh.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runningshoeshq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s-geiser.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s6academy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sa-hc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sacodecuentos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salud-paratodos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanatstore.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarouel.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sawiday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sbl250.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scambusters.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scaracloud.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "schoolbuddy.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secretsauceangel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seondigo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoprnews.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seounlock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serverstatus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sevenartzpublicidad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "share.gy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sharkeyscuba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shawfamily.id.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shirlygilad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.lu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmalux.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simsalafresh.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sivizius.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skyhighescaperoom.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smurffi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sohail.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solovyovalawfirm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sourmatt.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spartac.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spendleex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sro.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sros.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ssk.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sssnet.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stackstartup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stackstartup.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "standdownofnorthjersey.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startstack.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startup-stack.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startup-stack.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.llc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.services", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.software", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.technology", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstacktech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startuptechstack.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "steggemachine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stevesbriefmovierecommendations.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "storybuilder.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strandkorb-jentzsch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studujdigital.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sumareaguas.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "summer.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sumutoday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suntzuparadirectivos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supercours.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "support96.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sweetologist.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swish-ict.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "systemd.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sysv-consult.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "szerver1.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taildb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "talyllyn.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tardics.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techno-iptv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technoteers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telesonicengineering.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terraco.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "texcolors.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "th-nuernberg.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "the-spellcaster.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebismarckmarathon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebrookeb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thehasanyildirim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thekidszone.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thelimitededition.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thenational.academy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theoldsewingfactory.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thepinfluencers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thestreet.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "to.gt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toby.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tonyzhao.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "totalleedee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tozein.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trailplans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trans-pel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trantuanminh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trashexpert.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "triangela.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "triangela.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turtledigital.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tuxforums.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "txtdb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ulrichracing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unblockit.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unepierrepourlui.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unitehelivy.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unplugstore.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unpoditalia.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unvoyageenvelo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upsilonsigmaphi.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "van-assen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vatitsolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "veganoos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vietnamtravelmart.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vigneshkumar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vilantice.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vinisol.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viralme.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virtualdawgs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "visadoparausa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vk1fj.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voom.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vozlegal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vutumusic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w3ctag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wardpieters.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "watchco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-worker.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web.hr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webhr.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wego.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whatthefoxhat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wideworks.agency", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winfuture.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winfuture.mobi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "witch-anastasia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "workaround.run", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xabifk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--43-6kc4be0fbz.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--nicieri-b4a.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--okra.xn--6qq986b3xl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xyconsultoresasociados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yannickkordel.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yanwo.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yg-crew.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yobda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yojanahub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "youbehero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ywyz.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zagainov.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimponuj.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zesgoes.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zir-online.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zonaairsoft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zuluconnect.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, // END OF 1-YEAR BULK HSTS ENTRIES // Only eTLD+1 domains can be submitted automatically to hstspreload.org,
diff --git a/net/socket/udp_socket_unittest.cc b/net/socket/udp_socket_unittest.cc index 18eb55670..2d04b0d 100644 --- a/net/socket/udp_socket_unittest.cc +++ b/net/socket/udp_socket_unittest.cc
@@ -1155,7 +1155,7 @@ .WillOnce(Return(true)); dscp_manager_->Set(DSCP_CS7); - auto error = std::make_unique<base::internal::ScopedClearLastError>(); + auto error = std::make_unique<base::ScopedClearLastError>(); ::SetLastError(ERROR_DEVICE_REINITIALIZATION_NEEDED); EXPECT_CALL(api_, AddSocketToFlow(_, _, _, _, _, _)).WillOnce(Return(false)); EXPECT_CALL(api_, SetFlow(_, _, _, _, _, _, _)).Times(0);
diff --git a/services/network/trust_tokens/trust_token_request_helper_factory.cc b/services/network/trust_tokens/trust_token_request_helper_factory.cc index dae94270..54223c379 100644 --- a/services/network/trust_tokens/trust_token_request_helper_factory.cc +++ b/services/network/trust_tokens/trust_token_request_helper_factory.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "services/network/trust_tokens/trust_token_request_helper_factory.h" +#include <memory> #include <utility> @@ -10,14 +11,20 @@ #include "net/url_request/url_request.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/mojom/trust_tokens.mojom-shared.h" +#include "services/network/trust_tokens/ed25519_trust_token_request_signer.h" #include "services/network/trust_tokens/suitable_trust_token_origin.h" #include "services/network/trust_tokens/trust_token_http_headers.h" +#include "services/network/trust_tokens/trust_token_key_commitment_controller.h" +#include "services/network/trust_tokens/trust_token_request_canonicalizer.h" +#include "services/network/trust_tokens/trust_token_request_signing_helper.h" namespace network { TrustTokenRequestHelperFactory::TrustTokenRequestHelperFactory( PendingTrustTokenStore* store) : store_(store) {} +TrustTokenRequestHelperFactory::TrustTokenRequestHelperFactory() = default; +TrustTokenRequestHelperFactory::~TrustTokenRequestHelperFactory() = default; void TrustTokenRequestHelperFactory::CreateTrustTokenHelperForRequest( const net::URLRequest& request, @@ -40,15 +47,52 @@ return; } - // Silence the compile warning: |store_| will be used to construct concrete - // TrustTokenRequestHelpers once they are implemented. - ignore_result(store_); + store_->ExecuteOrEnqueue( + base::BindOnce(&TrustTokenRequestHelperFactory::ConstructHelperUsingStore, + weak_factory_.GetWeakPtr(), *maybe_top_frame_origin, + base::Passed(params.Clone()), std::move(done))); +} - // (Currently, there's no asynchronous logic here; subsequent CLs will change - // this, since actually creating the helpers will require using the - // TrustTokenStore into which |store_| materializes asynchronously.) +void TrustTokenRequestHelperFactory::ConstructHelperUsingStore( + SuitableTrustTokenOrigin top_frame_origin, + mojom::TrustTokenParamsPtr params, + base::OnceCallback<void(TrustTokenStatusOrRequestHelper)> done, + TrustTokenStore* store) { + DCHECK(params); - std::move(done).Run(mojom::TrustTokenOperationStatus::kUnavailable); + switch (params->type) { + case mojom::TrustTokenOperationType::kSigning: { + base::Optional<SuitableTrustTokenOrigin> maybe_issuer; + if (params->issuer) { + maybe_issuer = + SuitableTrustTokenOrigin::Create(std::move(*params->issuer)); + } + + if (!maybe_issuer) { + std::move(done).Run(mojom::TrustTokenOperationStatus::kInvalidArgument); + return; + } + + TrustTokenRequestSigningHelper::Params signing_params( + std::move(*maybe_issuer), top_frame_origin, + std::move(params->additional_signed_headers), + params->include_timestamp_header, params->sign_request_data); + + std::move(done).Run(std::unique_ptr<TrustTokenRequestHelper>( + new TrustTokenRequestSigningHelper( + store, std::move(signing_params), + std::make_unique<Ed25519TrustTokenRequestSigner>(), + std::make_unique<TrustTokenRequestCanonicalizer>()))); + return; + } + + // Issuance and redemption aren't yet implemented. + case mojom::TrustTokenOperationType::kIssuance: + case mojom::TrustTokenOperationType::kRedemption: { + std::move(done).Run(mojom::TrustTokenOperationStatus::kUnavailable); + return; + } + } } TrustTokenStatusOrRequestHelper::TrustTokenStatusOrRequestHelper() = default;
diff --git a/services/network/trust_tokens/trust_token_request_helper_factory.h b/services/network/trust_tokens/trust_token_request_helper_factory.h index 712bec5..268b564 100644 --- a/services/network/trust_tokens/trust_token_request_helper_factory.h +++ b/services/network/trust_tokens/trust_token_request_helper_factory.h
@@ -13,6 +13,7 @@ #include "services/network/public/cpp/features.h" #include "services/network/public/mojom/trust_tokens.mojom.h" #include "services/network/trust_tokens/pending_trust_token_store.h" +#include "services/network/trust_tokens/suitable_trust_token_origin.h" #include "services/network/trust_tokens/trust_token_request_helper.h" namespace network { @@ -29,8 +30,8 @@ // helpers. explicit TrustTokenRequestHelperFactory(PendingTrustTokenStore* store); - TrustTokenRequestHelperFactory() = default; - virtual ~TrustTokenRequestHelperFactory() = default; + TrustTokenRequestHelperFactory(); + virtual ~TrustTokenRequestHelperFactory(); // Attempts to create a TrustTokenRequestHelper able to help execute the Trust // Tokens protocol operation given by |params| against the request |request|. @@ -52,7 +53,18 @@ base::OnceCallback<void(TrustTokenStatusOrRequestHelper)> done); private: + // Continuation of |CreateTrustTokenHelperForRequest|. Uses |store|, alongside + // the information provided to |CreateTrustTokenHelperForRequest|, to finish + // constructing a store or return an error. + void ConstructHelperUsingStore( + SuitableTrustTokenOrigin top_frame_origin, + mojom::TrustTokenParamsPtr params, + base::OnceCallback<void(TrustTokenStatusOrRequestHelper)> done, + TrustTokenStore* store); + PendingTrustTokenStore* store_; + + base::WeakPtrFactory<TrustTokenRequestHelperFactory> weak_factory_{this}; }; class TrustTokenStatusOrRequestHelper {
diff --git a/services/network/trust_tokens/trust_token_request_helper_factory_unittest.cc b/services/network/trust_tokens/trust_token_request_helper_factory_unittest.cc index ab897634..fce1250 100644 --- a/services/network/trust_tokens/trust_token_request_helper_factory_unittest.cc +++ b/services/network/trust_tokens/trust_token_request_helper_factory_unittest.cc
@@ -74,14 +74,16 @@ const mojom::TrustTokenParams& params) { base::RunLoop run_loop; TrustTokenStatusOrRequestHelper obtained_result; - TrustTokenRequestHelperFactory(/*store=*/nullptr) - .CreateTrustTokenHelperForRequest( - request, params, - base::BindLambdaForTesting( - [&](TrustTokenStatusOrRequestHelper result) { - obtained_result = std::move(result); - run_loop.Quit(); - })); + PendingTrustTokenStore store; + + store.OnStoreReady(TrustTokenStore::CreateInMemory()); + + TrustTokenRequestHelperFactory(&store).CreateTrustTokenHelperForRequest( + request, params, + base::BindLambdaForTesting([&](TrustTokenStatusOrRequestHelper result) { + obtained_result = std::move(result); + run_loop.Quit(); + })); run_loop.Run(); return obtained_result; @@ -137,4 +139,33 @@ mojom::TrustTokenOperationStatus::kUnavailable); } +TEST_F(TrustTokenRequestHelperFactoryTest, + CreatingSigningHelperRequiresSuitableIssuer) { + auto request = CreateSuitableRequest(); + + auto params = suitable_params().Clone(); + params->type = mojom::TrustTokenOperationType::kSigning; + params->issuer.reset(); + + EXPECT_EQ(CreateHelperAndWaitForResult(*request, *params).status(), + mojom::TrustTokenOperationStatus::kInvalidArgument); + + params->issuer = UnsuitableUntrustworthyOrigin(); + EXPECT_EQ(CreateHelperAndWaitForResult(*request, *params).status(), + mojom::TrustTokenOperationStatus::kInvalidArgument); + + params->issuer = UnsuitableNonHttpNonHttpsOrigin(); + EXPECT_EQ(CreateHelperAndWaitForResult(*request, *params).status(), + mojom::TrustTokenOperationStatus::kInvalidArgument); +} + +TEST_F(TrustTokenRequestHelperFactoryTest, CreatesSigningHelper) { + auto params = suitable_params().Clone(); + params->type = mojom::TrustTokenOperationType::kSigning; + + auto result = CreateHelperAndWaitForResult(suitable_request(), *params); + ASSERT_TRUE(result.ok()); + EXPECT_TRUE(result.TakeOrCrash()); +} + } // namespace network
diff --git a/services/network/trust_tokens/trust_token_request_signing_helper.cc b/services/network/trust_tokens/trust_token_request_signing_helper.cc index 15cfdce6e..f08f2a7 100644 --- a/services/network/trust_tokens/trust_token_request_signing_helper.cc +++ b/services/network/trust_tokens/trust_token_request_signing_helper.cc
@@ -187,6 +187,17 @@ TrustTokenRequestSigningHelper::~TrustTokenRequestSigningHelper() = default; Params::Params(SuitableTrustTokenOrigin issuer, + SuitableTrustTokenOrigin toplevel, + std::vector<std::string> additional_headers_to_sign, + bool should_add_timestamp, + mojom::TrustTokenSignRequestData sign_request_data) + : issuer(std::move(issuer)), + toplevel(std::move(toplevel)), + additional_headers_to_sign(std::move(additional_headers_to_sign)), + should_add_timestamp(should_add_timestamp), + sign_request_data(sign_request_data) {} + +Params::Params(SuitableTrustTokenOrigin issuer, SuitableTrustTokenOrigin toplevel) : issuer(std::move(issuer)), toplevel(std::move(toplevel)) {} Params::~Params() = default;
diff --git a/services/network/trust_tokens/trust_token_request_signing_helper.h b/services/network/trust_tokens/trust_token_request_signing_helper.h index c18da32c1..315b0e6 100644 --- a/services/network/trust_tokens/trust_token_request_signing_helper.h +++ b/services/network/trust_tokens/trust_token_request_signing_helper.h
@@ -70,6 +70,16 @@ 'T', 'r', 'u', 's', 't', ' ', 'T', 'o', 'k', 'e', 'n', ' ', 'v', '0'}; struct Params { + // Refer to fields' comments for their semantics. + Params(SuitableTrustTokenOrigin issuer, + SuitableTrustTokenOrigin toplevel, + std::vector<std::string> additional_headers_to_sign, + bool should_add_timestamp, + mojom::TrustTokenSignRequestData sign_request_data); + + // Minimal convenience constructor. Other fields have reasonable defaults, + // but it's necessary to have |issuer| and |toplevel| at construction time + // since SuitableTrustTokenOrigin has no default constructor. Params(SuitableTrustTokenOrigin issuer, SuitableTrustTokenOrigin toplevel); ~Params();
diff --git a/testing/buildbot/chromium.ci.json b/testing/buildbot/chromium.ci.json index 2643b52..c46dd09 100644 --- a/testing/buildbot/chromium.ci.json +++ b/testing/buildbot/chromium.ci.json
@@ -19786,29 +19786,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-19.0.2", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -19829,8 +19806,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -19854,8 +19831,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-19.0.2", + "os": "Ubuntu-19.04", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -19880,8 +19881,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -19906,8 +19907,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -19931,8 +19932,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -19956,8 +19957,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20068,29 +20069,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-418.56", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -20111,8 +20089,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20136,8 +20114,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-418.56", + "os": "Ubuntu-19.04", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20162,8 +20164,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20188,8 +20190,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20213,8 +20215,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20238,8 +20240,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20350,29 +20352,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-19.0.2", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -20393,8 +20372,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20418,8 +20397,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-19.0.2", + "os": "Ubuntu-19.04", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20444,8 +20447,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20470,8 +20473,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20495,8 +20498,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20520,8 +20523,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -20559,29 +20562,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-418.56", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -20602,8 +20582,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20627,8 +20607,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-418.56", + "os": "Ubuntu-19.04", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20653,8 +20657,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20679,8 +20683,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20704,8 +20708,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20729,8 +20733,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -20770,30 +20774,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.14.6", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -20815,8 +20795,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20841,8 +20821,33 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6821", + "hidpi": "1", + "os": "Mac-10.14.6", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20868,8 +20873,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20895,8 +20900,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20921,8 +20926,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -20947,8 +20952,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21061,28 +21066,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14.6" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -21102,8 +21085,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21126,8 +21109,31 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "os": "Mac-10.14.6" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21151,8 +21157,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21176,8 +21182,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21200,8 +21206,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21224,8 +21230,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21330,30 +21336,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.14.6", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -21375,8 +21357,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21401,8 +21383,33 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6821", + "hidpi": "1", + "os": "Mac-10.14.6", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21428,8 +21435,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21455,8 +21462,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21481,8 +21488,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21507,8 +21514,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -21547,28 +21554,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14.6" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -21588,8 +21573,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21612,8 +21597,31 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "os": "Mac-10.14.6" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21637,8 +21645,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21662,8 +21670,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21686,8 +21694,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21710,8 +21718,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -21750,29 +21758,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-24.20.100.6286", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -21793,8 +21778,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21818,8 +21803,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-24.20.100.6286", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21844,8 +21853,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21870,8 +21879,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21895,8 +21904,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -21920,8 +21929,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22031,29 +22040,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -22074,8 +22060,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22099,8 +22085,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-26.21.14.3102", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22125,8 +22135,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22151,8 +22161,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22176,8 +22186,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22201,8 +22211,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22312,29 +22322,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-24.20.100.6286", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -22355,8 +22342,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22380,8 +22367,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-24.20.100.6286", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22406,8 +22417,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22432,8 +22443,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22457,8 +22468,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22482,8 +22493,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -22521,29 +22532,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -22564,8 +22552,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22589,8 +22577,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-26.21.14.3102", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22615,8 +22627,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22641,8 +22653,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22666,8 +22678,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22691,8 +22703,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -22732,29 +22744,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-24.20.100.6286", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -22775,8 +22764,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22800,8 +22789,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-24.20.100.6286", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22826,8 +22839,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22852,8 +22865,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22877,8 +22890,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -22902,8 +22915,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23012,29 +23025,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -23055,8 +23045,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23080,8 +23070,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-26.21.14.3102", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23106,8 +23120,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23132,8 +23146,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23157,8 +23171,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23182,8 +23196,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23292,29 +23306,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-24.20.100.6286", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -23335,8 +23326,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23360,8 +23351,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-24.20.100.6286", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23386,8 +23401,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23412,8 +23427,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23437,8 +23452,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23462,8 +23477,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -23501,29 +23516,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -23544,8 +23536,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23569,8 +23561,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-26.21.14.3102", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23595,8 +23611,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23621,8 +23637,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23646,8 +23662,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -23671,8 +23687,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -87432,6 +87448,23 @@ }, "test": "interactive_ui_tests", "test_target": "//chrome/test:interactive_ui_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "weblayer_unittests", + "test_target": "//weblayer/test:weblayer_unittests" } ] }, @@ -87566,6 +87599,18 @@ }, "test": "services_unittests", "test_target": "//services:services_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "weblayer_unittests", + "test_target": "//weblayer/test:weblayer_unittests" } ] },
diff --git a/testing/buildbot/chromium.dawn.json b/testing/buildbot/chromium.dawn.json index 3ac9dfd..11da6fd8 100644 --- a/testing/buildbot/chromium.dawn.json +++ b/testing/buildbot/chromium.dawn.json
@@ -8,29 +8,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-19.0.2", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -51,8 +28,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -76,8 +53,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-19.0.2", + "os": "Ubuntu-19.04", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -102,8 +103,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -128,8 +129,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -153,8 +154,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -178,8 +179,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -290,29 +291,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-418.56", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -333,8 +311,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -358,8 +336,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-418.56", + "os": "Ubuntu-19.04", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -384,8 +386,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -410,8 +412,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -435,8 +437,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -460,8 +462,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -572,29 +574,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-19.0.2", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -615,8 +594,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -640,8 +619,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-19.0.2", + "os": "Ubuntu-19.04", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -666,8 +669,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -692,8 +695,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -717,8 +720,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -742,8 +745,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -781,29 +784,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-418.56", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -824,8 +804,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -849,8 +829,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-418.56", + "os": "Ubuntu-19.04", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -875,8 +879,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -901,8 +905,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -926,8 +930,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -951,8 +955,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -992,30 +996,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.14.6", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -1037,8 +1017,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1063,8 +1043,33 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6821", + "hidpi": "1", + "os": "Mac-10.14.6", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1090,8 +1095,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1117,8 +1122,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1143,8 +1148,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1169,8 +1174,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1283,28 +1288,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14.6" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -1324,8 +1307,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1348,8 +1331,31 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "os": "Mac-10.14.6" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1373,8 +1379,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1398,8 +1404,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1422,8 +1428,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1446,8 +1452,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1552,30 +1558,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.14.6", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -1597,8 +1579,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1623,8 +1605,33 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6821", + "hidpi": "1", + "os": "Mac-10.14.6", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1650,8 +1657,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1677,8 +1684,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1703,8 +1710,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1729,8 +1736,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -1769,28 +1776,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.14.6" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -1810,8 +1795,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1834,8 +1819,31 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "os": "Mac-10.14.6" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1859,8 +1867,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1884,8 +1892,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1908,8 +1916,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -1932,8 +1940,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -1972,29 +1980,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-24.20.100.6286", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -2015,8 +2000,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2040,8 +2025,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-24.20.100.6286", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2066,8 +2075,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2092,8 +2101,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2117,8 +2126,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2142,8 +2151,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2253,29 +2262,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -2296,8 +2282,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2321,8 +2307,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-26.21.14.3102", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2347,8 +2357,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2373,8 +2383,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2398,8 +2408,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2423,8 +2433,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2534,29 +2544,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-24.20.100.6286", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -2577,8 +2564,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2602,8 +2589,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-24.20.100.6286", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2628,8 +2639,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2654,8 +2665,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2679,8 +2690,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2704,8 +2715,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -2743,29 +2754,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -2786,8 +2774,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2811,8 +2799,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-26.21.14.3102", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2837,8 +2849,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2863,8 +2875,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2888,8 +2900,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -2913,8 +2925,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -2954,29 +2966,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-24.20.100.6286", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -2997,8 +2986,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3022,8 +3011,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-24.20.100.6286", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3048,8 +3061,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3074,8 +3087,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3099,8 +3112,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3124,8 +3137,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3234,29 +3247,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -3277,8 +3267,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3302,8 +3292,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-26.21.14.3102", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3328,8 +3342,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3354,8 +3368,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3379,8 +3393,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3404,8 +3418,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3514,29 +3528,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-24.20.100.6286", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -3557,8 +3548,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3582,8 +3573,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912-24.20.100.6286", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3608,8 +3623,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3634,8 +3649,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3659,8 +3674,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3684,8 +3699,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [ @@ -3723,29 +3738,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-use-spvc", "--no-use-spvc-parser" @@ -3766,8 +3758,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3791,8 +3783,32 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" + }, + { + "args": [ + "--use-gpu-in-tests", + "--test-launcher-retry-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "dawn_end2end_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3-26.21.14.3102", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3817,8 +3833,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3843,8 +3859,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3868,8 +3884,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" }, { "args": [ @@ -3893,8 +3909,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "dawn_end2end_tests", - "test_target": "//third_party/dawn:dawn_end2end_tests" + "test": "dawn_end2end_tests_tmp", + "test_target": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp" } ], "isolated_scripts": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index e988ae44..691086e 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -2174,6 +2174,23 @@ }, "test": "interactive_ui_tests", "test_target": "//chrome/test:interactive_ui_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "weblayer_unittests", + "test_target": "//weblayer/test:weblayer_unittests" } ] }, @@ -2308,6 +2325,18 @@ }, "test": "services_unittests", "test_target": "//services:services_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "weblayer_unittests", + "test_target": "//weblayer/test:weblayer_unittests" } ] },
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index 8e55bf2..2a277d7 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -724,8 +724,8 @@ "label": "//crypto:crypto_unittests", "type": "console_test_launcher", }, - "dawn_end2end_tests": { - "label": "//third_party/dawn:dawn_end2end_tests", + "dawn_end2end_tests_tmp": { + "label": "//third_party/dawn/src/tests:dawn_end2end_tests_tmp", "type": "raw", }, "dawn_perf_tests": { @@ -1878,6 +1878,10 @@ "-v", ], }, + "weblayer_unittests": { + "label": "//weblayer/test:weblayer_unittests", + "type": "windowed_test_launcher", + }, "webview_cts_tests": { "args": [ "--logdog-bin-cmd",
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index f430c8f..8f5af7fd 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -1893,7 +1893,7 @@ '--no-use-spvc', '--no-use-spvc-parser', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_skip_validation_tests': { 'desktop_args': [ @@ -1902,7 +1902,7 @@ '--test-launcher-retry-limit=0', '--skip-validation', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_tests': { 'desktop_args': [ @@ -1910,6 +1910,7 @@ # Dawn test retries deliberately disabled to prevent flakiness. '--test-launcher-retry-limit=0', ], + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_use_spvc_parser_tests': { 'desktop_args': [ @@ -1919,7 +1920,7 @@ '--use-spvc', '--use-spvc-parser', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_use_spvc_tests': { 'desktop_args': [ @@ -1929,7 +1930,7 @@ '--use-spvc', '--no-use-spvc-parser', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_validation_layers_tests': { 'desktop_args': [ @@ -1938,7 +1939,7 @@ '--test-launcher-retry-limit=0', '--enable-backend-validation', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_wire_tests': { 'desktop_args': [ @@ -1947,7 +1948,7 @@ '--test-launcher-retry-limit=0', '--use-wire', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, }, @@ -1962,7 +1963,7 @@ '--no-use-spvc', '--no-use-spvc-parser', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_skip_validation_tests': { 'desktop_args': [ @@ -1971,7 +1972,7 @@ '--test-launcher-retry-limit=0', '--skip-validation', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_tests': { 'desktop_args': [ @@ -1979,6 +1980,7 @@ # Dawn test retries deliberately disabled to prevent flakiness. '--test-launcher-retry-limit=0', ], + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_use_spvc_parser_tests': { 'desktop_args': [ @@ -1988,7 +1990,7 @@ '--use-spvc', '--use-spvc-parser', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_use_spvc_tests': { 'desktop_args': [ @@ -1998,7 +2000,7 @@ '--use-spvc', '--no-use-spvc-parser', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_validation_layers_tests': { 'desktop_args': [ @@ -2007,7 +2009,7 @@ '--test-launcher-retry-limit=0', '--enable-backend-validation', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'dawn_end2end_wire_tests': { 'desktop_args': [ @@ -2016,7 +2018,7 @@ '--test-launcher-retry-limit=0', '--use-wire', ], - 'test': 'dawn_end2end_tests', + 'test': 'dawn_end2end_tests_tmp', }, 'gl_tests': { 'desktop_args': [ @@ -3585,6 +3587,11 @@ }, }, + 'weblayer_unittests': { + 'weblayer_unittests': { + }, + }, + # TODO(crbug.com/888429): Port remaining WebRTC tests to swarming. 'webrtc_chromium_baremetal_gtests': { # Run capture unittests as well since our bots have real webcams. @@ -4600,6 +4607,7 @@ 'mojo_linux_gtests': [ 'storage_service_gtests', + 'weblayer_unittests', ], 'mojo_windows_gtests': [ @@ -4607,6 +4615,7 @@ 'network_service_fyi_gtests', 'network_service_in_process_gtests', 'storage_service_gtests', + 'weblayer_unittests', ], 'network_service_extra_gtests': [
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index efa52878..7f47901 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -1128,11 +1128,10 @@ ] } ], - "BlinkSchedulerVeryHighPriorityForCompositingExperiments": [ + "BlinkSchedulerPrioritizeRenderingUntilBeginMainFrame": [ { "platforms": [ "android", - "android_weblayer", "chromeos", "linux", "mac", @@ -1140,17 +1139,9 @@ ], "experiments": [ { - "name": "VeryHighPriorityForCompositingAfterDelay100", - "params": { - "CompositingDelayLength": "100" - }, + "name": "Enabled", "enable_features": [ - "BlinkSchedulerVeryHighPriorityForCompositingAfterDelay" - ], - "disable_features": [ - "BlinkSchedulerPrioritizeCompositingUntilBeginMainFrame", - "BlinkSchedulerVeryHighPriorityForCompositingAlternating", - "PrioritizeCompositingAndLoadingDuringEarlyLoading" + "BlinkSchedulerPrioritizeCompositingUntilBeginMainFrame" ] } ]
diff --git a/third_party/blink/public/strings/translations/blink_strings_or.xtb b/third_party/blink/public/strings/translations/blink_strings_or.xtb index 8bc77ae..da92174 100644 --- a/third_party/blink/public/strings/translations/blink_strings_or.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_or.xtb
@@ -271,7 +271,7 @@ <translation id="9132465097189459683">ଅନ୍ୟ...</translation> <translation id="9138385573473225930">ଆଲର୍ଟ</translation> <translation id="9155987714137265666"><ph name="WEEK" />, <ph name="WEEK_START_DATE" />ରେ ପ୍ରାରମ୍ଭ ହେଉଛି</translation> -<translation id="916607977885256133">ଛବି ମଧ୍ୟରେ ଛବି</translation> +<translation id="916607977885256133">ପିକଚର୍ ଇନ୍ ପିକଚର୍</translation> <translation id="9168329111483466115">ଫୁଟ୍ନୋଟ୍</translation> <translation id="954003015749068518">ଛବି-ଭିତରେ-ଛବିକୁ ରଖନ୍ତୁ</translation> <translation id="966787709310836684">ମେନୁ</translation>
diff --git a/third_party/blink/renderer/core/animation/compositor_animations_test.cc b/third_party/blink/renderer/core/animation/compositor_animations_test.cc index b9e87ddf..45fff4dc 100644 --- a/third_party/blink/renderer/core/animation/compositor_animations_test.cc +++ b/third_party/blink/renderer/core/animation/compositor_animations_test.cc
@@ -349,6 +349,7 @@ compositor_keyframe_value_( MakeGarbageCollected<CompositorKeyframeDouble>(offset)) {} bool IsNeutral() const final { return true; } + bool IsRevert() const final { return false; } PropertySpecificKeyframe* CloneWithOffset(double) const final { NOTREACHED(); return nullptr;
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.cc b/third_party/blink/renderer/core/animation/css/css_animations.cc index 7708587c3..fe50ab9c 100644 --- a/third_party/blink/renderer/core/animation/css/css_animations.cc +++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -1459,6 +1459,11 @@ IsCustomPropertyHandle); } +bool CSSAnimations::IsAnimatingRevert( + const ElementAnimations* element_animations) { + return element_animations && element_animations->GetEffectStack().HasRevert(); +} + void CSSAnimations::Trace(Visitor* visitor) { visitor->Trace(transitions_); visitor->Trace(pending_update_);
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.h b/third_party/blink/renderer/core/animation/css/css_animations.h index b6b99f74c..0cf61f87 100644 --- a/third_party/blink/renderer/core/animation/css/css_animations.h +++ b/third_party/blink/renderer/core/animation/css/css_animations.h
@@ -61,6 +61,7 @@ static bool IsAnimationAffectingProperty(const CSSProperty&); static bool IsAffectedByKeyframesFromScope(const Element&, const TreeScope&); static bool IsAnimatingCustomProperties(const ElementAnimations*); + static bool IsAnimatingRevert(const ElementAnimations*); static void CalculateAnimationUpdate(CSSAnimationUpdate&, const Element* animating_element, Element&,
diff --git a/third_party/blink/renderer/core/animation/css_interpolation_type.cc b/third_party/blink/renderer/core/animation/css_interpolation_type.cc index efc95c5..64f4ad9 100644 --- a/third_party/blink/renderer/core/animation/css_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/css_interpolation_type.cc
@@ -12,6 +12,8 @@ #include "third_party/blink/renderer/core/animation/string_keyframe.h" #include "third_party/blink/renderer/core/css/computed_style_css_value_mapping.h" #include "third_party/blink/renderer/core/css/css_custom_property_declaration.h" +#include "third_party/blink/renderer/core/css/css_inherited_value.h" +#include "third_party/blink/renderer/core/css/css_initial_value.h" #include "third_party/blink/renderer/core/css/css_revert_value.h" #include "third_party/blink/renderer/core/css/css_unset_value.h" #include "third_party/blink/renderer/core/css/css_value.h" @@ -126,6 +128,27 @@ scoped_refptr<CSSVariableData> resolved_tokens_; }; +class RevertChecker : public CSSInterpolationType::ConversionChecker { + public: + RevertChecker(const PropertyHandle& property_handle, + const CSSValue* resolved_value) + : property_handle_(property_handle), resolved_value_(resolved_value) { + DCHECK(RuntimeEnabledFeatures::CSSRevertEnabled()); + } + + private: + bool IsValid(const InterpolationEnvironment& environment, + const InterpolationValue&) const final { + const auto& css_environment = To<CSSInterpolationEnvironment>(environment); + const CSSValue* current_resolved_value = css_environment.Resolve( + property_handle_, cssvalue::CSSRevertValue::Create()); + return DataEquivalent(resolved_value_.Get(), current_resolved_value); + } + + PropertyHandle property_handle_; + Persistent<const CSSValue> resolved_value_; +}; + CSSInterpolationType::CSSInterpolationType( PropertyHandle property, const PropertyRegistration* registration) @@ -186,8 +209,11 @@ } if (value->IsRevertValue()) { - // TODO(andruud): Actually revert instead of treating as unset. - value = cssvalue::CSSUnsetValue::Create(); + DCHECK(RuntimeEnabledFeatures::CSSRevertEnabled()); + value = css_environment.Resolve(GetProperty(), value); + DCHECK(value); + conversion_checkers.push_back( + std::make_unique<RevertChecker>(GetProperty(), value)); } bool is_inherited = CssProperty().IsInherited(); @@ -212,6 +238,68 @@ const AtomicString& name = declaration.GetName(); DCHECK_EQ(GetProperty().CustomPropertyName(), name); + if (RuntimeEnabledFeatures::CSSCascadeEnabled()) { + const CSSValue* value = &declaration; + value = css_environment.Resolve(GetProperty(), value); + DCHECK(value) << "CSSVarCycleInterpolationType should have handled nullptr"; + + if (declaration.IsRevert()) { + DCHECK(RuntimeEnabledFeatures::CSSRevertEnabled()); + conversion_checkers.push_back( + std::make_unique<RevertChecker>(GetProperty(), value)); + } + if (const auto* resolved_declaration = + DynamicTo<CSSCustomPropertyDeclaration>(value)) { + // If Resolve returned a different CSSCustomPropertyDeclaration, var() + // references were substituted. + if (resolved_declaration != &declaration) { + conversion_checkers.push_back( + std::make_unique<ResolvedRegisteredCustomPropertyChecker>( + declaration, resolved_declaration->Value())); + } + } + + // Unfortunately we transport CSS-wide keywords inside the + // CSSCustomPropertyDeclaration. Expand those keywords into real CSSValues + // if present. + bool is_inherited = Registration().Inherits(); + if (const auto* resolved_declaration = + DynamicTo<CSSCustomPropertyDeclaration>(value)) { + if (resolved_declaration->IsInitial(is_inherited)) + value = CSSInitialValue::Create(); + else if (resolved_declaration->IsInherit(is_inherited)) + value = CSSInheritedValue::Create(); + } + + // Handle CSS-wide keywords (except 'revert', which should have been + // handled already). + DCHECK(!value->IsRevertValue()); + if (value->IsInitialValue() || (value->IsUnsetValue() && !is_inherited)) { + value = Registration().Initial(); + } else if (value->IsInheritedValue() || + (value->IsUnsetValue() && is_inherited)) { + value = state.ParentStyle()->GetVariableValue(name, is_inherited); + if (!value) { + value = Registration().Initial(); + } + conversion_checkers.push_back( + std::make_unique<InheritedCustomPropertyChecker>( + name, is_inherited, value, Registration().Initial())); + } + + if (const auto* resolved_declaration = + DynamicTo<CSSCustomPropertyDeclaration>(value)) { + DCHECK(resolved_declaration->Value()); + value = resolved_declaration->Value()->ParseForSyntax( + registration_->Syntax(), state.GetDocument().GetSecureContextMode()); + if (!value) + return nullptr; + } + + DCHECK(value); + return MaybeConvertValue(*value, &state, conversion_checkers); + } + if (!declaration.Value()) { bool is_inherited_property = Registration().Inherits(); DCHECK(declaration.IsInitial(is_inherited_property) || @@ -239,20 +327,11 @@ scoped_refptr<CSSVariableData> resolved_tokens; if (declaration.Value()->NeedsVariableResolution()) { - if (RuntimeEnabledFeatures::CSSCascadeEnabled()) { - const CSSValue* resolved = - css_environment.Resolve(GetProperty(), &declaration); - if (const auto* decl = DynamicTo<CSSCustomPropertyDeclaration>(resolved)) - resolved_tokens = decl->Value(); - } else { - CSSVariableResolver& variable_resolver = - css_environment.VariableResolver(); - bool cycle_detected = false; - resolved_tokens = - variable_resolver.ResolveCustomPropertyAnimationKeyframe( - declaration, cycle_detected); - DCHECK(!cycle_detected); - } + CSSVariableResolver& variable_resolver = css_environment.VariableResolver(); + bool cycle_detected = false; + resolved_tokens = variable_resolver.ResolveCustomPropertyAnimationKeyframe( + declaration, cycle_detected); + DCHECK(!cycle_detected); conversion_checkers.push_back( std::make_unique<ResolvedRegisteredCustomPropertyChecker>( declaration, resolved_tokens));
diff --git a/third_party/blink/renderer/core/animation/css_var_cycle_interpolation_type.cc b/third_party/blink/renderer/core/animation/css_var_cycle_interpolation_type.cc index 6ae83a1..6aba5ed 100644 --- a/third_party/blink/renderer/core/animation/css_var_cycle_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/css_var_cycle_interpolation_type.cc
@@ -63,7 +63,9 @@ const auto& declaration = *To<CSSCustomPropertyDeclaration>( To<CSSPropertySpecificKeyframe>(keyframe).Value()); DCHECK_EQ(GetProperty().CustomPropertyName(), declaration.GetName()); - if (!declaration.Value() || !declaration.Value()->NeedsVariableResolution()) { + if ((!declaration.Value() || + !declaration.Value()->NeedsVariableResolution()) && + !declaration.IsRevert()) { return nullptr; }
diff --git a/third_party/blink/renderer/core/animation/effect_stack.cc b/third_party/blink/renderer/core/animation/effect_stack.cc index 38a14217..441af4b3 100644 --- a/third_party/blink/renderer/core/animation/effect_stack.cc +++ b/third_party/blink/renderer/core/animation/effect_stack.cc
@@ -124,6 +124,14 @@ return false; } +bool EffectStack::HasRevert() const { + for (const auto& sampled_effect : sampled_effects_) { + if (sampled_effect->Effect() && sampled_effect->Effect()->HasRevert()) + return true; + } + return false; +} + ActiveInterpolationsMap EffectStack::ActiveInterpolations( EffectStack* effect_stack, const HeapVector<Member<const InertEffect>>* new_animations,
diff --git a/third_party/blink/renderer/core/animation/effect_stack.h b/third_party/blink/renderer/core/animation/effect_stack.h index 416ab8a..10119601 100644 --- a/third_party/blink/renderer/core/animation/effect_stack.h +++ b/third_party/blink/renderer/core/animation/effect_stack.h
@@ -64,6 +64,7 @@ using PropertyHandleFilter = bool (*)(const PropertyHandle&); bool AffectsProperties(PropertyHandleFilter) const; + bool HasRevert() const; // Produces a map of properties to active effects. // |effect_stack| contains the sequence of sample effects for an element.
diff --git a/third_party/blink/renderer/core/animation/keyframe.h b/third_party/blink/renderer/core/animation/keyframe.h index eb6de5f..e8d4ca42 100644 --- a/third_party/blink/renderer/core/animation/keyframe.h +++ b/third_party/blink/renderer/core/animation/keyframe.h
@@ -132,6 +132,7 @@ return composite_ == EffectModel::kCompositeReplace ? 0 : 1; } virtual bool IsNeutral() const = 0; + virtual bool IsRevert() const = 0; virtual PropertySpecificKeyframe* CloneWithOffset(double offset) const = 0; // FIXME: Remove this once CompositorAnimations no longer depends on
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.cc b/third_party/blink/renderer/core/animation/keyframe_effect.cc index 43bb48b..3aad3b8 100644 --- a/third_party/blink/renderer/core/animation/keyframe_effect.cc +++ b/third_party/blink/renderer/core/animation/keyframe_effect.cc
@@ -290,6 +290,10 @@ return model_->Affects(property); } +bool KeyframeEffect::HasRevert() const { + return model_->HasRevert(); +} + void KeyframeEffect::NotifySampledEffectRemovedFromEffectStack() { sampled_effect_ = nullptr; }
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.h b/third_party/blink/renderer/core/animation/keyframe_effect.h index b7a0903..1fb72a9e3 100644 --- a/third_party/blink/renderer/core/animation/keyframe_effect.h +++ b/third_party/blink/renderer/core/animation/keyframe_effect.h
@@ -97,6 +97,7 @@ void SetKeyframes(StringKeyframeVector keyframes); bool Affects(const PropertyHandle&) const; + bool HasRevert() const; const KeyframeEffectModelBase* Model() const { return model_.Get(); } KeyframeEffectModelBase* Model() { return model_.Get(); } void SetModel(KeyframeEffectModelBase* model) {
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect_model.cc b/third_party/blink/renderer/core/animation/keyframe_effect_model.cc index ef9b74ee..ee6211d0 100644 --- a/third_party/blink/renderer/core/animation/keyframe_effect_model.cc +++ b/third_party/blink/renderer/core/animation/keyframe_effect_model.cc
@@ -335,8 +335,11 @@ group = group_iter->value.Get(); } - group->AppendKeyframe(keyframe->CreatePropertySpecificKeyframe( - property, composite_, computed_offset)); + Keyframe::PropertySpecificKeyframe* property_specific_keyframe = + keyframe->CreatePropertySpecificKeyframe(property, composite_, + computed_offset); + has_revert_ |= property_specific_keyframe->IsRevert(); + group->AppendKeyframe(property_specific_keyframe); } }
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect_model.h b/third_party/blink/renderer/core/animation/keyframe_effect_model.h index 7ad2414..5d9413c 100644 --- a/third_party/blink/renderer/core/animation/keyframe_effect_model.h +++ b/third_party/blink/renderer/core/animation/keyframe_effect_model.h
@@ -148,6 +148,11 @@ return keyframe_groups_->Contains(property); } + bool HasRevert() const { + EnsureKeyframeGroups(); + return has_revert_; + } + bool IsTransformRelatedEffect() const override; virtual KeyframeEffectModelBase* Clone() = 0; @@ -164,7 +169,8 @@ composite_(composite), default_keyframe_easing_(std::move(default_keyframe_easing)), has_synthetic_keyframes_(false), - needs_compositor_keyframes_snapshot_(true) {} + needs_compositor_keyframes_snapshot_(true), + has_revert_(false) {} // Lazily computes the groups of property-specific keyframes. void EnsureKeyframeGroups() const; @@ -207,6 +213,7 @@ mutable bool has_synthetic_keyframes_; mutable bool needs_compositor_keyframes_snapshot_; + mutable bool has_revert_; friend class KeyframeEffectModelTest; };
diff --git a/third_party/blink/renderer/core/animation/string_keyframe.cc b/third_party/blink/renderer/core/animation/string_keyframe.cc index 17521a6..e966397 100644 --- a/third_party/blink/renderer/core/animation/string_keyframe.cc +++ b/third_party/blink/renderer/core/animation/string_keyframe.cc
@@ -260,6 +260,10 @@ return true; } +bool StringKeyframe::CSSPropertySpecificKeyframe::IsRevert() const { + return value_ && value_->IsRevertValue(); +} + Keyframe::PropertySpecificKeyframe* StringKeyframe::CSSPropertySpecificKeyframe::NeutralKeyframe( double offset,
diff --git a/third_party/blink/renderer/core/animation/string_keyframe.h b/third_party/blink/renderer/core/animation/string_keyframe.h index 2fdfa35..540f05a 100644 --- a/third_party/blink/renderer/core/animation/string_keyframe.h +++ b/third_party/blink/renderer/core/animation/string_keyframe.h
@@ -110,6 +110,7 @@ } bool IsNeutral() const final { return !value_; } + bool IsRevert() const final; Keyframe::PropertySpecificKeyframe* NeutralKeyframe( double offset, scoped_refptr<TimingFunction> easing) const final; @@ -146,6 +147,7 @@ } bool IsNeutral() const final { return value_.IsNull(); } + bool IsRevert() const final { return false; } PropertySpecificKeyframe* NeutralKeyframe( double offset, scoped_refptr<TimingFunction> easing) const final;
diff --git a/third_party/blink/renderer/core/animation/transition_keyframe.h b/third_party/blink/renderer/core/animation/transition_keyframe.h index 978e1077..cbaa0db 100644 --- a/third_party/blink/renderer/core/animation/transition_keyframe.h +++ b/third_party/blink/renderer/core/animation/transition_keyframe.h
@@ -65,6 +65,7 @@ } bool IsNeutral() const final { return false; } + bool IsRevert() const final { return false; } Keyframe::PropertySpecificKeyframe* NeutralKeyframe( double offset, scoped_refptr<TimingFunction> easing) const final {
diff --git a/third_party/blink/renderer/core/css/properties/computed_style_utils.cc b/third_party/blink/renderer/core/css/properties/computed_style_utils.cc index 27f19a3..b876e57 100644 --- a/third_party/blink/renderer/core/css/properties/computed_style_utils.cc +++ b/third_party/blink/renderer/core/css/properties/computed_style_utils.cc
@@ -1355,7 +1355,18 @@ bool is_layout_grid = layout_object && layout_object->IsLayoutGrid(); // Handle the 'none' case. - if (track_sizes.IsEmpty() && auto_repeat_track_sizes.IsEmpty()) + bool track_list_is_empty = + track_sizes.IsEmpty() && auto_repeat_track_sizes.IsEmpty(); + if (is_layout_grid && track_list_is_empty) { + // For grids we should consider every listed track, whether implicitly or + // explicitly created. Empty grids have a sole grid line per axis. + auto& positions = is_row_axis + ? ToLayoutGrid(layout_object)->ColumnPositions() + : ToLayoutGrid(layout_object)->RowPositions(); + track_list_is_empty = positions.size() == 1; + } + + if (track_list_is_empty) return CSSIdentifierValue::Create(CSSValueID::kNone); CSSValueList* list = CSSValueList::CreateSpaceSeparated();
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc index 6878a9bf..bd57c51d 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc +++ b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
@@ -1497,6 +1497,174 @@ EXPECT_EQ("1004px", cascade.ComputedValue("margin-bottom")); EXPECT_EQ("1003px", cascade.ComputedValue("margin-left")); } + +TEST_F(StyleCascadeTest, RevertInKeyframe) { + AppendSheet(R"HTML( + @keyframes test { + from { margin-left: 0px; } + to { margin-left: revert; } + } + )HTML"); + + TestCascade cascade(GetDocument()); + + cascade.Add("margin-left:100px", CascadeOrigin::kUserAgent); + cascade.Add("animation:test linear 1000s -500s"); + cascade.Apply(); + + cascade.CalculateAnimationUpdate(); + cascade.Apply(); + + EXPECT_EQ("50px", cascade.ComputedValue("margin-left")); +} + +TEST_F(StyleCascadeTest, RevertToCustomPropertyInKeyframe) { + RegisterProperty(GetDocument(), "--x", "<length>", "0px", false); + + AppendSheet(R"HTML( + @keyframes test { + from { --x: 0px; } + to { --x: revert; } + } + )HTML"); + + TestCascade cascade(GetDocument()); + + cascade.Add("--x:100px", CascadeOrigin::kUser); + cascade.Add("--x:1000px", CascadeOrigin::kAuthor); + cascade.Add("animation:test linear 1000s -500s"); + cascade.Apply(); + + cascade.CalculateAnimationUpdate(); + cascade.Apply(); + + EXPECT_EQ("50px", cascade.ComputedValue("--x")); +} + +TEST_F(StyleCascadeTest, RevertToCustomPropertyInKeyframeUnset) { + RegisterProperty(GetDocument(), "--x", "<length>", "0px", false); + RegisterProperty(GetDocument(), "--y", "<length>", "1000px", true); + + AppendSheet(R"HTML( + @keyframes test { + from { --x: 100px; --y: 100px; } + to { --x: revert; --y: revert; } + } + )HTML"); + + TestCascade parent(GetDocument()); + parent.Add("--y: 0px"); + parent.Apply(); + EXPECT_EQ("0px", parent.ComputedValue("--y")); + + TestCascade cascade(GetDocument()); + cascade.InheritFrom(parent.TakeStyle()); + cascade.Add("--x:10000px", CascadeOrigin::kAuthor); + cascade.Add("--y:10000px", CascadeOrigin::kAuthor); + cascade.Add("animation:test linear 1000s -500s"); + cascade.Apply(); + + cascade.CalculateAnimationUpdate(); + cascade.Apply(); + + EXPECT_EQ("50px", cascade.ComputedValue("--x")); + EXPECT_EQ("50px", cascade.ComputedValue("--y")); +} + +TEST_F(StyleCascadeTest, RevertToCustomPropertyInKeyframeEmptyInherit) { + RegisterProperty(GetDocument(), "--x", "<length>", "0px", true); + + AppendSheet(R"HTML( + @keyframes test { + from { --x: 100px; } + to { --x: revert; } + } + )HTML"); + + TestCascade cascade(GetDocument()); + cascade.Add("--x:10000px", CascadeOrigin::kAuthor); + cascade.Add("animation:test linear 1000s -500s"); + cascade.Apply(); + + cascade.CalculateAnimationUpdate(); + cascade.Apply(); + + EXPECT_EQ("50px", cascade.ComputedValue("--x")); +} + +TEST_F(StyleCascadeTest, RevertInKeyframeResponsive) { + AppendSheet(R"HTML( + @keyframes test { + from { margin-left: 0px; } + to { margin-left: revert; } + } + )HTML"); + + TestCascade cascade(GetDocument()); + + cascade.Add("--x:100px", CascadeOrigin::kUser); + cascade.Add("margin-left:var(--x)", CascadeOrigin::kUser); + cascade.Add("animation:test linear 1000s -500s"); + cascade.Apply(); + cascade.CalculateAnimationUpdate(); + cascade.Apply(); + + EXPECT_EQ("50px", cascade.ComputedValue("margin-left")); + + cascade.Add("--x:80px", CascadeOrigin::kAuthor); + cascade.Apply(); + + EXPECT_EQ("40px", cascade.ComputedValue("margin-left")); +} + +TEST_F(StyleCascadeTest, RevertToCycleInKeyframe) { + RegisterProperty(GetDocument(), "--x", "<length>", "0px", false); + + AppendSheet(R"HTML( + @keyframes test { + from { --x: 100px; } + to { --x: revert; } + } + )HTML"); + + TestCascade cascade(GetDocument()); + + cascade.Add("--x:var(--y)", CascadeOrigin::kUser); + cascade.Add("--y:var(--x)", CascadeOrigin::kUser); + cascade.Add("--x:200px", CascadeOrigin::kAuthor); + cascade.Add("animation:test linear 1000s -500s"); + cascade.Apply(); + + cascade.CalculateAnimationUpdate(); + cascade.Apply(); + + EXPECT_EQ("0px", cascade.ComputedValue("--x")); +} + +TEST_F(StyleCascadeTest, RevertCausesTransition) { + TestCascade cascade1(GetDocument()); + cascade1.Add("width:200px", CascadeOrigin::kUser); + cascade1.Add("width:100px", CascadeOrigin::kAuthor); + cascade1.Add("transition: width 1000s steps(2, end)", CascadeOrigin::kAuthor); + cascade1.Apply(); + + GetDocument().body()->SetComputedStyle(cascade1.TakeStyle()); + + // Now simulate a new style, with new color values. + TestCascade cascade2(GetDocument()); + cascade2.Add("width:200px", CascadeOrigin::kUser); + cascade2.Add("width:100px", CascadeOrigin::kAuthor); + cascade2.Add("width:revert", CascadeOrigin::kAuthor); + cascade2.Add("transition: width 1000s steps(2, start)", + CascadeOrigin::kAuthor); + cascade2.Apply(); + + cascade2.CalculateTransitionUpdate(); + cascade2.Apply(); + + EXPECT_EQ("150px", cascade2.ComputedValue("width")); +} + TEST_F(StyleCascadeTest, RegisteredInitial) { RegisterProperty(GetDocument(), "--x", "<length>", "0px", false);
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc index a985a58..6c42718 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -783,6 +783,11 @@ return nullptr; } + if (CSSAnimations::IsAnimatingRevert(element_animations)) { + state.SetIsAnimatingRevert(true); + return nullptr; + } + return element_animations->BaseComputedStyle(); } @@ -793,7 +798,7 @@ ElementAnimations* element_animations = state.GetAnimatingElement()->GetElementAnimations(); if (element_animations) { - if (state.IsAnimatingCustomProperties()) { + if (state.IsAnimatingCustomProperties() || state.IsAnimatingRevert()) { element_animations->ClearBaseComputedStyle(); } else { element_animations->UpdateBaseComputedStyle(state.Style());
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_state.h b/third_party/blink/renderer/core/css/resolver/style_resolver_state.h index 24b06a2..fabde1bf 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver_state.h +++ b/third_party/blink/renderer/core/css/resolver/style_resolver_state.h
@@ -128,6 +128,8 @@ void SetIsAnimatingCustomProperties(bool value) { is_animating_custom_properties_ = value; } + bool IsAnimatingRevert() const { return is_animating_revert_; } + void SetIsAnimatingRevert(bool value) { is_animating_revert_ = value; } // Normally, we apply all active animation effects on top of the style created // by regular CSS declarations. However, !important declarations have a @@ -248,6 +250,10 @@ CSSAnimationUpdate animation_update_; bool is_animation_interpolation_map_ready_; bool is_animating_custom_properties_; + // We can't use the base computed style optimization when 'revert' appears + // in a keyframe. (We need to build the cascade to know what to revert to). + // TODO(crbug.com/1068515): Refactor caching to remove these flags. + bool is_animating_revert_ = false; bool has_important_overrides_ = false; bool has_font_affecting_animation_ = false;
diff --git a/third_party/blink/renderer/core/dom/container_node.cc b/third_party/blink/renderer/core/dom/container_node.cc index b946eea9..11a7ec9 100644 --- a/third_party/blink/renderer/core/dom/container_node.cc +++ b/third_party/blink/renderer/core/dom/container_node.cc
@@ -1551,6 +1551,12 @@ } Element* ContainerNode::getElementById(const AtomicString& id) const { + // According to https://dom.spec.whatwg.org/#concept-id, empty IDs are + // treated as equivalent to the lack of an id attribute. + if (id.IsEmpty()) { + return nullptr; + } + if (IsInTreeScope()) { // Fast path if we are in a tree scope: call getElementById() on tree scope // and check if the matching element is in our subtree.
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element.cc b/third_party/blink/renderer/core/html/forms/html_input_element.cc index 610bd62..ce0b6a33 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_input_element.cc
@@ -1989,8 +1989,7 @@ } bool HTMLInputElement::IsInteractiveContent() const { - return input_type_->IsInteractiveContent() || - HTMLElement::IsInteractiveContent(); + return input_type_->IsInteractiveContent(); } scoped_refptr<ComputedStyle> HTMLInputElement::CustomStyleForLayoutObject() {
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third_party/blink/renderer/core/html/html_anchor_element.cc index a366e2ff..aa87429 100644 --- a/third_party/blink/renderer/core/html/html_anchor_element.cc +++ b/third_party/blink/renderer/core/html/html_anchor_element.cc
@@ -582,7 +582,7 @@ } bool HTMLAnchorElement::IsInteractiveContent() const { - return IsLink() || HTMLElement::IsInteractiveContent(); + return IsLink(); } Node::InsertionNotificationRequest HTMLAnchorElement::InsertedInto(
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc index 0797aaa4..1c9bd6f 100644 --- a/third_party/blink/renderer/core/html/html_element.cc +++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -1374,7 +1374,7 @@ } bool HTMLElement::IsInteractiveContent() const { - return FastHasAttribute(html_names::kTabindexAttr); + return false; } void HTMLElement::DefaultEventHandler(Event& event) {
diff --git a/third_party/blink/renderer/core/html/html_image_element.cc b/third_party/blink/renderer/core/html/html_image_element.cc index d9b54e7..e40958f 100644 --- a/third_party/blink/renderer/core/html/html_image_element.cc +++ b/third_party/blink/renderer/core/html/html_image_element.cc
@@ -667,8 +667,7 @@ } bool HTMLImageElement::IsInteractiveContent() const { - return FastHasAttribute(html_names::kUsemapAttr) || - HTMLElement::IsInteractiveContent(); + return FastHasAttribute(html_names::kUsemapAttr); } FloatSize HTMLImageElement::DefaultDestinationSize(
diff --git a/third_party/blink/renderer/core/html/html_object_element.cc b/third_party/blink/renderer/core/html/html_object_element.cc index 954e322..6a2465c 100644 --- a/third_party/blink/renderer/core/html/html_object_element.cc +++ b/third_party/blink/renderer/core/html/html_object_element.cc
@@ -408,8 +408,7 @@ } bool HTMLObjectElement::IsInteractiveContent() const { - return FastHasAttribute(html_names::kUsemapAttr) || - HTMLElement::IsInteractiveContent(); + return FastHasAttribute(html_names::kUsemapAttr); } bool HTMLObjectElement::UseFallbackContent() const {
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc index 5d325a5..f144304 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.cc +++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -3998,8 +3998,7 @@ } bool HTMLMediaElement::IsInteractiveContent() const { - return FastHasAttribute(html_names::kControlsAttr) || - HTMLElement::IsInteractiveContent(); + return FastHasAttribute(html_names::kControlsAttr); } void HTMLMediaElement::Trace(Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/layout/layout_grid.cc b/third_party/blink/renderer/core/layout/layout_grid.cc index 4088d0ec..1b03b70f 100644 --- a/third_party/blink/renderer/core/layout/layout_grid.cc +++ b/third_party/blink/renderer/core/layout/layout_grid.cc
@@ -1218,22 +1218,11 @@ DCHECK(!grid_->NeedsItemsPlacement()); bool has_collapsed_tracks = grid_->HasAutoRepeatEmptyTracks(direction); LayoutUnit gap = !has_collapsed_tracks ? GridGap(direction) : LayoutUnit(); - size_t explicit_start = -grid_->SmallestTrackStart(direction); - size_t explicit_end = explicit_start + - (is_row_axis ? StyleRef().GridTemplateColumns() - : StyleRef().GridTemplateRows()) - .size() + - AutoRepeatCountForDirection(direction); - // Usually we have `explicit_end <= num_positions - 1`, but the latter may be - // smaller when the maximum number of tracks is reached. - explicit_end = std::min(explicit_end, num_positions - 1); - tracks.ReserveCapacity(explicit_end - explicit_start); - size_t loop_end = std::min(explicit_end, num_positions - 2); - for (size_t i = explicit_start; i < loop_end; ++i) + tracks.ReserveCapacity(num_positions - 1); + for (size_t i = 0; i < num_positions - 2; ++i) tracks.push_back(positions[i + 1] - positions[i] - offset_between_tracks - gap); - if (loop_end < explicit_end) - tracks.push_back(positions[explicit_end] - positions[explicit_end - 1]); + tracks.push_back(positions[num_positions - 1] - positions[num_positions - 2]); if (!has_collapsed_tracks) return tracks; @@ -1243,7 +1232,7 @@ size_t last_line = tracks.size(); gap = GridGap(direction); for (size_t i = 1; i < last_line; ++i) { - if (grid_->IsEmptyAutoRepeatTrack(direction, i - 1 + explicit_start)) { + if (grid_->IsEmptyAutoRepeatTrack(direction, i - 1)) { --remaining_empty_tracks; } else { // Remove the gap between consecutive non empty tracks. Remove it also @@ -1252,7 +1241,7 @@ bool all_remaining_tracks_are_empty = remaining_empty_tracks == (last_line - i); if (!all_remaining_tracks_are_empty || - !grid_->IsEmptyAutoRepeatTrack(direction, i + explicit_start)) + !grid_->IsEmptyAutoRepeatTrack(direction, i)) tracks[i - 1] -= gap; } }
diff --git a/third_party/blink/renderer/core/layout/layout_inline.cc b/third_party/blink/renderer/core/layout/layout_inline.cc index 73e196c..17a352ce 100644 --- a/third_party/blink/renderer/core/layout/layout_inline.cc +++ b/third_party/blink/renderer/core/layout/layout_inline.cc
@@ -1644,9 +1644,9 @@ // zero in LayoutNG. We should probably remove this function for LayoutNG. DCHECK(IsInFlowPositioned() || StyleRef().HasNonInitialFilter() || - StyleRef().HasBackdropFilter()); + StyleRef().HasNonInitialBackdropFilter()); if (!IsInFlowPositioned() && !StyleRef().HasNonInitialFilter() && - !StyleRef().HasBackdropFilter()) { + !StyleRef().HasNonInitialBackdropFilter()) { DCHECK(CreatesGroup()) << "Inlines with filters or backdrop-filters should create a group"; return PhysicalOffset();
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index f2dd044..8a0cdbf 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -1339,7 +1339,7 @@ // Backdrop-filter creates a containing block for fixed and absolute // positioned elements: // https://drafts.fxtf.org/filter-effects-2/#backdrop-filter-operation - if (!is_document_element && style->HasBackdropFilter()) + if (!is_document_element && style->HasNonInitialBackdropFilter()) return true; // The LayoutView is always a container of fixed positioned descendants. In // addition, SVG foreignObjects become such containers, so that descendants
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 7c26dfcf..8c7cb8d 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -1125,7 +1125,9 @@ bool HasHiddenBackface() const { return StyleRef().BackfaceVisibility() == EBackfaceVisibility::kHidden; } - bool HasBackdropFilter() const { return StyleRef().HasBackdropFilter(); } + bool HasNonInitialBackdropFilter() const { + return StyleRef().HasNonInitialBackdropFilter(); + } // Returns |true| if any property that renders using filter operations is // used (including, but not limited to, 'filter' and 'box-reflect'). @@ -2060,7 +2062,7 @@ bool CreatesGroup() const { return StyleRef().HasOpacity() || HasMask() || HasClipPath() || - HasFilterInducingProperty() || HasBackdropFilter() || + HasFilterInducingProperty() || HasNonInitialBackdropFilter() || StyleRef().HasBlendMode(); }
diff --git a/third_party/blink/renderer/core/paint/box_painter.cc b/third_party/blink/renderer/core/paint/box_painter.cc index be14cf8..b078862 100644 --- a/third_party/blink/renderer/core/paint/box_painter.cc +++ b/third_party/blink/renderer/core/paint/box_painter.cc
@@ -299,23 +299,19 @@ if (!fragment) return; - // Only create scroll hit test data for objects that scroll. - if (layout_box_.GetScrollableArea()->ScrollsOverflow()) { - const auto* properties = fragment->PaintProperties(); - - // If there is an associated scroll node, emit scroll hit test data. - if (properties && properties->Scroll()) { - DCHECK(properties->ScrollTranslation()); - // We record scroll hit test data in the local border box properties - // instead of the contents properties so that the scroll hit test is not - // clipped or scrolled. - auto& paint_controller = paint_info.context.GetPaintController(); - DCHECK_EQ(fragment->LocalBorderBoxProperties(), - paint_controller.CurrentPaintChunkProperties()); - paint_controller.RecordScrollHitTestData( - background_client, DisplayItem::kScrollHitTest, - properties->ScrollTranslation(), fragment->VisualRect()); - } + // If there is an associated scroll node, emit scroll hit test data. + const auto* properties = fragment->PaintProperties(); + if (properties && properties->Scroll()) { + DCHECK(properties->ScrollTranslation()); + // We record scroll hit test data in the local border box properties + // instead of the contents properties so that the scroll hit test is not + // clipped or scrolled. + auto& paint_controller = paint_info.context.GetPaintController(); + DCHECK_EQ(fragment->LocalBorderBoxProperties(), + paint_controller.CurrentPaintChunkProperties()); + paint_controller.RecordScrollHitTestData( + background_client, DisplayItem::kScrollHitTest, + properties->ScrollTranslation(), fragment->VisualRect()); } ScrollableAreaPainter(*layout_box_.GetScrollableArea())
diff --git a/third_party/blink/renderer/core/paint/box_painter_test.cc b/third_party/blink/renderer/core/paint/box_painter_test.cc index 5a929df6..e2568b1 100644 --- a/third_party/blink/renderer/core/paint/box_painter_test.cc +++ b/third_party/blink/renderer/core/paint/box_painter_test.cc
@@ -44,19 +44,28 @@ IsSameId(div1, kBackgroundType), IsSameId(div2, DisplayItem::PaintPhaseToDrawingType( PaintPhase::kSelfOutlineOnly)))); - EXPECT_THAT( - RootPaintController().PaintChunks(), - ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - kDocumentBackgroundType), - GetLayoutView().FirstFragment().ContentsProperties(), - nullptr, IntRect(0, 0, 800, 600)), - // Empty backgrounds contribute to bounds of paint chunks. - IsPaintChunk(1, 3, - PaintChunk::Id(*body->Layer(), DisplayItem::kLayerChunk), - body->FirstFragment().LocalBorderBoxProperties(), - nullptr, IntRect(-2, 0, 202, 350)))); + + if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) { + EXPECT_THAT( + RootPaintController().PaintChunks(), + ElementsAre( + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. + // Empty backgrounds contribute to bounds of paint chunks. + IsPaintChunk( + 1, 3, PaintChunk::Id(*body->Layer(), DisplayItem::kLayerChunk), + body->FirstFragment().LocalBorderBoxProperties(), nullptr, + IntRect(-2, 0, 202, 350)))); + } else { + EXPECT_THAT( + RootPaintController().PaintChunks(), + ElementsAre( + IsPaintChunk(0, 1), // LayoutView chunks. + // Empty backgrounds contribute to bounds of paint chunks. + IsPaintChunk( + 1, 3, PaintChunk::Id(*body->Layer(), DisplayItem::kLayerChunk), + body->FirstFragment().LocalBorderBoxProperties(), nullptr, + IntRect(-2, 0, 202, 350)))); + } } TEST_P(BoxPainterTest, ScrollHitTestOrderWithScrollBackgroundAttachment) { @@ -101,10 +110,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - kDocumentBackgroundType), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 2, PaintChunk::Id(*container.Layer(), DisplayItem::kLayerChunk), @@ -176,10 +182,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - kDocumentBackgroundType), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 1, PaintChunk::Id(*container.Layer(), DisplayItem::kLayerChunk), @@ -250,40 +253,59 @@ scroll_hit_test_data.scroll_translation = &scrolling_contents_properties.Transform(); scroll_hit_test_data.scroll_hit_test_rect = IntRect(0, 0, 200, 200); - EXPECT_THAT( - paint_chunks, - ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - kDocumentBackgroundType), - GetLayoutView().FirstFragment().ContentsProperties()), - IsPaintChunk( - 1, 2, - PaintChunk::Id(*container.Layer(), DisplayItem::kLayerChunk), - container.FirstFragment().LocalBorderBoxProperties()), - IsPaintChunk(2, 2, - PaintChunk::Id(container, DisplayItem::kScrollHitTest), - container.FirstFragment().LocalBorderBoxProperties(), - &scroll_hit_test_data, IntRect(0, 0, 200, 200)), - IsPaintChunk( - 2, 3, - PaintChunk::Id(container, kClippedContentsBackgroundChunkType), - scrolling_contents_properties))); + if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) { + EXPECT_THAT( + paint_chunks, + ElementsAre( + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. + IsPaintChunk( + 1, 2, + PaintChunk::Id(*container.Layer(), DisplayItem::kLayerChunk), + container.FirstFragment().LocalBorderBoxProperties()), + IsPaintChunk(2, 2, + PaintChunk::Id(container, DisplayItem::kScrollHitTest), + container.FirstFragment().LocalBorderBoxProperties(), + &scroll_hit_test_data, IntRect(0, 0, 200, 200)), + IsPaintChunk( + 2, 3, + PaintChunk::Id(container, kClippedContentsBackgroundChunkType), + scrolling_contents_properties))); + } else { + EXPECT_THAT( + paint_chunks, + ElementsAre( + IsPaintChunk(0, 1), // LayoutView. + IsPaintChunk( + 1, 2, + PaintChunk::Id(*container.Layer(), DisplayItem::kLayerChunk), + container.FirstFragment().LocalBorderBoxProperties()), + IsPaintChunk(2, 2, + PaintChunk::Id(container, DisplayItem::kScrollHitTest), + container.FirstFragment().LocalBorderBoxProperties(), + &scroll_hit_test_data, IntRect(0, 0, 200, 200)), + IsPaintChunk( + 2, 3, + PaintChunk::Id(container, kClippedContentsBackgroundChunkType), + scrolling_contents_properties))); + } // We always create scroll node for the root layer. - const auto& root_transform = paint_chunks[0].properties.Transform(); + wtf_size_t chunk_index = + RuntimeEnabledFeatures::CompositeAfterPaintEnabled() ? 1 : 0; + const auto& root_transform = paint_chunks[chunk_index].properties.Transform(); EXPECT_NE(nullptr, root_transform.ScrollNode()); // The container's background chunk should not scroll and therefore should use // the root transform. Its local transform is actually a paint offset // transform. - const auto& container_transform = paint_chunks[1].properties.Transform(); + const auto& container_transform = + paint_chunks[++chunk_index].properties.Transform(); EXPECT_EQ(&root_transform, container_transform.Parent()); EXPECT_EQ(nullptr, container_transform.ScrollNode()); // The scroll hit test should not be scrolled and should not be clipped. // Its local transform is actually a paint offset transform. - const auto& scroll_hit_test_chunk = paint_chunks[2]; + const auto& scroll_hit_test_chunk = paint_chunks[++chunk_index]; const auto& scroll_hit_test_transform = scroll_hit_test_chunk.properties.Transform(); EXPECT_EQ(nullptr, scroll_hit_test_transform.ScrollNode()); @@ -293,7 +315,7 @@ scroll_hit_test_clip.UnsnappedClipRect().Rect()); // The scrolled contents should be scrolled and clipped. - const auto& contents_chunk = paint_chunks[3]; + const auto& contents_chunk = paint_chunks[++chunk_index]; const auto& contents_transform = contents_chunk.properties.Transform(); const auto* contents_scroll = contents_transform.ScrollNode(); EXPECT_EQ(IntSize(200, 300), contents_scroll->ContentsSize());
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc index c9f9662..236fee1 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -994,7 +994,7 @@ scrolling_contents_are_empty_ = !owning_layer_.HasVisibleContent() || !(GetLayoutObject().StyleRef().HasBackground() || - GetLayoutObject().HasBackdropFilter() || PaintsChildren()); + GetLayoutObject().HasNonInitialBackdropFilter() || PaintsChildren()); scrolling_contents_layer_->SetDrawsContent(!scrolling_contents_are_empty_); scrolling_contents_layer_->SetPaintsHitTest(paints_hit_test); } @@ -1300,7 +1300,7 @@ GetLayoutObject().UniqueId(), CompositorElementIdNamespace::kEffectMask); mask_layer_->SetElementId(element_id); - if (GetLayoutObject().HasBackdropFilter()) + if (GetLayoutObject().HasNonInitialBackdropFilter()) mask_layer_->CcLayer()->SetIsBackdropFilterMask(true); mask_layer_->SetHitTestable(true); layer_changed = true;
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc index bef8492..254cb7fc 100644 --- a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc +++ b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc
@@ -76,8 +76,8 @@ DCHECK((style.HasOpacity() || layout_object.HasMask() || layout_object.HasClipPath() || layout_object.HasFilterInducingProperty() || - layout_object.HasBackdropFilter() || style.HasBlendMode()) == - layout_object.CreatesGroup()); + layout_object.HasNonInitialBackdropFilter() || + style.HasBlendMode()) == layout_object.CreatesGroup()); if (style.HasMask() || style.ClipPath()) reasons |= CompositingReason::kMaskWithCompositedDescendants;
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter_test.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter_test.cc index ccaf7fc..dddb51a8 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter_test.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter_test.cc
@@ -67,10 +67,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - DisplayItem::kDocumentBackground), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 1, PaintChunk::Id(*scroller.Layer(), DisplayItem::kLayerChunk), @@ -85,10 +82,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - DisplayItem::kDocumentBackground), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 1), // LayutView. IsPaintChunk( 1, 1, PaintChunk::Id(root_fragment, DisplayItem::kScrollHitTest),
diff --git a/third_party/blink/renderer/core/paint/paint_and_raster_invalidation_test.cc b/third_party/blink/renderer/core/paint/paint_and_raster_invalidation_test.cc index 773e223..3446109 100644 --- a/third_party/blink/renderer/core/paint/paint_and_raster_invalidation_test.cc +++ b/third_party/blink/renderer/core/paint/paint_and_raster_invalidation_test.cc
@@ -81,7 +81,7 @@ .View() ->GetPaintArtifactCompositor() ->RootLayer() - ->children()[0] + ->children()[1] .get() : GetLayoutView().Layer()->GraphicsLayerBacking()->CcLayer();
diff --git a/third_party/blink/renderer/core/paint/paint_controller_paint_test.cc b/third_party/blink/renderer/core/paint/paint_controller_paint_test.cc index cafc505..593e66c 100644 --- a/third_party/blink/renderer/core/paint/paint_controller_paint_test.cc +++ b/third_party/blink/renderer/core/paint/paint_controller_paint_test.cc
@@ -238,10 +238,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - DisplayItem::kDocumentBackground), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 1, PaintChunk::Id(*container.Layer(), DisplayItem::kLayerChunk), @@ -270,10 +267,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - DisplayItem::kDocumentBackground), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 1, PaintChunk::Id(*container.Layer(), DisplayItem::kLayerChunk), @@ -400,10 +394,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - DisplayItem::kDocumentBackground), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 2, PaintChunk::Id(*neg_z_child.Layer(), DisplayItem::kLayerChunk), @@ -480,10 +471,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - DisplayItem::kDocumentBackground), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 2, PaintChunk::Id(*container.Layer(), DisplayItem::kLayerChunk), @@ -553,10 +541,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - DisplayItem::kDocumentBackground), - GetLayoutView().FirstFragment().ContentsProperties()), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 2, PaintChunk::Id(*neg_z_child.Layer(), DisplayItem::kLayerChunk),
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter.cc b/third_party/blink/renderer/core/paint/paint_layer_painter.cc index 9017869..50454956 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_painter.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_painter.cc
@@ -49,6 +49,8 @@ } bool PaintLayerPainter::PaintedOutputInvisible(const ComputedStyle& style) { + // TODO(pdr): When will-change: backdrop-filter is a compositing trigger, this + // should be changed to |HasNonInitialBackdropFilter()|. if (style.HasBackdropFilter()) return false;
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter_test.cc b/third_party/blink/renderer/core/paint/paint_layer_painter_test.cc index c191b7a6..220ec52 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_painter_test.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_painter_test.cc
@@ -98,30 +98,60 @@ IsSameId(GetDisplayItemClientFromLayoutObject(filler2), kBackgroundType))); - EXPECT_SUBSEQUENCE(*container1_layer, 1, 2); - EXPECT_SUBSEQUENCE(*filler1_layer, 2, 3); - EXPECT_SUBSEQUENCE(*container2_layer, 3, 4); - EXPECT_SUBSEQUENCE(*filler2_layer, 4, 5); - // Check that new paint chunks were forced for the layers. - EXPECT_THAT( - RootPaintController().PaintChunks(), - ElementsAre( - IsPaintChunk(0, 1), - IsPaintChunk( - 1, 3, - PaintChunk::Id(*container1_layer, DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 0, 200, 200)), - IsPaintChunk( - 3, 4, PaintChunk::Id(*filler1_layer, DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 200, 20, 20)), - IsPaintChunk( - 4, 6, - PaintChunk::Id(*container2_layer, DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 220, 200, 200)), - IsPaintChunk( - 6, 7, PaintChunk::Id(*filler2_layer, DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 420, 20, 20)))); + if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) { + EXPECT_SUBSEQUENCE(*container1_layer, 2, 3); + EXPECT_SUBSEQUENCE(*filler1_layer, 3, 4); + EXPECT_SUBSEQUENCE(*container2_layer, 4, 5); + EXPECT_SUBSEQUENCE(*filler2_layer, 5, 6); + + EXPECT_THAT( + RootPaintController().PaintChunks(), + ElementsAre( + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. + IsPaintChunk( + 1, 3, + PaintChunk::Id(*container1_layer, DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 0, 200, 200)), + IsPaintChunk( + 3, 4, + PaintChunk::Id(*filler1_layer, DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 200, 20, 20)), + IsPaintChunk( + 4, 6, + PaintChunk::Id(*container2_layer, DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 220, 200, 200)), + IsPaintChunk( + 6, 7, + PaintChunk::Id(*filler2_layer, DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 420, 20, 20)))); + } else { + EXPECT_SUBSEQUENCE(*container1_layer, 1, 2); + EXPECT_SUBSEQUENCE(*filler1_layer, 2, 3); + EXPECT_SUBSEQUENCE(*container2_layer, 3, 4); + EXPECT_SUBSEQUENCE(*filler2_layer, 4, 5); + + EXPECT_THAT( + RootPaintController().PaintChunks(), + ElementsAre( + IsPaintChunk(0, 1), // LayoutView. + IsPaintChunk( + 1, 3, + PaintChunk::Id(*container1_layer, DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 0, 200, 200)), + IsPaintChunk( + 3, 4, + PaintChunk::Id(*filler1_layer, DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 200, 20, 20)), + IsPaintChunk( + 4, 6, + PaintChunk::Id(*container2_layer, DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 220, 200, 200)), + IsPaintChunk( + 6, 7, + PaintChunk::Id(*filler2_layer, DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 420, 20, 20)))); + } }; check_results(); @@ -176,9 +206,9 @@ auto* inner_content_layer = ToLayoutBoxModelObject(inner_content)->Layer(); auto* filler_layer = ToLayoutBoxModelObject(filler)->Layer(); - EXPECT_SUBSEQUENCE(*container_layer, 1, 5); - EXPECT_SUBSEQUENCE(*content_layer, 3, 4); - EXPECT_SUBSEQUENCE(*filler_layer, 4, 5); + EXPECT_SUBSEQUENCE(*container_layer, 2, 6); + EXPECT_SUBSEQUENCE(*content_layer, 4, 5); + EXPECT_SUBSEQUENCE(*filler_layer, 5, 6); auto container_properties = container->FirstFragment().LocalBorderBoxProperties(); @@ -190,7 +220,7 @@ EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 1, PaintChunk::Id(*container_layer, DisplayItem::kLayerChunk), container_properties, nullptr, IntRect(0, 0, 150, 150)), @@ -216,14 +246,14 @@ IsSameId(GetDisplayItemClientFromLayoutObject(inner_content), kBackgroundType))); - EXPECT_SUBSEQUENCE(*container_layer, 1, 6); - EXPECT_SUBSEQUENCE(*content_layer, 3, 5); - EXPECT_SUBSEQUENCE(*filler_layer, 5, 6); + EXPECT_SUBSEQUENCE(*container_layer, 2, 7); + EXPECT_SUBSEQUENCE(*content_layer, 4, 6); + EXPECT_SUBSEQUENCE(*filler_layer, 6, 7); EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( - IsPaintChunk(0, 1), + IsPaintChunk(0, 0), IsPaintChunk(0, 1), // LayoutView chunks. IsPaintChunk( 1, 1, PaintChunk::Id(*container_layer, DisplayItem::kLayerChunk), container_properties, nullptr, IntRect(0, 0, 150, 150)), @@ -570,35 +600,75 @@ IsSameId(content2b, kBackgroundType), IsSameId(content2a, kBackgroundType))); - EXPECT_THAT( - RootPaintController().PaintChunks(), - ElementsAre( - IsPaintChunk(0, 1, - PaintChunk::Id(ViewScrollingBackgroundClient(), - kDocumentBackgroundType), - chunk_state), - // Includes |container1| and |content1a|. - IsPaintChunk( - 1, 3, - PaintChunk::Id(*container1->Layer(), DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 0, 800, 150)), - // Includes |content1b| which overflows |container1|. - IsPaintChunk( - 3, 4, - PaintChunk::Id(*content1b->Layer(), DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 100, 800, 100)), - IsPaintChunk( - 4, 5, - PaintChunk::Id(*container2->Layer(), DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 150, 800, 200)), - IsPaintChunk( - 5, 6, - PaintChunk::Id(*content2b->Layer(), DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 250, 800, 100)), - IsPaintChunk( - 6, 7, - PaintChunk::Id(*content2a->Layer(), DisplayItem::kLayerChunk), - chunk_state, nullptr, IntRect(0, 150, 800, 100)))); + if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) { + HitTestData scroll_hit_test; + scroll_hit_test.scroll_translation = &chunk_state.Transform(); + scroll_hit_test.scroll_hit_test_rect = IntRect(0, 0, 800, 600); + EXPECT_THAT( + RootPaintController().PaintChunks(), + ElementsAre( + IsPaintChunk( + 0, 0, + PaintChunk::Id(GetLayoutView(), DisplayItem::kScrollHitTest), + GetLayoutView().FirstFragment().LocalBorderBoxProperties(), + &scroll_hit_test), + IsPaintChunk(0, 1, + PaintChunk::Id(ViewScrollingBackgroundClient(), + kDocumentBackgroundType), + chunk_state), + // Includes |container1| and |content1a|. + IsPaintChunk( + 1, 3, + PaintChunk::Id(*container1->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 0, 800, 150)), + // Includes |content1b| which overflows |container1|. + IsPaintChunk( + 3, 4, + PaintChunk::Id(*content1b->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 100, 800, 100)), + IsPaintChunk( + 4, 5, + PaintChunk::Id(*container2->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 150, 800, 200)), + IsPaintChunk( + 5, 6, + PaintChunk::Id(*content2b->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 250, 800, 100)), + IsPaintChunk( + 6, 7, + PaintChunk::Id(*content2a->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 150, 800, 100)))); + } else { + EXPECT_THAT( + RootPaintController().PaintChunks(), + ElementsAre( + IsPaintChunk(0, 1, + PaintChunk::Id(ViewScrollingBackgroundClient(), + kDocumentBackgroundType), + chunk_state), + // Includes |container1| and |content1a|. + IsPaintChunk( + 1, 3, + PaintChunk::Id(*container1->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 0, 800, 150)), + // Includes |content1b| which overflows |container1|. + IsPaintChunk( + 3, 4, + PaintChunk::Id(*content1b->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 100, 800, 100)), + IsPaintChunk( + 4, 5, + PaintChunk::Id(*container2->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 150, 800, 200)), + IsPaintChunk( + 5, 6, + PaintChunk::Id(*content2b->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 250, 800, 100)), + IsPaintChunk( + 6, 7, + PaintChunk::Id(*content2a->Layer(), DisplayItem::kLayerChunk), + chunk_state, nullptr, IntRect(0, 150, 800, 100)))); + } } TEST_P(PaintLayerPainterTest, HintedPaintChunksWithoutBackgrounds) { @@ -629,9 +699,17 @@ ElementsAre(IsSameId(&ViewScrollingBackgroundClient(), kDocumentBackgroundType))); + HitTestData scroll_hit_test; + scroll_hit_test.scroll_translation = &chunk_state.Transform(); + scroll_hit_test.scroll_hit_test_rect = IntRect(0, 0, 800, 600); EXPECT_THAT( RootPaintController().PaintChunks(), ElementsAre( + IsPaintChunk( + 0, 0, + PaintChunk::Id(GetLayoutView(), DisplayItem::kScrollHitTest), + GetLayoutView().FirstFragment().LocalBorderBoxProperties(), + &scroll_hit_test), IsPaintChunk(0, 1, PaintChunk::Id(ViewScrollingBackgroundClient(), kDocumentBackgroundType),
diff --git a/third_party/blink/renderer/core/paint/view_painter.cc b/third_party/blink/renderer/core/paint/view_painter.cc index 1ce2481e..1771a25 100644 --- a/third_party/blink/renderer/core/paint/view_painter.cc +++ b/third_party/blink/renderer/core/paint/view_painter.cc
@@ -70,9 +70,28 @@ return; bool has_touch_action_rect = layout_view_.HasEffectiveAllowedTouchAction(); + bool painting_scrolling_background = + BoxDecorationData::IsPaintingScrollingBackground(paint_info, + layout_view_); bool paints_scroll_hit_test = - layout_view_.GetScrollableArea() && - layout_view_.GetScrollableArea()->ScrollsOverflow(); + !painting_scrolling_background && + layout_view_.FirstFragment().PaintProperties()->Scroll(); + if (!RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) { + // Pre-CompositeAfterPaint, there is no need to emit scroll hit test + // display items for composited scrollers because these display items are + // only used to create non-fast scrollable regions for non-composited + // scrollers. With CompositeAfterPaint, we always paint the scroll hit + // test display items but ignore the non-fast region if the scroll was + // composited in PaintArtifactCompositor::UpdateNonFastScrollableRegions. + if (layout_view_.HasLayer() && + layout_view_.Layer()->GetCompositedLayerMapping() && + layout_view_.Layer() + ->GetCompositedLayerMapping() + ->HasScrollingLayer()) { + paints_scroll_hit_test = false; + } + } + if (!layout_view_.HasBoxDecorationBackground() && !has_touch_action_rect && !paints_scroll_hit_test) return; @@ -89,9 +108,6 @@ const DisplayItemClient* background_client = &layout_view_; - bool painting_scrolling_background = - BoxDecorationData::IsPaintingScrollingBackground(paint_info, - layout_view_); if (painting_scrolling_background) { // Layout overflow, combined with the visible content size. auto document_rect = layout_view_.DocumentRect(); @@ -183,28 +199,11 @@ *background_client); } - bool needs_scroll_hit_test = true; - if (!RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) { - // Pre-CompositeAfterPaint, there is no need to emit scroll hit test - // display items for composited scrollers because these display items are - // only used to create non-fast scrollable regions for non-composited - // scrollers. With CompositeAfterPaint, we always paint the scroll hit - // test display items but ignore the non-fast region if the scroll was - // composited in PaintArtifactCompositor::UpdateNonFastScrollableRegions. - if (layout_view_.HasLayer() && - layout_view_.Layer()->GetCompositedLayerMapping() && - layout_view_.Layer() - ->GetCompositedLayerMapping() - ->HasScrollingLayer()) { - needs_scroll_hit_test = false; - } - } - // Record the scroll hit test after the non-scrolling background so // background squashing is not affected. Hit test order would be equivalent // if this were immediately before the non-scrolling background. - if (paints_scroll_hit_test && !painting_scrolling_background && - needs_scroll_hit_test) { + if (paints_scroll_hit_test) { + DCHECK(!painting_scrolling_background); BoxPainter(layout_view_) .RecordScrollHitTestData(paint_info, *background_client); }
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h index d14d1120..73aef44 100644 --- a/third_party/blink/renderer/core/style/computed_style.h +++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -435,6 +435,8 @@ DCHECK(BackdropFilterInternal().Get()); return MutableBackdropFilterInternal()->operations_; } + // For containing blocks, use |HasNonInitialBackdropFilter()| which includes + // will-change: backdrop-filter. bool HasBackdropFilter() const { DCHECK(BackdropFilterInternal().Get()); return !BackdropFilterInternal()->operations_.Operations().IsEmpty(); @@ -457,6 +459,8 @@ DCHECK(FilterInternal().Get()); return FilterInternal()->operations_; } + // For containing blocks, use |HasNonInitialFilter()| which includes + // will-change: filter. bool HasFilter() const { DCHECK(FilterInternal().Get()); return !FilterInternal()->operations_.Operations().IsEmpty(); @@ -1480,6 +1484,9 @@ return WillChangeProperties().Contains(CSSPropertyID::kFilter) || WillChangeProperties().Contains(CSSPropertyID::kAliasWebkitFilter); } + bool HasWillChangeBackdropFilterHint() const { + return WillChangeProperties().Contains(CSSPropertyID::kBackdropFilter); + } // Hyphen utility functions. Hyphenation* GetHyphenation() const; @@ -2348,6 +2355,12 @@ return HasFilter() || HasWillChangeFilterHint(); } + // Returns |true| if backdrop-filter should be considered to have non-initial + // value for the purposes of containing blocks. + bool HasNonInitialBackdropFilter() const { + return HasBackdropFilter() || HasWillChangeBackdropFilterHint(); + } + // Returns |true| if opacity should be considered to have non-initial value // for the purpose of creating stacking contexts. bool HasNonInitialOpacity() const { @@ -2434,7 +2447,7 @@ // positioned elements: // https://drafts.fxtf.org/filter-effects-2/#backdrop-filter-operation (!is_document_element && - (HasNonInitialFilter() || HasBackdropFilter())); + (HasNonInitialFilter() || HasNonInitialBackdropFilter())); } // Whitespace utility functions. @@ -2504,7 +2517,8 @@ bool HasBoxDecorations() const { return HasBorderDecoration() || HasBorderRadius() || HasOutline() || HasEffectiveAppearance() || BoxShadow() || - HasFilterInducingProperty() || HasBackdropFilter() || HasResize(); + HasFilterInducingProperty() || HasNonInitialBackdropFilter() || + HasResize(); } // "Box decoration background" includes all box decorations and backgrounds
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_buffer.cc b/third_party/blink/renderer/modules/webgpu/gpu_buffer.cc index 80a4f47..f2ec4da8 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_buffer.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_buffer.cc
@@ -131,6 +131,10 @@ uint64_t src_byte_offset, uint64_t byte_length, ExceptionState& exception_state) { + device_->AddConsoleWarning( + "GPUBuffer.setSubData is deprecated: use createBufferMapped " + "(with copyBufferToBuffer if needed) " + "(but note the design/spec of this API is still in flux)"); const uint8_t* src_base = reinterpret_cast<const uint8_t*>(src.BaseAddressMaybeOnStack()); size_t src_byte_length = src.ByteLengthAsSizeT();
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc index adc40b87..771bfe7 100644 --- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc +++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
@@ -36,6 +36,34 @@ namespace { +gfx::ColorSpace GetColorSpace(const avifImage* image) { + if (image->profileFormat == AVIF_PROFILE_FORMAT_NCLX) { + media::VideoColorSpace color_space( + image->nclx.colourPrimaries, image->nclx.transferCharacteristics, + image->nclx.matrixCoefficients, + image->nclx.fullRangeFlag ? gfx::ColorSpace::RangeID::FULL + : gfx::ColorSpace::RangeID::LIMITED); + if (color_space.IsSpecified()) + return color_space.ToGfxColorSpace(); + if (image->nclx.fullRangeFlag) + return gfx::ColorSpace::CreateJpeg(); + return gfx::ColorSpace::CreateREC709(); + } + if (image->profileFormat == AVIF_PROFILE_FORMAT_ICC) { + auto iccp = gfx::ICCProfile::FromData(image->icc.data, image->icc.size); + if (iccp.IsValid()) + return iccp.GetColorSpace(); + + // TODO(dalecurtis): Do we need to reparse this per frame when dealing + // with animated AVIF files? Or is it only for still picture? + + // TODO(wtc): We need to set the color profile using + // SetEmbeddedColorProfile() rather than handling all the color space + // conversion during decode. + } + return gfx::ColorSpace(); +} + media::VideoPixelFormat AvifToVideoPixelFormat(avifPixelFormat fmt, int depth) { if (depth != 8 && depth != 10 && depth != 12) { // Unsupported bit depth. @@ -100,14 +128,15 @@ template <ColorType color_type, typename InputType, typename OutputType> void YUVAToRGBA(const avifImage* image, - const avifPixelFormatInfo* format_info, const gfx::ColorTransform* transform, OutputType* rgba_dest) { + avifPixelFormatInfo format_info; + avifGetPixelFormatInfo(image->yuvFormat, &format_info); gfx::Point3F pixel; const int max_channel_i = (1 << image->depth) - 1; const float max_channel = float{max_channel_i}; for (uint32_t j = 0; j < image->height; ++j) { - const int uv_j = j >> format_info->chromaShiftY; + const int uv_j = j >> format_info.chromaShiftY; const InputType* y_ptr = reinterpret_cast<InputType*>( &image->yuvPlanes[AVIF_CHAN_Y][j * image->yuvRowBytes[AVIF_CHAN_Y]]); @@ -122,7 +151,7 @@ } for (uint32_t i = 0; i < image->width; ++i) { - const int uv_i = i >> format_info->chromaShiftX; + const int uv_i = i >> format_info.chromaShiftX; // TODO(wtc): Use templates or other ways to avoid doing this comparison // and checking whether the image supports alpha in the inner loop. if (image->yuvRange == AVIF_RANGE_LIMITED) { @@ -261,36 +290,8 @@ ? Vector<size_t>(1, 0) : FindFramesToDecode(index); - // TODO(wtc): Split up this for loop into component functions for readability - // and to reduce nesting. Something like: - // DecodeImage(i); - // MaybeSetSize(image); - // cs = SetColorSpace(image, buffer); - // RenderImage(image, cs, buffer); for (auto i : base::Reversed(frames_to_decode)) { - if (!pending_decoded_image_ || decoder_->imageIndex != int{i}) { - auto ret = (decoder_->imageIndex + 1 == int{i}) - ? avifDecoderNextImage(decoder_.get()) - : avifDecoderNthImage(decoder_.get(), i); - if (ret != AVIF_RESULT_OK || !decoder_->image) { - // We shouldn't be called more times than specified in - // DecodeFrameCount(); possibly this should truncate if the initial - // count is wrong? - DCHECK_NE(ret, AVIF_RESULT_NO_IMAGES_REMAINING); - SetFailed(); - return; - } - } - - const auto* image = decoder_->image; - is_high_bit_depth_ = image->depth > 8; - decode_to_half_float_ = - is_high_bit_depth_ && - high_bit_depth_decoding_option_ == kHighBitDepthToHalfFloat; - - // All frames must be the same size. - if (IsSizeAvailable() ? Size() != IntSize(image->width, image->height) - : !SetSize(image->width, image->height)) { + if (!DecodeImage(i)) { SetFailed(); return; } @@ -305,40 +306,15 @@ if (buffer.GetStatus() == ImageFrame::kFrameComplete) continue; + const auto* image = decoder_->image; buffer.SetHasAlpha(!!image->alphaPlane); if (decode_to_half_float_) buffer.SetPixelFormat(ImageFrame::PixelFormat::kRGBA_F16); // Set color space information on the frame if appropriate. gfx::ColorSpace frame_cs; - if (!IgnoresColorSpace()) { - if (image->profileFormat == AVIF_PROFILE_FORMAT_NCLX) { - media::VideoColorSpace color_space( - image->nclx.colourPrimaries, image->nclx.transferCharacteristics, - image->nclx.matrixCoefficients, - image->nclx.fullRangeFlag ? gfx::ColorSpace::RangeID::FULL - : gfx::ColorSpace::RangeID::LIMITED); - if (color_space.IsSpecified()) { - frame_cs = color_space.ToGfxColorSpace(); - } else if (image->nclx.fullRangeFlag) { - frame_cs = gfx::ColorSpace::CreateJpeg(); - } else { - frame_cs = gfx::ColorSpace::CreateREC709(); - } - } else if (image->profileFormat == AVIF_PROFILE_FORMAT_ICC) { - auto iccp = gfx::ICCProfile::FromData(image->icc.data, image->icc.size); - if (iccp.IsValid()) - frame_cs = iccp.GetColorSpace(); - - // TODO(dalecurtis): Do we need to reparse this per frame when dealing - // with animated AVIF files? Or is it only for still picture? - - // TODO(wtc): We need to set the color profile using - // SetEmbeddedColorProfile() rather than handling all the color space - // conversion during decode. - } - } - + if (!IgnoresColorSpace()) + frame_cs = GetColorSpace(image); if (CanSetColorSpace()) { last_color_space_ = frame_cs.GetAsFullRangeRGB(); } else { @@ -353,95 +329,9 @@ return; } - auto dest_rgb_cs = gfx::ColorSpace(*buffer.Bitmap().colorSpace()); - if (!format_info_) { - format_info_ = std::make_unique<avifPixelFormatInfo>(); - avifGetPixelFormatInfo(image->yuvFormat, format_info_.get()); - } - - const bool is_mono = !image->yuvPlanes[AVIF_CHAN_U]; - - // TODO(dalecurtis): We should decode to YUV when possible. Currently the - // YUV path seems to only support still-image YUV8. - if (decode_to_half_float_) { - if (!UpdateColorTransform(frame_cs, dest_rgb_cs)) { - DVLOG(1) << "Failed to update color transform..."; - SetFailed(); - return; - } - - uint64_t* rgba_hhhh = buffer.GetAddrF16(0, 0); - - // Color and format convert from YUV HBD -> RGBA half float. - if (is_mono) { - YUVAToRGBA<ColorType::kMono, uint16_t>( - image, format_info_.get(), color_transform_.get(), rgba_hhhh); - } else { - // TODO: Add fast path for 10bit 4:2:0 using libyuv. - YUVAToRGBA<ColorType::kColor, uint16_t>( - image, format_info_.get(), color_transform_.get(), rgba_hhhh); - } - } else { - uint32_t* rgba_8888 = buffer.GetAddr(0, 0); - if (ImageIsHighBitDepth() || - // TODO(wtc): Figure out a way to check frame_cs == ~BT.2020 too since - // ConvertVideoFrameToRGBPixels() can handle that too. - frame_cs == gfx::ColorSpace::CreateREC709() || - frame_cs == gfx::ColorSpace::CreateREC601() || - frame_cs == gfx::ColorSpace::CreateJpeg()) { - // Create temporary frame wrapping the YUVA planes. - scoped_refptr<media::VideoFrame> frame; - auto pixel_format = - AvifToVideoPixelFormat(image->yuvFormat, image->depth); - if (pixel_format == media::PIXEL_FORMAT_UNKNOWN) { - SetFailed(); - return; - } - auto size = gfx::Size(image->width, image->height); - if (image->alphaPlane) { - if (pixel_format == media::PIXEL_FORMAT_I420) { - pixel_format = media::PIXEL_FORMAT_I420A; - } else { - NOTIMPLEMENTED(); - SetFailed(); - return; - } - frame = media::VideoFrame::WrapExternalYuvaData( - pixel_format, size, gfx::Rect(size), size, image->yuvRowBytes[0], - image->yuvRowBytes[1], image->yuvRowBytes[2], - image->alphaRowBytes, image->yuvPlanes[0], image->yuvPlanes[1], - image->yuvPlanes[2], image->alphaPlane, base::TimeDelta()); - } else { - frame = media::VideoFrame::WrapExternalYuvData( - pixel_format, size, gfx::Rect(size), size, image->yuvRowBytes[0], - image->yuvRowBytes[1], image->yuvRowBytes[2], image->yuvPlanes[0], - image->yuvPlanes[1], image->yuvPlanes[2], base::TimeDelta()); - } - - // Really only handles 709, 601, JPEG 8-bit conversions and uses libyuv - // under the hood, so is much faster than our manual path. - // - // Technically has support for 10-bit 4:2:0 and 4:2:2, but not to - // half-float and only has support for 4:4:4 and 12-bit by down-shifted - // copies. - // - // https://bugs.chromium.org/p/libyuv/issues/detail?id=845 - media::PaintCanvasVideoRenderer::ConvertVideoFrameToRGBPixels( - frame.get(), rgba_8888, frame->visible_rect().width() * 4); - } else { - if (!UpdateColorTransform(frame_cs, dest_rgb_cs)) { - DVLOG(1) << "Failed to update color transform..."; - SetFailed(); - return; - } - if (is_mono) { - YUVAToRGBA<ColorType::kMono, uint8_t>( - image, format_info_.get(), color_transform_.get(), rgba_8888); - } else { - YUVAToRGBA<ColorType::kColor, uint8_t>( - image, format_info_.get(), color_transform_.get(), rgba_8888); - } - } + if (!RenderImage(image, frame_cs, &buffer)) { + SetFailed(); + return; } buffer.SetDuration( @@ -496,6 +386,32 @@ Decode(0); } +bool AVIFImageDecoder::DecodeImage(size_t index) { + if (!pending_decoded_image_ || decoder_->imageIndex != int{index}) { + auto ret = (decoder_->imageIndex + 1 == int{index}) + ? avifDecoderNextImage(decoder_.get()) + : avifDecoderNthImage(decoder_.get(), index); + if (ret != AVIF_RESULT_OK || !decoder_->image) { + // We shouldn't be called more times than specified in + // DecodeFrameCount(); possibly this should truncate if the initial + // count is wrong? + DCHECK_NE(ret, AVIF_RESULT_NO_IMAGES_REMAINING); + return false; + } + } + + const auto* image = decoder_->image; + is_high_bit_depth_ = image->depth > 8; + decode_to_half_float_ = + is_high_bit_depth_ && + high_bit_depth_decoding_option_ == kHighBitDepthToHalfFloat; + + if (!IsSizeAvailable()) + return SetSize(image->width, image->height); + // All frames must be the same size. + return Size() == IntSize(image->width, image->height); +} + bool AVIFImageDecoder::UpdateColorTransform(const gfx::ColorSpace& src_cs, const gfx::ColorSpace& dest_cs) { if (color_transform_ && color_transform_->GetSrcColorSpace() == src_cs) @@ -512,4 +428,92 @@ return decode_to_half_float_ || decoded_frame_count_ > 1; } +bool AVIFImageDecoder::RenderImage(const avifImage* image, + const gfx::ColorSpace& frame_cs, + ImageFrame* buffer) { + const gfx::ColorSpace dest_rgb_cs(*buffer->Bitmap().colorSpace()); + + const bool is_mono = !image->yuvPlanes[AVIF_CHAN_U]; + + // TODO(dalecurtis): We should decode to YUV when possible. Currently the + // YUV path seems to only support still-image YUV8. + if (decode_to_half_float_) { + if (!UpdateColorTransform(frame_cs, dest_rgb_cs)) { + DVLOG(1) << "Failed to update color transform..."; + return false; + } + + uint64_t* rgba_hhhh = buffer->GetAddrF16(0, 0); + + // Color and format convert from YUV HBD -> RGBA half float. + if (is_mono) { + YUVAToRGBA<ColorType::kMono, uint16_t>(image, color_transform_.get(), + rgba_hhhh); + } else { + // TODO: Add fast path for 10bit 4:2:0 using libyuv. + YUVAToRGBA<ColorType::kColor, uint16_t>(image, color_transform_.get(), + rgba_hhhh); + } + return true; + } + + uint32_t* rgba_8888 = buffer->GetAddr(0, 0); + if (ImageIsHighBitDepth() || + // TODO(wtc): Figure out a way to check frame_cs == ~BT.2020 too since + // ConvertVideoFrameToRGBPixels() can handle that too. + frame_cs == gfx::ColorSpace::CreateREC709() || + frame_cs == gfx::ColorSpace::CreateREC601() || + frame_cs == gfx::ColorSpace::CreateJpeg()) { + // Create temporary frame wrapping the YUVA planes. + scoped_refptr<media::VideoFrame> frame; + auto pixel_format = AvifToVideoPixelFormat(image->yuvFormat, image->depth); + if (pixel_format == media::PIXEL_FORMAT_UNKNOWN) + return false; + auto size = gfx::Size(image->width, image->height); + if (image->alphaPlane) { + if (pixel_format == media::PIXEL_FORMAT_I420) { + pixel_format = media::PIXEL_FORMAT_I420A; + } else { + NOTIMPLEMENTED(); + return false; + } + frame = media::VideoFrame::WrapExternalYuvaData( + pixel_format, size, gfx::Rect(size), size, image->yuvRowBytes[0], + image->yuvRowBytes[1], image->yuvRowBytes[2], image->alphaRowBytes, + image->yuvPlanes[0], image->yuvPlanes[1], image->yuvPlanes[2], + image->alphaPlane, base::TimeDelta()); + } else { + frame = media::VideoFrame::WrapExternalYuvData( + pixel_format, size, gfx::Rect(size), size, image->yuvRowBytes[0], + image->yuvRowBytes[1], image->yuvRowBytes[2], image->yuvPlanes[0], + image->yuvPlanes[1], image->yuvPlanes[2], base::TimeDelta()); + } + + // Really only handles 709, 601, JPEG 8-bit conversions and uses libyuv + // under the hood, so is much faster than our manual path. + // + // Technically has support for 10-bit 4:2:0 and 4:2:2, but not to + // half-float and only has support for 4:4:4 and 12-bit by down-shifted + // copies. + // + // https://bugs.chromium.org/p/libyuv/issues/detail?id=845 + media::PaintCanvasVideoRenderer::ConvertVideoFrameToRGBPixels( + frame.get(), rgba_8888, frame->visible_rect().width() * 4); + return true; + } + + if (!UpdateColorTransform(frame_cs, dest_rgb_cs)) { + DVLOG(1) << "Failed to update color transform..."; + return false; + } + if (is_mono) { + YUVAToRGBA<ColorType::kMono, uint8_t>(image, color_transform_.get(), + rgba_8888); + } else { + YUVAToRGBA<ColorType::kColor, uint8_t>(image, color_transform_.get(), + rgba_8888); + } + return true; +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.h b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.h index da23b0f..a24a0dce 100644 --- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.h +++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.h
@@ -14,7 +14,7 @@ #include "ui/gfx/color_transform.h" struct avifDecoder; -struct avifPixelFormatInfo; +struct avifImage; namespace blink { @@ -51,6 +51,10 @@ // Creates |decoder_| and decodes the first frame. void MaybeCreateDemuxer(); + // Decodes the frame at index |index|. The decoded frame is available in + // decoder_->image. Returns true on success, false on failure. + bool DecodeImage(size_t index); + // Updates or creates |color_transform_|. Returns true on success, false on // failure. bool UpdateColorTransform(const gfx::ColorSpace& src_cs, @@ -59,6 +63,12 @@ // Returns true if we can set the color space on the image. bool CanSetColorSpace() const; + // Renders |image| in |buffer|. |frame_cs| is the color space of |image|. + // Returns true on success, false on failure. + bool RenderImage(const avifImage* image, + const gfx::ColorSpace& frame_cs, + ImageFrame* buffer); + bool pending_decoded_image_ = false; bool is_high_bit_depth_ = false; bool decode_to_half_float_ = false; @@ -66,7 +76,6 @@ std::unique_ptr<avifDecoder, void (*)(avifDecoder*)> decoder_{nullptr, nullptr}; - std::unique_ptr<avifPixelFormatInfo> format_info_; std::unique_ptr<gfx::ColorTransform> color_transform_; gfx::ColorSpace last_color_space_;
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h b/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h index c017569..817c6b4 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h
@@ -41,9 +41,16 @@ bool is_bound() const { return wrapper_->remote().is_bound(); } bool is_connected() const { return wrapper_->remote().is_connected(); } void reset() { wrapper_->remote().reset(); } + void ResetWithReason(uint32_t custom_reason, const std::string& description) { + wrapper_->remote().ResetWithReason(custom_reason, description); + } void set_disconnect_handler(base::OnceClosure handler) { wrapper_->remote().set_disconnect_handler(std::move(handler)); } + void set_disconnect_with_reason_handler( + mojo::ConnectionErrorWithReasonCallback handler) { + wrapper_->remote().set_disconnect_with_reason_handler(std::move(handler)); + } mojo::PendingReceiver<Interface> BindNewPipeAndPassReceiver( scoped_refptr<base::SequencedTaskRunner> task_runner) WARN_UNUSED_RESULT { DCHECK(task_runner);
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_remote_test.cc b/third_party/blink/renderer/platform/mojo/heap_mojo_remote_test.cc index 5af34d0..7e5635d 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_remote_test.cc +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_remote_test.cc
@@ -123,6 +123,38 @@ Persistent<RemoteOwner<Mode>> owner_; }; +template <HeapMojoWrapperMode Mode> +class HeapMojoRemoteDisconnectWithReasonHandlerBaseTest + : public TestSupportingGC { + public: + base::RunLoop& run_loop() { return run_loop_; } + bool& disconnected_with_reason() { return disconnected_with_reason_; } + + protected: + void SetUp() override { + CHECK(!disconnected_with_reason_); + context_ = MakeGarbageCollected<MockContext>(); + owner_ = MakeGarbageCollected<RemoteOwner<Mode>>(context_); + scoped_refptr<base::NullTaskRunner> null_task_runner = + base::MakeRefCounted<base::NullTaskRunner>(); + impl_.receiver().Bind( + owner_->remote().BindNewPipeAndPassReceiver(null_task_runner)); + impl_.receiver().set_disconnect_with_reason_handler(WTF::Bind( + [](HeapMojoRemoteDisconnectWithReasonHandlerBaseTest* remote_test, + const uint32_t custom_reason, const std::string& description) { + remote_test->run_loop().Quit(); + remote_test->disconnected_with_reason() = true; + }, + WTF::Unretained(this))); + } + + ServiceImpl impl_; + Persistent<MockContext> context_; + Persistent<RemoteOwner<Mode>> owner_; + base::RunLoop run_loop_; + bool disconnected_with_reason_ = false; +}; + } // namespace class HeapMojoRemoteGCWithContextObserverTest @@ -137,6 +169,12 @@ class HeapMojoRemoteDestroyContextWithoutContextObserverTest : public HeapMojoRemoteDestroyContextBaseTest< HeapMojoWrapperMode::kWithoutContextObserver> {}; +class HeapMojoRemoteDisconnectWithReasonHandlerWithContextObserverTest + : public HeapMojoRemoteDisconnectWithReasonHandlerBaseTest< + HeapMojoWrapperMode::kWithContextObserver> {}; +class HeapMojoRemoteDisconnectWithReasonHandlerWithoutContextObserverTest + : public HeapMojoRemoteDisconnectWithReasonHandlerBaseTest< + HeapMojoWrapperMode::kWithoutContextObserver> {}; // Make HeapMojoRemote with context observer garbage collected and check that // the connection is disconnected right after the marking phase. @@ -178,4 +216,28 @@ EXPECT_TRUE(owner_->remote().is_bound()); } +// Reset the remote with custom reason and check that the specified handler is +// fired. +TEST_F(HeapMojoRemoteDisconnectWithReasonHandlerWithContextObserverTest, + ResetWithReason) { + EXPECT_FALSE(disconnected_with_reason()); + const std::string message = "test message"; + const uint32_t reason = 0; + owner_->remote().ResetWithReason(reason, message); + run_loop().Run(); + EXPECT_TRUE(disconnected_with_reason()); +} + +// Reset the remote with custom reason and check that the specified handler is +// fired. +TEST_F(HeapMojoRemoteDisconnectWithReasonHandlerWithoutContextObserverTest, + ResetWithReason) { + EXPECT_FALSE(disconnected_with_reason()); + const std::string message = "test message"; + const uint32_t reason = 0; + owner_->remote().ResetWithReason(reason, message); + run_loop().Run(); + EXPECT_TRUE(disconnected_with_reason()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc index 2ad849e..95b6b93 100644 --- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc +++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc
@@ -16,6 +16,7 @@ #include "third_party/webrtc/api/video_codecs/video_encoder.h" #include "third_party/webrtc/common_video/h264/profile_level_id.h" #include "third_party/webrtc/media/base/codec.h" +#include "third_party/webrtc/media/base/vp9_profile.h" namespace blink { @@ -113,10 +114,28 @@ {cricket::kH264FmtpPacketizationMode, "1"}}; return format; } + if (profile.profile >= media::VP9PROFILE_MIN && profile.profile <= media::VP9PROFILE_MAX) { - return webrtc::SdpVideoFormat("VP9"); + webrtc::VP9Profile vp9_profile; + switch (profile.profile) { + case media::VP9PROFILE_PROFILE0: + vp9_profile = webrtc::VP9Profile::kProfile0; + break; + case media::VP9PROFILE_PROFILE2: + vp9_profile = webrtc::VP9Profile::kProfile2; + break; + default: + // Unsupported VP9 profiles (profile1 & profile3) in WebRTC. + return base::nullopt; + } + webrtc::SdpVideoFormat format("VP9"); + format.parameters = { + {webrtc::kVP9FmtpProfileId, + webrtc::VP9ProfileToString(vp9_profile)}}; + return format; } + return base::nullopt; } // namespace @@ -170,6 +189,7 @@ if (IsSameFormat(format, supported_formats.sdp_formats[i])) { encoder = std::make_unique<RTCVideoEncoder>( supported_formats.profiles[i], gpu_factories_); + break; } } } else {
diff --git a/third_party/blink/web_tests/FlagExpectations/composite-after-paint b/third_party/blink/web_tests/FlagExpectations/composite-after-paint index 437a57e..9f06cab0 100644 --- a/third_party/blink/web_tests/FlagExpectations/composite-after-paint +++ b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
@@ -90,7 +90,8 @@ paint/invalidation/media-audio-no-spurious-repaints.html [ Failure ] -crbug.com/940033 virtual/threaded-prefer-compositing/fast/scrolling/wheel-scrolling-over-custom-scrollbar.html [ Pass Failure ] +crbug.com/940033 virtual/threaded-prefer-compositing/fast/scrolling/mouse-scrolling-over-standard-scrollbar.html [ Failure ] +crbug.com/940033 virtual/threaded-prefer-compositing/fast/scrolling/wheel-scrolling-over-custom-scrollbar.html [ Failure ] # Missing compositing reasons http/tests/devtools/layers/layer-compositing-reasons.js [ Failure ] @@ -105,12 +106,5 @@ virtual/threaded/fast/scroll-snap/snaps-after-touchpad-scrolling.html [ Failure ] -# DCHECK(latched_scroll_type_.has_value()) in LayerTreeHostImpl::ScrollLatchedScroller(). -crbug.com/1041322 virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html [ Crash ] -crbug.com/1041322 virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html [ Crash ] -crbug.com/1041322 virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html [ Crash ] -crbug.com/1041322 virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html [ Crash ] -crbug.com/1041322 virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html [ Crash ] - compositing/gestures/gesture-tapHighlight-composited-img.html [ Pass Failure ] http/tests/images/image-decode-in-frame.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 7d350a1d..a76bb7f8 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -3151,6 +3151,9 @@ crbug.com/1067277 external/wpt/css/css-content/element-replacement-on-replaced-element.tentative.html [ Failure ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 [ Retina ] external/wpt/html/cross-origin-opener-policy/popup-coop-by-sw-from-coop.https.html [ Timeout ] +crbug.com/626703 [ Mac10.14 ] external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Timeout ] +crbug.com/626703 [ Win7 ] external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Timeout ] crbug.com/626703 [ Win10 ] external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Timeout ] crbug.com/626703 [ Win ] virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/css/css-text/line-break/line-break-normal-015a.xht [ Failure ]
diff --git a/third_party/blink/web_tests/css3/filters/fecomposite-non-zero-inoffset.html b/third_party/blink/web_tests/css3/filters/fecomposite-non-zero-inoffset.html deleted file mode 100644 index f5f41593..0000000 --- a/third_party/blink/web_tests/css3/filters/fecomposite-non-zero-inoffset.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<body> - <div style="filter: url('#filter'); width: 100px; height: 100px; padding: 1px;"> - <div style="background-color: red; width: 98px; height: 98px;"></div> - </div> - <svg width="0" height="0"> - <filter id="filter"> - <feFlood result="outlineColor" flood-color="green"/> - <feMorphology in="SourceAlpha" operator="dilate" radius="1"/> - <feComposite operator="in" in="outlineColor"/> - </filter> - </svg> -</body>
diff --git a/third_party/blink/web_tests/css3/filters/remove-filter-repaint.html b/third_party/blink/web_tests/css3/filters/remove-filter-repaint.html deleted file mode 100644 index 29aa711..0000000 --- a/third_party/blink/web_tests/css3/filters/remove-filter-repaint.html +++ /dev/null
@@ -1,62 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>filter-bug</title> - <style> - .backdrop { - position: absolute; - top: 0; - left: 0; - height: 100px; - width: 100px; - background-color: silver; - } - - .overlay { - position: absolute; - top: 50px; - left: 50px; - width: 400px; - height: 100px; - background: gray; - box-shadow: 0 0 4px black; - } - - .play { - font-size: 36pt; - background-color: navy; - color: white; - } - .play.changed { - filter: drop-shadow(black 0 0 5px); - } - .composited { - will-change: transform; - } - - </style> - <script> - if (window.testRunner) - testRunner.waitUntilDone(); - - function doTest() - { - requestAnimationFrame(function() { - -document.getElementById('play').classList.remove('changed'); - if (window.testRunner) - testRunner.notifyDone(); - }, 0); - } - - window.addEventListener('load', doTest, false); - </script> -</head> -<body> - <div class="composited backdrop"></div> - <div class="overlay"> - <span id="play" class="play changed">this should be - visible</span> - </div> -</body> -</html>
diff --git a/third_party/blink/web_tests/css3/flexbox/crash-removing-out-of-flow-child-expected.txt b/third_party/blink/web_tests/css3/flexbox/crash-removing-out-of-flow-child-expected.txt deleted file mode 100644 index 7b50d524..0000000 --- a/third_party/blink/web_tests/css3/flexbox/crash-removing-out-of-flow-child-expected.txt +++ /dev/null
@@ -1,3 +0,0 @@ -This test passes if it doesn't crash. - -This test passes if it doesn't crash.
diff --git a/third_party/blink/web_tests/css3/flexbox/relpos-with-scrollable-with-abspos-crash-expected.txt b/third_party/blink/web_tests/css3/flexbox/relpos-with-scrollable-with-abspos-crash-expected.txt deleted file mode 100644 index eeaa4147b..0000000 --- a/third_party/blink/web_tests/css3/flexbox/relpos-with-scrollable-with-abspos-crash-expected.txt +++ /dev/null
@@ -1,3 +0,0 @@ -PASS if no crash or assertion failure. - -xxxxxxxxxxxxxxxxxxxxxx
diff --git a/third_party/blink/web_tests/css3/flexbox/relpos-with-scrollable-with-abspos-crash.html b/third_party/blink/web_tests/css3/flexbox/relpos-with-scrollable-with-abspos-crash.html deleted file mode 100644 index 40fed23b..0000000 --- a/third_party/blink/web_tests/css3/flexbox/relpos-with-scrollable-with-abspos-crash.html +++ /dev/null
@@ -1,16 +0,0 @@ -<!DOCTYPE html> -<script> - if (window.testRunner) - testRunner.dumpAsText(); -</script> -<p>PASS if no crash or assertion failure.</p> -<div style="display:flex;"> - <div> - <div style="position:relative; width:5em;"> - <div style="overflow:auto;"> - <div>xxxxxxxxxxxxxxxxxxxxxx</div> - <div style="position:absolute;"></div> - </div> - </div> - </div> -</div>
diff --git a/third_party/blink/web_tests/css3/flexbox/stretch-table-child.html b/third_party/blink/web_tests/css3/flexbox/stretch-table-child.html deleted file mode 100644 index 7edae3af..0000000 --- a/third_party/blink/web_tests/css3/flexbox/stretch-table-child.html +++ /dev/null
@@ -1,39 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<style> -.container { - display: flex; - flex-direction: column; - height: 100px; - width: 50px; -} -.first { - flex: 1 1 auto; -} -.test { - flex: 0 0 auto; - background-color: green; - display: flex; -} -td { - padding: 23px; -} -</style> -</head> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/check-layout-th.js"></script> -<body onload="checkLayout('.test')"> -<div id=log></div> -<div class="container"> - <div class="first"> - </div> - <div class="test" data-expected-height=50> - <table> - <tr><td></td></tr> - </table> - </div> -</div> -</body> -</html>
diff --git a/third_party/blink/web_tests/css3/masking/clip-path-descendant-text-mutated.html b/third_party/blink/web_tests/css3/masking/clip-path-descendant-text-mutated.html deleted file mode 100644 index 327648f..0000000 --- a/third_party/blink/web_tests/css3/masking/clip-path-descendant-text-mutated.html +++ /dev/null
@@ -1,23 +0,0 @@ -<!DOCTYPE html> -<script src="../../resources/ahem.js"></script> -<script src="../../resources/run-after-layout-and-paint.js"></script> -<style> -#target { - width: 100px; - height: 100px; - background-color: green; - border-right: 100px solid red; - clip-path: url(#clip); -} -</style> -<div id="target"></div> -<svg> - <clipPath id="clip"> - <text id="text" y="80" font-family="Ahem" font-size="100">XX</text> - </clipPath> -</svg> -<script> -runAfterLayoutAndPaint(function() { - text.firstChild.data = 'X'; -}, true); -</script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json index 9d7cc2e..cee598b 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
@@ -37,6 +37,18 @@ {} ] ], + "css/css-flexbox/negative-flex-margins-crash.html": [ + [ + "css/css-flexbox/negative-flex-margins-crash.html", + {} + ] + ], + "css/css-flexbox/negative-flex-rounding-crash.html": [ + [ + "css/css-flexbox/negative-flex-rounding-crash.html", + {} + ] + ], "css/css-flexbox/padding-overflow-crash.html": [ [ "css/css-flexbox/padding-overflow-crash.html", @@ -55,6 +67,12 @@ {} ] ], + "css/css-grid/abspos/positioned-grid-items-crash.html": [ + [ + "css/css-grid/abspos/positioned-grid-items-crash.html", + {} + ] + ], "css/css-grid/subgrid/contain-strict-nested-subgrid-crash.html": [ [ "css/css-grid/subgrid/contain-strict-nested-subgrid-crash.html", @@ -6549,6 +6567,18 @@ {} ] ], + "orientation-event/motion/page-visibility-manual.https.html": [ + [ + "orientation-event/motion/page-visibility-manual.https.html", + {} + ] + ], + "orientation-event/orientation/page-visibility-manual.https.html": [ + [ + "orientation-event/orientation/page-visibility-manual.https.html", + {} + ] + ], "orientation-event/screen-upmost-manual.https.html": [ [ "orientation-event/screen-upmost-manual.https.html", @@ -97145,6 +97175,18 @@ {} ] ], + "css/css-will-change/will-change-abspos-cb-003.html": [ + [ + "css/css-will-change/will-change-abspos-cb-003.html", + [ + [ + "/css/css-will-change/will-change-abspos-cb-003-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-will-change/will-change-abspos-cb-dynamic-001.html": [ [ "css/css-will-change/will-change-abspos-cb-dynamic-001.html", @@ -97193,6 +97235,42 @@ {} ] ], + "css/css-will-change/will-change-fixedpos-cb-004.html": [ + [ + "css/css-will-change/will-change-fixedpos-cb-004.html", + [ + [ + "/css/css-will-change/will-change-fixedpos-cb-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-will-change/will-change-fixedpos-cb-005.html": [ + [ + "css/css-will-change/will-change-fixedpos-cb-005.html", + [ + [ + "/css/css-will-change/will-change-fixedpos-cb-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-will-change/will-change-fixedpos-cb-006.html": [ + [ + "css/css-will-change/will-change-fixedpos-cb-006.html", + [ + [ + "/css/css-will-change/will-change-fixedpos-cb-006-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-will-change/will-change-stacking-context-001.html": [ [ "css/css-will-change/will-change-stacking-context-001.html", @@ -97205,6 +97283,18 @@ {} ] ], + "css/css-will-change/will-change-stacking-context-002.html": [ + [ + "css/css-will-change/will-change-stacking-context-002.html", + [ + [ + "/css/css-will-change/will-change-stacking-context-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-will-change/will-change-transform-image.html": [ [ "css/css-will-change/will-change-transform-image.html", @@ -135365,6 +135455,12 @@ "client-hints/accept-ch-stickiness/resources/expect-client-hints-headers.html": [ [] ], + "client-hints/accept-ch-stickiness/resources/feature-policy-with-cross-origin-subresource.html": [ + [] + ], + "client-hints/accept-ch-stickiness/resources/feature-policy-with-cross-origin-subresource.html.headers": [ + [] + ], "client-hints/accept-ch-stickiness/resources/http-equiv-accept-ch.html": [ [] ], @@ -143510,6 +143606,9 @@ "css/css-flexbox/flexbox_wrap-reverse-ref.html": [ [] ], + "css/css-flexbox/flexitem-stretch-image-expected.txt": [ + [] + ], "css/css-flexbox/gap-001-lr-ref.html": [ [] ], @@ -149474,18 +149573,48 @@ "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003-ref.html": [ [] ], + "css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001-expected.txt": [ + [] + ], + "css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001-expected.txt": [ + [] + ], + "css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001-expected.txt": [ + [] + ], + "css/css-grid/grid-definition/grid-inline-support-repeat-001-expected.txt": [ + [] + ], + "css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001-expected.txt": [ + [] + ], "css/css-grid/grid-definition/grid-limits-001-expected.txt": [ [] ], + "css/css-grid/grid-definition/grid-support-flexible-lengths-001-expected.txt": [ + [] + ], + "css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001-expected.txt": [ + [] + ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-001-expected.txt": [ + [] + ], "css/css-grid/grid-definition/grid-support-named-grid-lines-002-ref.html": [ [] ], "css/css-grid/grid-definition/grid-support-named-grid-lines-003-ref.html": [ [] ], + "css/css-grid/grid-definition/grid-support-repeat-001-expected.txt": [ + [] + ], "css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html": [ [] ], + "css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001-expected.txt": [ + [] + ], "css/css-grid/grid-definition/grid-template-rows-fit-content-001-ref.html": [ [] ], @@ -149606,9 +149735,15 @@ "css/css-grid/parsing/grid-template-columns-computed-nogrid-expected.txt": [ [] ], + "css/css-grid/parsing/grid-template-columns-computed-withcontent-expected.txt": [ + [] + ], "css/css-grid/parsing/grid-template-rows-computed-nogrid-expected.txt": [ [] ], + "css/css-grid/parsing/grid-template-rows-computed-withcontent-expected.txt": [ + [] + ], "css/css-grid/parsing/grid-template-shorthand-valid-expected.txt": [ [] ], @@ -158150,6 +158285,9 @@ "css/css-will-change/will-change-abspos-cb-002-ref.html": [ [] ], + "css/css-will-change/will-change-abspos-cb-003-ref.html": [ + [] + ], "css/css-will-change/will-change-fixedpos-cb-001-ref.html": [ [] ], @@ -158159,9 +158297,21 @@ "css/css-will-change/will-change-fixedpos-cb-003-ref.html": [ [] ], + "css/css-will-change/will-change-fixedpos-cb-004-ref.html": [ + [] + ], + "css/css-will-change/will-change-fixedpos-cb-005-ref.html": [ + [] + ], + "css/css-will-change/will-change-fixedpos-cb-006-ref.html": [ + [] + ], "css/css-will-change/will-change-stacking-context-001-ref.html": [ [] ], + "css/css-will-change/will-change-stacking-context-002-ref.html": [ + [] + ], "css/css-will-change/will-change-transform-image-ref.html": [ [] ], @@ -160124,6 +160274,9 @@ "css/cssom/border-shorthand-serialization-expected.txt": [ [] ], + "css/cssom/cssstyledeclaration-custom-properties-expected.txt": [ + [] + ], "css/cssom/cssstyledeclaration-properties-expected.txt": [ [] ], @@ -163274,6 +163427,9 @@ "dom/nodes/Document-createProcessingInstruction.js": [ [] ], + "dom/nodes/DocumentFragment-getElementById-expected.txt": [ + [] + ], "dom/nodes/Element-closest-expected.txt": [ [] ], @@ -177512,12 +177668,18 @@ "orientation-event/OWNERS": [ [] ], + "orientation-event/README.md": [ + [] + ], "orientation-event/horizontal-surface-manual.https-expected.txt": [ [] ], "orientation-event/idlharness.https.window-expected.txt": [ [] ], + "orientation-event/resources/orientation-event-helpers.js": [ + [] + ], "orientation-sensor/AbsoluteOrientationSensor-disabled-by-feature-policy.https.html.headers": [ [] ], @@ -211955,6 +212117,14 @@ } ] ], + "client-hints/accept-ch-stickiness/cross-origin-subresource-with-feature-policy.https.html": [ + [ + "client-hints/accept-ch-stickiness/cross-origin-subresource-with-feature-policy.https.html", + { + "timeout": "long" + } + ] + ], "client-hints/accept-ch-stickiness/cross-origin-subresource.https.html": [ [ "client-hints/accept-ch-stickiness/cross-origin-subresource.https.html", @@ -219917,6 +220087,36 @@ {} ] ], + "css/css-cascade/revert-val-006.html": [ + [ + "css/css-cascade/revert-val-006.html", + {} + ] + ], + "css/css-cascade/revert-val-007.html": [ + [ + "css/css-cascade/revert-val-007.html", + {} + ] + ], + "css/css-cascade/revert-val-008.html": [ + [ + "css/css-cascade/revert-val-008.html", + {} + ] + ], + "css/css-cascade/revert-val-009.html": [ + [ + "css/css-cascade/revert-val-009.html", + {} + ] + ], + "css/css-cascade/revert-val-010.html": [ + [ + "css/css-cascade/revert-val-010.html", + {} + ] + ], "css/css-color-adjust/inheritance.html": [ [ "css/css-color-adjust/inheritance.html", @@ -224069,6 +224269,12 @@ {} ] ], + "css/css-grid/grid-tracks-stretched-with-different-flex-factors-sum.html": [ + [ + "css/css-grid/grid-tracks-stretched-with-different-flex-factors-sum.html", + {} + ] + ], "css/css-grid/inheritance.html": [ [ "css/css-grid/inheritance.html", @@ -236509,6 +236715,12 @@ {} ] ], + "css/cssom/cssstyledeclaration-custom-properties.html": [ + [ + "css/cssom/cssstyledeclaration-custom-properties.html", + {} + ] + ], "css/cssom/cssstyledeclaration-mutability.html": [ [ "css/cssom/cssstyledeclaration-mutability.html", @@ -291264,6 +291476,30 @@ {} ] ], + "orientation-event/device-orientation-events-of-detached-documents.https.html": [ + [ + "orientation-event/device-orientation-events-of-detached-documents.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/device-orientation-events-unavailable-on-insecure-origins.html": [ + [ + "orientation-event/device-orientation-events-unavailable-on-insecure-origins.html", + { + "testdriver": true + } + ] + ], + "orientation-event/device-orientation-on-secure-origin.https.html": [ + [ + "orientation-event/device-orientation-on-secure-origin.https.html", + { + "testdriver": true + } + ] + ], "orientation-event/devicemotionevent-init.https.html": [ [ "orientation-event/devicemotionevent-init.https.html", @@ -291299,12 +291535,150 @@ } ] ], + "orientation-event/motion/add-child-listener.https.html": [ + [ + "orientation-event/motion/add-child-listener.https.html", + {} + ] + ], + "orientation-event/motion/add-during-dispatch.https.html": [ + [ + "orientation-event/motion/add-during-dispatch.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/motion/add-listener-from-callback.https.html": [ + [ + "orientation-event/motion/add-listener-from-callback.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/motion/create-event.https.html": [ + [ + "orientation-event/motion/create-event.https.html", + {} + ] + ], + "orientation-event/motion/multiple-event-listeners.https.html": [ + [ + "orientation-event/motion/multiple-event-listeners.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/motion/null-values.https.html": [ + [ + "orientation-event/motion/null-values.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/motion/optional-event-properties.https.html": [ + [ + "orientation-event/motion/optional-event-properties.https.html", + {} + ] + ], + "orientation-event/motion/window-property.https.html": [ + [ + "orientation-event/motion/window-property.https.html", + {} + ] + ], "orientation-event/ondeviceorientationabsolute.https.html": [ [ "orientation-event/ondeviceorientationabsolute.https.html", {} ] ], + "orientation-event/orientation/absolute-fallback.https.html": [ + [ + "orientation-event/orientation/absolute-fallback.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/orientation/add-listener-from-callback.https.html": [ + [ + "orientation-event/orientation/add-listener-from-callback.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/orientation/basic-operation-absolute.https.html": [ + [ + "orientation-event/orientation/basic-operation-absolute.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/orientation/basic-operation.https.html": [ + [ + "orientation-event/orientation/basic-operation.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/orientation/create-event.https.html": [ + [ + "orientation-event/orientation/create-event.https.html", + {} + ] + ], + "orientation-event/orientation/multiple-event-listeners.https.html": [ + [ + "orientation-event/orientation/multiple-event-listeners.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/orientation/no-synchronous-events.https.html": [ + [ + "orientation-event/orientation/no-synchronous-events.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/orientation/null-values.https.html": [ + [ + "orientation-event/orientation/null-values.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/orientation/optional-event-properties.https.html": [ + [ + "orientation-event/orientation/optional-event-properties.https.html", + {} + ] + ], + "orientation-event/orientation/updates.https.html": [ + [ + "orientation-event/orientation/updates.https.html", + { + "testdriver": true + } + ] + ], + "orientation-event/orientation/window-property.https.html": [ + [ + "orientation-event/orientation/window-property.https.html", + {} + ] + ], "orientation-sensor/AbsoluteOrientationSensor-disabled-by-feature-policy.https.html": [ [ "orientation-sensor/AbsoluteOrientationSensor-disabled-by-feature-policy.https.html", @@ -294354,6 +294728,12 @@ {} ] ], + "preload/subresource-integrity-partial-image.html": [ + [ + "preload/subresource-integrity-partial-image.html", + {} + ] + ], "preload/subresource-integrity.html": [ [ "preload/subresource-integrity.html", @@ -353639,6 +354019,10 @@ "e05c8e3ef5bf853c04acc396166e0cd5a6a00b60", "testharness" ], + "client-hints/accept-ch-stickiness/cross-origin-subresource-with-feature-policy.https.html": [ + "3108c23faabfa254e3ebd0c12122e8e44e39e38b", + "testharness" + ], "client-hints/accept-ch-stickiness/cross-origin-subresource.https.html": [ "249ccb4a60d4756b1be34e2e324b29eae8e59370", "testharness" @@ -353703,6 +354087,14 @@ "cda1f81978d9a8dbc7dd12286d8885f16007b9e0", "support" ], + "client-hints/accept-ch-stickiness/resources/feature-policy-with-cross-origin-subresource.html": [ + "88d1ac826fe773b8c20a0e1fb00520c0192d7037", + "support" + ], + "client-hints/accept-ch-stickiness/resources/feature-policy-with-cross-origin-subresource.html.headers": [ + "cb6b0cfd13c291312d53b1105aed3f44c4c8cac8", + "support" + ], "client-hints/accept-ch-stickiness/resources/http-equiv-accept-ch.html": [ "05e18a44fb96665299ab79f037a7ca20180bf92a", "support" @@ -380923,6 +381315,26 @@ "7295605d4bb6e4ce875b57c0e58b7294422a0096", "testharness" ], + "css/css-cascade/revert-val-006.html": [ + "2b238f6d7e53b35cbdfe98c1fcac3625b9cfd72e", + "testharness" + ], + "css/css-cascade/revert-val-007.html": [ + "38078fcfa9ad2a064ead3a2e30db3d6790d265be", + "testharness" + ], + "css/css-cascade/revert-val-008.html": [ + "77cceae7a3f044c8d11b1616f9f54469f18d1aca", + "testharness" + ], + "css/css-cascade/revert-val-009.html": [ + "e9683e90f44a378f16fda177cf2b8cb64d530921", + "testharness" + ], + "css/css-cascade/revert-val-010.html": [ + "58449e9132b786a2f489a1517b1be3becadaddbf", + "testharness" + ], "css/css-cascade/unset-val-001.html": [ "c25b980a3b5734df4782ee5b6feb32d845f19e6d", "reftest" @@ -386587,8 +386999,12 @@ "fb50075cbdb0306c9308843da191caef5de9ab33", "testharness" ], + "css/css-flexbox/flexitem-stretch-image-expected.txt": [ + "60d63e037118e8283dbd0e3ede027374a93c6973", + "support" + ], "css/css-flexbox/flexitem-stretch-image.html": [ - "dd0f8d4f76f1f3dbaf67629315c8e39d73f01df3", + "ff3163f6f3d31684db6b22c603f081b6d7c94cfb", "testharness" ], "css/css-flexbox/flexitem-stretch-range.html": [ @@ -387351,6 +387767,14 @@ "e2a65a501ff5cd39113ccfa679ae95faeeb2fd7b", "reftest" ], + "css/css-flexbox/negative-flex-margins-crash.html": [ + "8bcc566c0f702ef6a8e581bb6790476c71f19bcb", + "crashtest" + ], + "css/css-flexbox/negative-flex-rounding-crash.html": [ + "ad69cc059ec705a9856f2c170827b9df18f1662c", + "crashtest" + ], "css/css-flexbox/negative-margins-001.html": [ "cd14ce0d4ede6f950ea6fd92176cfea662e45170", "reftest" @@ -397175,6 +397599,10 @@ "115abf49710b32454011d6c3981c88634a7c4aa5", "reftest" ], + "css/css-grid/abspos/positioned-grid-items-crash.html": [ + "228a6264df77fe82587a4116f231ff09537c8372", + "crashtest" + ], "css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html": [ "08779ec1e0f43e73ce7fe2c27e0714b9f85bc017", "testharness" @@ -398579,6 +399007,10 @@ "deda5656679c29cd8706762deedcf56e11d4b95d", "testharness" ], + "css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001-expected.txt": [ + "6cde225934ba789a6f573b7c1032c558c5e500f5", + "support" + ], "css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001.html": [ "42bbb43cf6ae229222375f3af822246c8bdb8d97", "testharness" @@ -398587,18 +399019,34 @@ "1573fa496f62335048050f6ee8168d31dce71329", "testharness" ], + "css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001-expected.txt": [ + "3baf0238697980355170a781cc8572084207182f", + "support" + ], "css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001.html": [ "cbcdc2c345400235f777974c05a041b13c332b1b", "testharness" ], + "css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001-expected.txt": [ + "e1fc6376d5c47527721e32633db29019236ef2c6", + "support" + ], "css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001.html": [ "a405f0557c94cdab2a0bd6803c38b1d790947adc", "testharness" ], + "css/css-grid/grid-definition/grid-inline-support-repeat-001-expected.txt": [ + "f55955dec6319ff42e3ad358fdcf0ecdf7b1890e", + "support" + ], "css/css-grid/grid-definition/grid-inline-support-repeat-001.html": [ "67a0c6611223f1f610ee575b0dc230027e3105c9", "testharness" ], + "css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001-expected.txt": [ + "c9eac7bd66ee5edb9fe7216958ed607313d0c4e5", + "support" + ], "css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html": [ "4b1390687dcdb07399b88dad5c93adbd908067e4", "testharness" @@ -398635,6 +399083,10 @@ "476415e8dfe679340b53b8a3400191d8c8210916", "testharness" ], + "css/css-grid/grid-definition/grid-support-flexible-lengths-001-expected.txt": [ + "6cde225934ba789a6f573b7c1032c558c5e500f5", + "support" + ], "css/css-grid/grid-definition/grid-support-flexible-lengths-001.html": [ "db9488af25876a439d20b3a93de6be66a2729d43", "testharness" @@ -398643,10 +399095,18 @@ "da29040b31b9780b34345a0173a4b7db5159a2df", "testharness" ], + "css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001-expected.txt": [ + "3baf0238697980355170a781cc8572084207182f", + "support" + ], "css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001.html": [ "cb0dbffe1614e286d2b179b75dd0aaf3f195cd98", "testharness" ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-001-expected.txt": [ + "e1fc6376d5c47527721e32633db29019236ef2c6", + "support" + ], "css/css-grid/grid-definition/grid-support-named-grid-lines-001.html": [ "5357855b0474b8036f72de77ead519104ae1fb3d", "testharness" @@ -398667,6 +399127,10 @@ "c2c722485f1f9b0c0667a317649e5817ecdefb34", "reftest" ], + "css/css-grid/grid-definition/grid-support-repeat-001-expected.txt": [ + "f55955dec6319ff42e3ad358fdcf0ecdf7b1890e", + "support" + ], "css/css-grid/grid-definition/grid-support-repeat-001.html": [ "54d230cca9d2be3509d7af79c83eb213075d14de", "testharness" @@ -398683,6 +399147,10 @@ "83b53db39b154dc8001dbef809aeb0eff7774c2a", "reftest" ], + "css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001-expected.txt": [ + "c9eac7bd66ee5edb9fe7216958ed607313d0c4e5", + "support" + ], "css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001.html": [ "df91cebf63ee0a251e1c8da56567f7684bf4b1f9", "testharness" @@ -399356,7 +399824,7 @@ "reftest" ], "css/css-grid/grid-layout-properties-expected.txt": [ - "591d959dd6a0a575e255b60118518de2ad5de110", + "b669306fd5142dc8a9dcb1ec687f223d632acc4d", "support" ], "css/css-grid/grid-layout-properties.html": [ @@ -399591,6 +400059,10 @@ "0592f6d2ce582c3c89b9d7f5278eed9458531c3c", "support" ], + "css/css-grid/grid-tracks-stretched-with-different-flex-factors-sum.html": [ + "f2c1d5e95a2df428432f30fc651b4bf06ae15322", + "testharness" + ], "css/css-grid/implicit-grids/grid-support-grid-auto-columns-rows-001.html": [ "e61ced340c610401448bdc0c636a835708fa80b9", "reftest" @@ -399811,6 +400283,10 @@ "11b0393a676c7f18ede6485fbb9dab7cf1d98067", "testharness" ], + "css/css-grid/parsing/grid-template-columns-computed-withcontent-expected.txt": [ + "5640134a6e9eec8ebb48e3479af0c70d49722f6f", + "support" + ], "css/css-grid/parsing/grid-template-columns-computed-withcontent.html": [ "ed67f03f6c226ad32370b76a36f431e4636b463a", "testharness" @@ -399843,6 +400319,10 @@ "057a7fa0615fae3797939aa77c762b8335a90f2b", "testharness" ], + "css/css-grid/parsing/grid-template-rows-computed-withcontent-expected.txt": [ + "25a078e29bc7e95d3b349e463220ce90ec656616", + "support" + ], "css/css-grid/parsing/grid-template-rows-computed-withcontent.html": [ "1e85f16d9338a5b74bd54be79e42a4007ffd715b", "testharness" @@ -408556,7 +409036,7 @@ "testharness" ], "css/css-properties-values-api/registered-property-revert.html": [ - "3d0473ea4397fab0440355a11eb0bff941a50323", + "33c395d2c2f6f5f9ca868963b8fb3c4d7f593d28", "testharness" ], "css/css-properties-values-api/resources/utils.js": [ @@ -433651,6 +434131,14 @@ "537f671cdce8321fe81f1281a3faa5b5ecbe64db", "reftest" ], + "css/css-will-change/will-change-abspos-cb-003-ref.html": [ + "9dfc24c526bc2decc452a73a0065b5ae39faf5e6", + "support" + ], + "css/css-will-change/will-change-abspos-cb-003.html": [ + "d5da92db4f34a977d6165aea6690d4d315b77fdb", + "reftest" + ], "css/css-will-change/will-change-abspos-cb-dynamic-001.html": [ "d2503256bcfe2336068914fb780463d4987608b5", "reftest" @@ -433679,6 +434167,30 @@ "e7dcf2c880deca3402a03af201e14b4a95bca307", "reftest" ], + "css/css-will-change/will-change-fixedpos-cb-004-ref.html": [ + "9dfc24c526bc2decc452a73a0065b5ae39faf5e6", + "support" + ], + "css/css-will-change/will-change-fixedpos-cb-004.html": [ + "7bc5d9233625809f546c81920457f62db93ce319", + "reftest" + ], + "css/css-will-change/will-change-fixedpos-cb-005-ref.html": [ + "7823c16075e133cf57731d196cee180d9a03cae4", + "support" + ], + "css/css-will-change/will-change-fixedpos-cb-005.html": [ + "7cd88bd37780383abae6fc4782946a48466b0631", + "reftest" + ], + "css/css-will-change/will-change-fixedpos-cb-006-ref.html": [ + "05957327c331a953cc907eeb5ffd2ba117f6f227", + "support" + ], + "css/css-will-change/will-change-fixedpos-cb-006.html": [ + "ec9eaa409f47fc6a6ad0497e1a9d2dc81b1b177a", + "reftest" + ], "css/css-will-change/will-change-inherit-dynamic.html": [ "b01844aea5c66eb2f4d0e7698ab9032d8ddb1079", "testharness" @@ -433691,6 +434203,14 @@ "9720953205b1cd2863649f2b69e6e01b5107acb2", "reftest" ], + "css/css-will-change/will-change-stacking-context-002-ref.html": [ + "38138ebcac3d73796e00173f6a84ba7edaa17cd2", + "support" + ], + "css/css-will-change/will-change-stacking-context-002.html": [ + "1cda23b9bcfc45c4632f810096ff837084df20d0", + "reftest" + ], "css/css-will-change/will-change-transform-image-ref.html": [ "d42d5b7fea22d3d2bc2abf782b1efc78f261f69e", "support" @@ -441316,7 +441836,15 @@ "testharness" ], "css/cssom/cssstyledeclaration-csstext.html": [ - "30d9bd87bde562a827a367241497fdbc34360a9f", + "afd54263bfe0ddd6325a82e0c47f663015dbf67c", + "testharness" + ], + "css/cssom/cssstyledeclaration-custom-properties-expected.txt": [ + "d9072d744017077a242ccc2624ce42bd6e5b79e7", + "support" + ], + "css/cssom/cssstyledeclaration-custom-properties.html": [ + "92cf2c847dceda660ebedd2d8ae798e33b3b1d3b", "testharness" ], "css/cssom/cssstyledeclaration-mutability.html": [ @@ -452835,6 +453363,10 @@ "e97a7c483605cc111a429564fa193cc36eb8d07a", "testharness" ], + "dom/nodes/DocumentFragment-getElementById-expected.txt": [ + "1046305df497f8b2b5c93f68a70920b0d1cc6325", + "support" + ], "dom/nodes/DocumentFragment-getElementById.html": [ "ce0d302c12b5c4bd07ec8f4aee675b2060f4dc72", "testharness" @@ -462180,7 +462712,7 @@ "testharness" ], "generic-sensor/resources/generic-sensor-helpers.js": [ - "ad11e58c7175a6add05c39cbab6123ad822b9515", + "aff6d172d46c960e72b180a1f9784776f9b55521", "support" ], "generic-sensor/resources/iframe_sensor_handler.html": [ @@ -478476,7 +479008,7 @@ "testharness" ], "html/semantics/forms/the-label-element/clicking-interactive-content.html": [ - "60a80fad9d2aebf284e252949fba7b2bb15af134", + "c448df0a38073019112f7f805904a6ec3bd6ef20", "testharness" ], "html/semantics/forms/the-label-element/clicking-noninteractive-labelable-content.html": [ @@ -478484,7 +479016,7 @@ "testharness" ], "html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html": [ - "233168f5664cf972ad579ae4ccba7f674c965d25", + "be74ed68330c1f97069e05ed70a2e4908ef6f3c2", "testharness" ], "html/semantics/forms/the-label-element/forward-focus-to-associated-element.html": [ @@ -487172,7 +487704,7 @@ "testharness" ], "lint.whitelist": [ - "bd5a5d5c172161beac501f42bd50dcaafd552019", + "526d6b765bd3200f12380f3e526b1c403d821a6e", "support" ], "loading/preloader-css-import-no-quote.tentative.html": [ @@ -498379,6 +498911,22 @@ "243df98c09e6bdd29f814acaafa59f05cd293644", "support" ], + "orientation-event/README.md": [ + "14ea2f51173ccb61e02b0e5f2462dd152b11256e", + "support" + ], + "orientation-event/device-orientation-events-of-detached-documents.https.html": [ + "c7ad5ecaefe31d713e03a26a609bc7fcd9d4051a", + "testharness" + ], + "orientation-event/device-orientation-events-unavailable-on-insecure-origins.html": [ + "e931c8d60378663ff5d272c61bf34dc1c48d0327", + "testharness" + ], + "orientation-event/device-orientation-on-secure-origin.https.html": [ + "f72a568530609d1386c38060eed352b3790b1420", + "testharness" + ], "orientation-event/devicemotionevent-init.https.html": [ "90563d8bbaea35f05bbe72df5acbae199fa4e02a", "testharness" @@ -498411,10 +498959,98 @@ "55cfed9276b480d7f70c616fa8d815f6ec925d66", "testharness" ], + "orientation-event/motion/add-child-listener.https.html": [ + "c2fb41b591a7cb344198ee9bc80fc2ff14fbdf36", + "testharness" + ], + "orientation-event/motion/add-during-dispatch.https.html": [ + "d40b557a2d6f09f2fa04291ddbca859dc4a3d1d1", + "testharness" + ], + "orientation-event/motion/add-listener-from-callback.https.html": [ + "30a4735d6854b2c025b455adcc13b819f68b29b4", + "testharness" + ], + "orientation-event/motion/create-event.https.html": [ + "7efcf40155b15c3e2821918df191359f789f9997", + "testharness" + ], + "orientation-event/motion/multiple-event-listeners.https.html": [ + "ad851eec2919ed04b23c93a43221bcb5acefc023", + "testharness" + ], + "orientation-event/motion/null-values.https.html": [ + "4da64c0c9e85b87505c78b136435b42f546bc995", + "testharness" + ], + "orientation-event/motion/optional-event-properties.https.html": [ + "0a73721cb9e5c6dabd6eedac164cc1e7f9a56347", + "testharness" + ], + "orientation-event/motion/page-visibility-manual.https.html": [ + "37e48ce9791eb952c7375ee0e6cbd71727e54aa7", + "manual" + ], + "orientation-event/motion/window-property.https.html": [ + "56e55dd9ba4718741862bd111671afe7b7b17ff8", + "testharness" + ], "orientation-event/ondeviceorientationabsolute.https.html": [ "73ce97ab5c1fd7220fb65e53fb51e0bfa86beb28", "testharness" ], + "orientation-event/orientation/absolute-fallback.https.html": [ + "de0770a9f75c0ad92c503f636f4cf9c8105fc465", + "testharness" + ], + "orientation-event/orientation/add-listener-from-callback.https.html": [ + "827801b2663bed131baf7c72d62d5911859f2a72", + "testharness" + ], + "orientation-event/orientation/basic-operation-absolute.https.html": [ + "bc35e1498f45e0fadc41ccb0948abf012414cd27", + "testharness" + ], + "orientation-event/orientation/basic-operation.https.html": [ + "eb57d141b35bb4b9e64b7b3dc2efc6ec32973da4", + "testharness" + ], + "orientation-event/orientation/create-event.https.html": [ + "f1e5c0f8ad25ab907473906d6eb782fc178200ab", + "testharness" + ], + "orientation-event/orientation/multiple-event-listeners.https.html": [ + "3a8add23c947cba88fc66a1fabf3e955f5578fd5", + "testharness" + ], + "orientation-event/orientation/no-synchronous-events.https.html": [ + "e5d7621123ff5b7558ceb45df0a67b263775e1c9", + "testharness" + ], + "orientation-event/orientation/null-values.https.html": [ + "df18f35c6cacf9fc1e090c8ff071a0fb1175ef07", + "testharness" + ], + "orientation-event/orientation/optional-event-properties.https.html": [ + "150ce5ca1d22306f4b5e952f1249f8b1f044e401", + "testharness" + ], + "orientation-event/orientation/page-visibility-manual.https.html": [ + "033f17602b88343313afbd1958805a628a7b3112", + "manual" + ], + "orientation-event/orientation/updates.https.html": [ + "09472e6b419e8a2f772ae9d399b15b3352c2d868", + "testharness" + ], + "orientation-event/orientation/window-property.https.html": [ + "200efc19487b4a389ce52186e62f50be813e9cd1", + "testharness" + ], + "orientation-event/resources/orientation-event-helpers.js": [ + "528dfa9a7a057324b07cfda37dd454b48c43ff0e", + "support" + ], "orientation-event/screen-upmost-manual.https.html": [ "560c3e3a1f6bde251197585843263dcd1fc8ed6d", "manual" @@ -501147,6 +501783,10 @@ "fc8970bae9b42146cd19fb0ea36cb3f832e9bdd7", "support" ], + "preload/subresource-integrity-partial-image.html": [ + "3abc8399219688f075deec3bf1551188d29f07b9", + "testharness" + ], "preload/subresource-integrity.html": [ "7a35e3bc85eb454f847d1087eaf00cb73b891fb4", "testharness" @@ -508128,7 +508768,7 @@ "support" ], "resources/chromium/generic_sensor_mocks.js": [ - "8f134202ff8bd91e47608214e029fb497e7207c4", + "3ee748c9730bb99f1c51af4d82d62c4316a2edab", "support" ], "resources/chromium/generic_sensor_mocks.js.headers": [ @@ -528192,7 +528832,7 @@ "support" ], "webdriver/tests/add_cookie/add.py": [ - "c1a886aafa71757d5efccb3953d2c30a96a14a34", + "30804c1dd8ec89f573d3af657de27fe1fe5d9597", "wdspec" ], "webdriver/tests/add_cookie/user_prompts.py": [ @@ -528372,7 +529012,7 @@ "support" ], "webdriver/tests/execute_async_script/collections.py": [ - "14848da7e2966939c1efb75eb2b66d389f0b3d38", + "484a247cffd9a12acd8024f48fa3db7de59db8d3", "wdspec" ], "webdriver/tests/execute_async_script/execute_async.py": [ @@ -528396,7 +529036,7 @@ "support" ], "webdriver/tests/execute_script/collections.py": [ - "f939713c8064d5826e4439acc6b1803ac0a25950", + "be0b3a018c505dc26bb2b44969617a9b9daa0793", "wdspec" ], "webdriver/tests/execute_script/cyclic.py": [ @@ -528504,7 +529144,7 @@ "support" ], "webdriver/tests/get_alert_text/get.py": [ - "d6fdda2d1ed08ecceb5863d78ce915c19d4846fb", + "ad0058e0326454147c3b7202daea39864159fd46", "wdspec" ], "webdriver/tests/get_current_url/__init__.py": [ @@ -528512,7 +529152,7 @@ "support" ], "webdriver/tests/get_current_url/get.py": [ - "39c28c612161e30b114298c7d5eed5ccd60d78d4", + "c22e3d410c350248f5eb109e2ab332747e64a453", "wdspec" ], "webdriver/tests/get_current_url/user_prompts.py": [ @@ -528596,7 +529236,7 @@ "support" ], "webdriver/tests/get_named_cookie/get.py": [ - "9ea29c8994eb471882ae0ce68aa48b854ba35b99", + "1fd5f9f144969419571ab1193e314670925d1fa8", "wdspec" ], "webdriver/tests/get_named_cookie/user_prompts.py": [ @@ -528756,11 +529396,11 @@ "support" ], "webdriver/tests/new_session/create_alwaysMatch.py": [ - "097764e4a999f1def552c5f21fefda3508623385", + "a4cc9efc02e2a9c61fb8a79eecd5dcff49ca21a6", "wdspec" ], "webdriver/tests/new_session/create_firstMatch.py": [ - "f00f6042b085dc09876f67ae650ff62ceb3eb76a", + "ec671530f79692c04135ec441426f0044a72e8bc", "wdspec" ], "webdriver/tests/new_session/default_values.py": [ @@ -528876,7 +529516,7 @@ "support" ], "webdriver/tests/perform_actions/support/keys.py": [ - "d4072f5a3f33d8422825e1fdc4f017ed7d79993b", + "26825f04148befabc9a7b6ae71f1d8313a437e38", "support" ], "webdriver/tests/perform_actions/support/mouse.py": [ @@ -528980,7 +529620,7 @@ "support" ], "webdriver/tests/status/status.py": [ - "f0df16a1ee17d22e6293af049876810bb4073929", + "1f0f1bc4fe7746f34080cc537701020e4c5b2292", "wdspec" ], "webdriver/tests/support/__init__.py": [ @@ -528988,11 +529628,11 @@ "support" ], "webdriver/tests/support/asserts.py": [ - "f65137463b48f94fd0c5f2383b1a7c35bcd1de54", + "5bd7f5b38e7a344fb2a1f7c40090fb5edd28c4d4", "support" ], "webdriver/tests/support/authentication.py": [ - "6f880f3c85165295bf9e98aa4e4adba2eca88cbd", + "1e88a9e730d0805f8e6562a2dae7829b4baa349c", "support" ], "webdriver/tests/support/defaults.py": [ @@ -529000,7 +529640,7 @@ "support" ], "webdriver/tests/support/fixtures.py": [ - "ab2aaf4e75d96492d9c6419ab11d567205652b8f", + "80ccfddf3d15ad739f7eca6a77fac79e2dcdcaef", "support" ], "webdriver/tests/support/helpers.py": [ @@ -529008,15 +529648,15 @@ "support" ], "webdriver/tests/support/http_request.py": [ - "5e46d97017e14ba009d4d1ed6d62bb5012f48d15", + "895d1319ac0ac8b9a63defcb73f303c4a31e80bd", "support" ], "webdriver/tests/support/image.py": [ - "81dd933943f78b4bad69967c26729b70b992acb6", + "6149ccccbe3252e5c1c2bc37ba3dd3103ffbf9b6", "support" ], "webdriver/tests/support/inline.py": [ - "b65b9cb8b11d27ee4c947a5c2ba5b59cd3853c78", + "15bc26e54c68d4ce7c76133f597f4da50eb2e298", "support" ], "webdriver/tests/support/merge_dictionaries.py": [ @@ -529032,11 +529672,11 @@ "support" ], "webdriver/tests/switch_to_frame/cross_origin.py": [ - "4425a3ab901fef0effb2fc94ca3611e57f2ba51c", + "905f1eb56dce07ea82e0de7c5755e2e1b50ed152", "wdspec" ], "webdriver/tests/switch_to_frame/switch.py": [ - "67b855a96d963ab03efa9495052767ec033b346f", + "f9b0e6fc1fcd16c9f9e66b05149930f6ee0ae346", "wdspec" ], "webdriver/tests/switch_to_parent_frame/__init__.py": [
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-006.html b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-006.html new file mode 100644 index 0000000..2b238f6d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-006.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>CSS Cascade: 'revert' keyword in keyframe animations</title> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#default"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + @keyframes test { + from { margin-top: 0px; } + 50% { margin-top: revert; } + to { margin-top: 0px; } + } + #h1 { + margin-top: 0px; + animation: test linear 1000s -500s; + } +</style> +<h1 id=h1></h1> +<h1 id=ref></h1> +<script> + test(function() { + let actual = getComputedStyle(h1).marginTop; + let expected = getComputedStyle(ref).marginTop; + // This test assumes that the UA style sheet sets a non-0px value on + // <h1> elements: + assert_not_equals(expected, '0px'); + assert_equals(actual, expected); + }, 'The revert keyword works with @keyframes'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-007.html b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-007.html new file mode 100644 index 0000000..38078fcf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-007.html
@@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>CSS Cascade: 'revert' in keyframe animations on identical elements</title> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#default"> +<link rel="help" href="https://crbug.com/1065387"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + @keyframes test { + from { margin-top: revert; } + to { margin-top: 100px; } + } + .anim { + margin-top: 0px; + animation: test linear 1s paused; + } +</style> +<h1 class="anim"></h1> +<h1 class="anim"></h1> +<h1 class="anim"></h1> +<h1 id=ref></h1> +<script> + test(function() { + // This querySelectorAll includes #ref, but that's OK. + let targets = document.querySelectorAll('h1'); + for (let t of targets) { + let actual = getComputedStyle(t).marginTop; + let expected = getComputedStyle(ref).marginTop; + // This test assumes that the UA style sheet sets a non-0px value on + // <h1> elements: + assert_not_equals(expected, '0px'); + assert_equals(actual, expected); + } + }, 'A @keyframe animation with revert works when applied to multiple identical elements'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-008.html b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-008.html new file mode 100644 index 0000000..77cceae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-008.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<title>CSS Cascade: 'revert' in final keyframe of web animation</title> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#default"> +<link rel="help" href="https://crbug.com/1065387"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<h1 id=h1></h1> +<h1 id=ref></h1> +<script> + test(function() { + let expected_lower = parseInt(getComputedStyle(ref).marginTop); + let expected_upper = expected_lower * 2; + + h1.animate([ + { marginTop: `${expected_lower * 4}px` }, + { marginTop: `${expected_lower * 3}px` }, + { marginTop: `${expected_lower * 2}px` }, + { marginTop: 'revert' }, + ], { + duration: 4000, + delay: -3500, + }).pause(); + + let actual = parseInt(getComputedStyle(h1).marginTop); + + // This test assumes that the UA style sheet sets a non-0px value on + // <h1> elements: + assert_not_equals(expected_lower, 0); + assert_not_equals(expected_upper, 0); + assert_between_exclusive(actual, expected_lower, expected_upper); + }, 'The revert keyword works in the final frame of a web animation'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-009.html b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-009.html new file mode 100644 index 0000000..e9683e9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-009.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<title>CSS Cascade: 'revert' in implicit keyframes</title> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#default"> +<link rel="help" href="https://crbug.com/1065387"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<h1 id=h1></h1> +<h1 id=ref></h1> +<script> + test(function() { + let expected_lower = parseInt(getComputedStyle(ref).marginTop); + let expected_upper = expected_lower * 2; + h1.style = `margin-top: ${expected_lower * 1000}px; margin-top: revert;`; + + h1.animate([ + { marginTop: `${expected_upper}px` }, + ], { + duration: 1000, + delay: -500, + }).pause(); + + let actual = parseInt(getComputedStyle(h1).marginTop); + + // This test assumes that the UA style sheet sets a non-0px value on + // <h1> elements: + assert_not_equals(expected_lower, 0); + assert_not_equals(expected_upper, 0); + assert_between_exclusive(actual, expected_lower, expected_upper); + }, 'The revert keyword works in implicit keyframes'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-010.html b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-010.html new file mode 100644 index 0000000..58449e9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/revert-val-010.html
@@ -0,0 +1,36 @@ +<!DOCTYPE html> +<title>CSS Cascade: 'revert' appearing in setKeyframes</title> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#default"> +<link rel="help" href="https://drafts.csswg.org/web-animations-1/#dom-keyframeeffect-setkeyframes"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<h1 id=h1></h1> +<script> + test(function() { + let original = parseInt(getComputedStyle(h1).marginTop); + + // This test assumes that the UA style sheet sets a non-0px value on + // <h1> elements: + assert_not_equals(original, 0); + + let animation = h1.animate([ + { marginTop: `${original*4}px` }, + { marginTop: `${original*8}px` }, + ], { + duration: 1000000, + delay: -500000, + easing: 'steps(2, end)' + }); + + let animated = parseInt(getComputedStyle(h1).marginTop); + assert_equals(animated, original*6); + + animation.effect.setKeyframes([ + { marginTop: 'revert' }, + { marginTop: `${original*3}px` }, + ]); + + let animated_revert = parseInt(getComputedStyle(h1).marginTop); + assert_equals(animated_revert, original*2); + }, 'The revert works when appearing in setKeyframes'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexitem-stretch-image-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexitem-stretch-image-expected.txt new file mode 100644 index 0000000..60d63e0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexitem-stretch-image-expected.txt
@@ -0,0 +1,9 @@ +This is a testharness.js-based test. +FAIL .flexbox 1 assert_equals: +<div class="flexbox"> + <img data-expected-display="block" data-expected-width="345" data-expected-height="345" style="flex: 1 0 auto;" src="support/100x100-blue.png"> + <img data-expected-display="block" data-expected-width="255" data-expected-height="345" style="flex: 1 0 auto;" src="support/10x10-green.png"> +</div> +height expected 345 but got 100 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexitem-stretch-image.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexitem-stretch-image.html index dd0f8d4..ff3163f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexitem-stretch-image.html +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexitem-stretch-image.html
@@ -28,8 +28,8 @@ <div id=log></div> <div class="flexbox"> - <img data-expected-display="block" data-expected-width="345" style="flex: 1 0 auto;" src="support/100x100-blue.png"> - <img data-expected-display="block" data-expected-width="255" data-expected-height="100" style="flex: 1 0 auto;" src="support/10x10-green.png"> + <img data-expected-display="block" data-expected-width="345" data-expected-height="345" style="flex: 1 0 auto;" src="support/100x100-blue.png"> + <img data-expected-display="block" data-expected-width="255" data-expected-height="345" style="flex: 1 0 auto;" src="support/10x10-green.png"> </div> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/position-relative-with-scrollable-with-abspos-crash.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/position-relative-with-scrollable-with-abspos-crash.html new file mode 100644 index 0000000..f0699f2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/position-relative-with-scrollable-with-abspos-crash.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<title>CSS Flexbox: Crash for flex box with relpos with scrollable with abspos</title> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@opera.com"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-container"> +<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#scrollable-overflow"> +<link rel="issue" href="https://crbug.com/498969"> +<meta name="assert" content="Check that crash doesn't happen in flex box with descendents that include relpos, overflow:auto scrollbars, and abspos."> + +<div style="display:flex;"> + <div> + <div style="position:relative; width:5em;"> + <div style="overflow:auto;"> + <div>xxxxxxxxxxxxxxxxxxxxxx</div> + <div style="position:absolute;"></div> + </div> + </div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/table-as-item-cross-size.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/table-as-item-cross-size.html new file mode 100644 index 0000000..ba788bdd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/table-as-item-cross-size.html
@@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html> +<head> +<title>CSS Flexbox: Correct cross size of Table with 'align-self: stretch'</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#algo-stretch"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-direction-property"> +<meta name="assert" content="This test ensures that flexbox computes a correct cross size of a <table> flex item with align-self: stretch."> +<style> +.container { + display: flex; + flex-direction: column; + height: 100px; + width: 50px; +} +.first { + flex: 1 1 auto; + background-color: blue; +} +.test { + flex: 0 0 auto; + background-color: green; + display: flex; +} +td { + padding: 23px; +} +</style> +</head> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.test')"> +<div id=log></div> +<div class="container"> + <div class="first"> + </div> + <!-- This wrapper div is a row flexbox. It should get a height of 50px, matching the height + of the inner table. In particular, it should not be 0 on the basis that tables don't + have an intrinsic block-size. --> + <div class="test" data-expected-height=50> + <table> + <tr><td></td></tr> + </table> + </div> +</div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001-expected.txt new file mode 100644 index 0000000..6cde225 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001-expected.txt
@@ -0,0 +1,66 @@ +This is a testharness.js-based test. +Found 62 tests; 54 PASS, 8 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS 'emptyGrid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr; +PASS 'grid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr; +PASS 'emptyGrid' with: grid-template-columns: 2fr; and grid-template-rows: 2fr; +PASS 'grid' with: grid-template-columns: 2fr; and grid-template-rows: 2fr; +PASS 'emptyGrid' with: grid-template-columns: 10fr; and grid-template-rows: 10fr; +PASS 'grid' with: grid-template-columns: 10fr; and grid-template-rows: 10fr; +PASS 'emptyGrid' with: grid-template-columns: 0.5fr; and grid-template-rows: 0.5fr; +PASS 'grid' with: grid-template-columns: 0.5fr; and grid-template-rows: 0.5fr; +PASS 'emptyGrid' with: grid-template-columns: .5fr; and grid-template-rows: .5fr; +PASS 'grid' with: grid-template-columns: .5fr; and grid-template-rows: .5fr; +PASS 'emptyGrid' with: grid-template-columns: minmax(100px, 1fr); and grid-template-rows: minmax(100px, 1fr); +PASS 'grid' with: grid-template-columns: minmax(100px, 1fr); and grid-template-rows: minmax(100px, 1fr); +PASS 'emptyGrid' with: grid-template-columns: minmax(1fr, 1fr); and grid-template-rows: minmax(1fr, 1fr); +PASS 'grid' with: grid-template-columns: minmax(1fr, 1fr); and grid-template-rows: minmax(1fr, 1fr); +PASS 'emptyGrid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr; +PASS 'grid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr; +PASS 'emptyGrid' with: grid-template-columns: 0.25fr 0.75fr; and grid-template-rows: 0.25fr 0.75fr; +PASS 'grid' with: grid-template-columns: 0.25fr 0.75fr; and grid-template-rows: 0.25fr 0.75fr; +PASS 'emptyGrid' with: grid-template-columns: 1fr 2fr 1fr; and grid-template-rows: 1fr 2fr 1fr; +PASS 'grid' with: grid-template-columns: 1fr 2fr 1fr; and grid-template-rows: 1fr 2fr 1fr; +PASS 'emptyGrid' with: grid-template-columns: auto 1fr 4fr 3fr 2fr; and grid-template-rows: auto 1fr 4fr 3fr 2fr; +PASS 'grid' with: grid-template-columns: auto 1fr 4fr 3fr 2fr; and grid-template-rows: auto 1fr 4fr 3fr 2fr; +PASS 'emptyGrid' with: grid-template-columns: 1fr 4fr 100px 3fr 2fr; and grid-template-rows: 1fr 4fr 100px 3fr 2fr; +PASS 'grid' with: grid-template-columns: 1fr 4fr 100px 3fr 2fr; and grid-template-rows: 1fr 4fr 100px 3fr 2fr; +PASS 'emptyGrid' with: grid-template-columns: auto 1fr; and grid-template-rows: auto 1fr; +PASS 'grid' with: grid-template-columns: auto 1fr; and grid-template-rows: auto 1fr; +PASS 'emptyGrid' with: grid-template-columns: max-content 1fr; and grid-template-rows: max-content 1fr; +PASS 'grid' with: grid-template-columns: max-content 1fr; and grid-template-rows: max-content 1fr; +PASS 'emptyGrid' with: grid-template-columns: min-content 1fr; and grid-template-rows: min-content 1fr; +PASS 'grid' with: grid-template-columns: min-content 1fr; and grid-template-rows: min-content 1fr; +PASS 'emptyGrid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto; +PASS 'grid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto; +PASS 'emptyGrid' with: grid-template-columns: 300px 1fr; and grid-template-rows: 200px 1fr; +PASS 'grid' with: grid-template-columns: 300px 1fr; and grid-template-rows: 200px 1fr; +PASS 'emptyGrid' with: grid-template-columns: 800px 1fr; and grid-template-rows: 600px 1fr; +PASS 'grid' with: grid-template-columns: 800px 1fr; and grid-template-rows: 600px 1fr; +PASS 'emptyGrid' with: grid-template-columns: 1000px 1fr; and grid-template-rows: 700px 1fr; +PASS 'grid' with: grid-template-columns: 1000px 1fr; and grid-template-rows: 700px 1fr; +PASS 'emptyGrid' with: grid-template-columns: calc(50px + 50%) 1fr; and grid-template-rows: calc(50px + 50%) 1fr; +PASS 'grid' with: grid-template-columns: calc(50px + 50%) 1fr; and grid-template-rows: calc(50px + 50%) 1fr; +PASS 'emptyGrid' with: grid-template-columns: minmax(100px, 300px) 1fr; and grid-template-rows: minmax(100px, 200px) 1fr; +PASS 'grid' with: grid-template-columns: minmax(100px, 300px) 1fr; and grid-template-rows: minmax(100px, 200px) 1fr; +PASS 'emptyGrid' with: grid-template-columns: repeat(4, 1fr); and grid-template-rows: repeat(4, 1fr); +PASS 'grid' with: grid-template-columns: repeat(4, 1fr); and grid-template-rows: repeat(4, 1fr); +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(4, [b] 1fr [c]) [d]; and grid-template-rows: [z] repeat(4, [y] 1fr) [x]; +PASS 'grid' with: grid-template-columns: [a] repeat(4, [b] 1fr [c]) [d]; and grid-template-rows: [z] repeat(4, [y] 1fr) [x]; +PASS 'emptyGrid' with: grid-template-columns: fr; and grid-template-rows: fr; +FAIL 'grid' with: grid-template-columns: fr; and grid-template-rows: fr; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 1 fr; and grid-template-rows: 1 fr; +FAIL 'grid' with: grid-template-columns: 1 fr; and grid-template-rows: 1 fr; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 1free-space; and grid-template-rows: 1free-space; +FAIL 'grid' with: grid-template-columns: 1free-space; and grid-template-rows: 1free-space; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: -2fr; and grid-template-rows: -2fr; +FAIL 'grid' with: grid-template-columns: -2fr; and grid-template-rows: -2fr; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 0,5fr; and grid-template-rows: 0,5fr; +FAIL 'grid' with: grid-template-columns: 0,5fr; and grid-template-rows: 0,5fr; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: calc(1fr + 100px); and grid-template-rows: calc(1fr + 100px); +FAIL 'grid' with: grid-template-columns: calc(1fr + 100px); and grid-template-rows: calc(1fr + 100px); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: (1fr) auto; and grid-template-rows: (1fr) auto; +FAIL 'grid' with: grid-template-columns: (1fr) auto; and grid-template-rows: (1fr) auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: minmax(1fr, 1000px); and grid-template-rows: minmax(1fr, 700px); +FAIL 'grid' with: grid-template-columns: minmax(1fr, 1000px); and grid-template-rows: minmax(1fr, 700px); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001-expected.txt new file mode 100644 index 0000000..3baf023 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001-expected.txt
@@ -0,0 +1,47 @@ +This is a testharness.js-based test. +PASS 'emptyGrid' with: grid-template-columns: none; and grid-template-rows: none; +FAIL 'grid' with: grid-template-columns: none; and grid-template-rows: none; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: auto; and grid-template-rows: auto; +PASS 'grid' with: grid-template-columns: auto; and grid-template-rows: auto; +PASS 'emptyGrid' with: grid-template-columns: 500px; and grid-template-rows: 300px; +PASS 'grid' with: grid-template-columns: 500px; and grid-template-rows: 300px; +PASS 'emptyGrid' with: grid-template-columns: 40em; and grid-template-rows: 20em; +PASS 'grid' with: grid-template-columns: 40em; and grid-template-rows: 20em; +PASS 'emptyGrid' with: grid-template-columns: 25%; and grid-template-rows: 50%; +PASS 'grid' with: grid-template-columns: 25%; and grid-template-rows: 50%; +PASS 'emptyGrid' with: grid-template-columns: calc(200px + 10%); and grid-template-rows: calc(25% + 50px); +PASS 'grid' with: grid-template-columns: calc(200px + 10%); and grid-template-rows: calc(25% + 50px); +PASS 'emptyGrid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr; +PASS 'grid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr; +PASS 'emptyGrid' with: grid-template-columns: max-content; and grid-template-rows: max-content; +PASS 'grid' with: grid-template-columns: max-content; and grid-template-rows: max-content; +PASS 'emptyGrid' with: grid-template-columns: min-content; and grid-template-rows: min-content; +PASS 'grid' with: grid-template-columns: min-content; and grid-template-rows: min-content; +PASS 'emptyGrid' with: grid-template-columns: minmax(200px, 400px); and grid-template-rows: minmax(50px, 100px); +PASS 'grid' with: grid-template-columns: minmax(200px, 400px); and grid-template-rows: minmax(50px, 100px); +PASS 'emptyGrid' with: grid-template-columns: minmax(calc(10% + 200px), calc(800px - 20%)); and grid-template-rows: minmax(calc(20% + 50px), calc(600px - 10%)); +PASS 'grid' with: grid-template-columns: minmax(calc(10% + 200px), calc(800px - 20%)); and grid-template-rows: minmax(calc(20% + 50px), calc(600px - 10%)); +PASS 'emptyGrid' with: grid-template-columns: 500px 200px 50px; and grid-template-rows: 100px 300px; +PASS 'grid' with: grid-template-columns: 500px 200px 50px; and grid-template-rows: 100px 300px; +PASS 'emptyGrid' with: grid-template-columns: 40em 100px 15%; and grid-template-rows: 50px 20em 10%; +PASS 'grid' with: grid-template-columns: 40em 100px 15%; and grid-template-rows: 50px 20em 10%; +PASS 'emptyGrid' with: grid-template-columns: 200px 1fr; and grid-template-rows: 1fr 100px; +PASS 'grid' with: grid-template-columns: 200px 1fr; and grid-template-rows: 1fr 100px; +PASS 'emptyGrid' with: grid-template-columns: auto 1fr; and grid-template-rows: auto 1fr; +PASS 'grid' with: grid-template-columns: auto 1fr; and grid-template-rows: auto 1fr; +PASS 'emptyGrid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 2fr 1fr; +PASS 'grid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 2fr 1fr; +PASS 'emptyGrid' with: grid-template-columns: minmax(25px, 75px) 750px; and grid-template-rows: minmax(50px, 150px) 500px; +PASS 'grid' with: grid-template-columns: minmax(25px, 75px) 750px; and grid-template-rows: minmax(50px, 150px) 500px; +PASS 'emptyGrid' with: grid-template-columns: min-content 1fr calc(20px + 10%) minmax(30em, 50em); and grid-template-rows: min-content 1fr calc(10% + 40px) minmax(3em, 5em); +PASS 'grid' with: grid-template-columns: min-content 1fr calc(20px + 10%) minmax(30em, 50em); and grid-template-rows: min-content 1fr calc(10% + 40px) minmax(3em, 5em); +PASS 'emptyGrid' with: grid-template-columns: foo; and grid-template-rows: bar; +FAIL 'grid' with: grid-template-columns: foo; and grid-template-rows: bar; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: auto none; and grid-template-rows: none auto; +FAIL 'grid' with: grid-template-columns: auto none; and grid-template-rows: none auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 100px, 200px; and grid-template-rows: 300px, 400px; +FAIL 'grid' with: grid-template-columns: 100px, 200px; and grid-template-rows: 300px, 400px; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: minmax(100px, 200px, 300px); and grid-template-rows: minmax(100px, 200px, 300px); +FAIL 'grid' with: grid-template-columns: minmax(100px, 200px, 300px); and grid-template-rows: minmax(100px, 200px, 300px); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001-expected.txt new file mode 100644 index 0000000..e1fc637 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001-expected.txt
@@ -0,0 +1,84 @@ +This is a testharness.js-based test. +Found 80 tests; 59 PASS, 21 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS 'emptyGrid' with: grid-template-columns: [first] auto [last]; and grid-template-rows: [first] auto [last]; +PASS 'grid' with: grid-template-columns: [first] auto [last]; and grid-template-rows: [first] auto [last]; +PASS 'emptyGrid' with: grid-template-columns: [F1rst-L1_n3] auto [L4st-L1_n3]; and grid-template-rows: [F1rst-L1_n3] auto [L4st-L1_n3]; +PASS 'grid' with: grid-template-columns: [F1rst-L1_n3] auto [L4st-L1_n3]; and grid-template-rows: [F1rst-L1_n3] auto [L4st-L1_n3]; +PASS 'emptyGrid' with: grid-template-columns: [] auto [ ]; and grid-template-rows: [ ] auto []; +PASS 'grid' with: grid-template-columns: [] auto [ ]; and grid-template-rows: [ ] auto []; +PASS 'emptyGrid' with: grid-template-columns: [first] auto; and grid-template-rows: [first] auto; +PASS 'grid' with: grid-template-columns: [first] auto; and grid-template-rows: [first] auto; +PASS 'emptyGrid' with: grid-template-columns: auto [last]; and grid-template-rows: auto [last]; +PASS 'grid' with: grid-template-columns: auto [last]; and grid-template-rows: auto [last]; +PASS 'emptyGrid' with: grid-template-columns: [line] auto [line]; and grid-template-rows: [line] auto [line]; +PASS 'grid' with: grid-template-columns: [line] auto [line]; and grid-template-rows: [line] auto [line]; +PASS 'emptyGrid' with: grid-template-columns: [first line] auto [last line]; and grid-template-rows: [first line] auto [last line]; +PASS 'grid' with: grid-template-columns: [first line] auto [last line]; and grid-template-rows: [first line] auto [last line]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto [b] auto [c]; and grid-template-rows: [a] auto [b] auto [c]; +PASS 'grid' with: grid-template-columns: [a] auto [b] auto [c]; and grid-template-rows: [a] auto [b] auto [c]; +PASS 'emptyGrid' with: grid-template-columns: auto [b] auto [c]; and grid-template-rows: auto [b] auto [c]; +PASS 'grid' with: grid-template-columns: auto [b] auto [c]; and grid-template-rows: auto [b] auto [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto auto [c]; and grid-template-rows: [a] auto auto [c]; +PASS 'grid' with: grid-template-columns: [a] auto auto [c]; and grid-template-rows: [a] auto auto [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto [b] auto; and grid-template-rows: [a] auto [b] auto; +PASS 'grid' with: grid-template-columns: [a] auto [b] auto; and grid-template-rows: [a] auto [b] auto; +PASS 'emptyGrid' with: grid-template-columns: [a] auto auto; and grid-template-rows: [a] auto auto; +PASS 'grid' with: grid-template-columns: [a] auto auto; and grid-template-rows: [a] auto auto; +PASS 'emptyGrid' with: grid-template-columns: auto [b] auto; and grid-template-rows: auto [b] auto; +PASS 'grid' with: grid-template-columns: auto [b] auto; and grid-template-rows: auto [b] auto; +PASS 'emptyGrid' with: grid-template-columns: auto auto [c]; and grid-template-rows: auto auto [c]; +PASS 'grid' with: grid-template-columns: auto auto [c]; and grid-template-rows: auto auto [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto [a] auto [a]; and grid-template-rows: [a] auto [a] auto [a]; +PASS 'grid' with: grid-template-columns: [a] auto [a] auto [a]; and grid-template-rows: [a] auto [a] auto [a]; +PASS 'emptyGrid' with: grid-template-columns: [a b c] auto [a b c] auto [a b c]; and grid-template-rows: [a b c] auto [a b c] auto [a b c]; +PASS 'grid' with: grid-template-columns: [a b c] auto [a b c] auto [a b c]; and grid-template-rows: [a b c] auto [a b c] auto [a b c]; +PASS 'emptyGrid' with: grid-template-columns: [a] 40em [b] 100px [c] 15% [d]; and grid-template-rows: [z] 50px [y] 20em [x] 10% [w]; +PASS 'grid' with: grid-template-columns: [a] 40em [b] 100px [c] 15% [d]; and grid-template-rows: [z] 50px [y] 20em [x] 10% [w]; +PASS 'emptyGrid' with: grid-template-columns: [a] 200px [b] 1fr [c]; and grid-template-rows: [z] 1fr [y] 100px [x]; +PASS 'grid' with: grid-template-columns: [a] 200px [b] 1fr [c]; and grid-template-rows: [z] 1fr [y] 100px [x]; +PASS 'emptyGrid' with: grid-template-columns: [a] min-content [b] 1fr [c] calc(20px + 10%) [d] minmax(30em, 50em) [e]; and grid-template-rows: [z] min-content [y] 1fr [x] calc(10% + 40px) [w] minmax(3em, 5em) [v]; +PASS 'grid' with: grid-template-columns: [a] min-content [b] 1fr [c] calc(20px + 10%) [d] minmax(30em, 50em) [e]; and grid-template-rows: [z] min-content [y] 1fr [x] calc(10% + 40px) [w] minmax(3em, 5em) [v]; +PASS 'emptyGrid' with: grid-template-columns: [a]; and grid-template-rows: [a]; +FAIL 'grid' with: grid-template-columns: [a]; and grid-template-rows: [a]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a b]; and grid-template-rows: [a b]; +FAIL 'grid' with: grid-template-columns: [a b]; and grid-template-rows: [a b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a] none [b]; and grid-template-rows: [a] none [b]; +FAIL 'grid' with: grid-template-columns: [a] none [b]; and grid-template-rows: [a] none [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a] [b]; and grid-template-rows: [a] [b]; +FAIL 'grid' with: grid-template-columns: [a] [b]; and grid-template-rows: [a] [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: a auto b; and grid-template-rows: a auto b; +FAIL 'grid' with: grid-template-columns: a auto b; and grid-template-rows: a auto b; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: (a) auto (b); and grid-template-rows: (a) auto (b); +FAIL 'grid' with: grid-template-columns: (a) auto (b); and grid-template-rows: (a) auto (b); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 'a' auto 'b'; and grid-template-rows: 'a' auto 'b'; +FAIL 'grid' with: grid-template-columns: 'a' auto 'b'; and grid-template-rows: 'a' auto 'b'; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: "a" auto "b"; and grid-template-rows: "a" auto "b"; +FAIL 'grid' with: grid-template-columns: "a" auto "b"; and grid-template-rows: "a" auto "b"; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a, b] auto [a, b]; and grid-template-rows: [a, b] auto [a, b]; +FAIL 'grid' with: grid-template-columns: [a, b] auto [a, b]; and grid-template-rows: [a, b] auto [a, b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a] [b] auto [c d] [e]; and grid-template-rows: [a] [b] auto [c d] [e]; +FAIL 'grid' with: grid-template-columns: [a] [b] auto [c d] [e]; and grid-template-rows: [a] [b] auto [c d] [e]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a [b]] auto [c]; and grid-template-rows: [a [b]] auto [c]; +FAIL 'grid' with: grid-template-columns: [a [b]] auto [c]; and grid-template-rows: [a [b]] auto [c]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a] auto [[b]]; and grid-template-rows: [a] auto [[b]]; +FAIL 'grid' with: grid-template-columns: [a] auto [[b]]; and grid-template-rows: [a] auto [[b]]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a auto [b]; and grid-template-rows: [a auto [b]; +FAIL 'grid' with: grid-template-columns: [a auto [b]; and grid-template-rows: [a auto [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a 100px] auto [b]; and grid-template-rows: [a 100px] auto [b]; +FAIL 'grid' with: grid-template-columns: [a 100px] auto [b]; and grid-template-rows: [a 100px] auto [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a 50%] auto [b]; and grid-template-rows: [a 50%] auto [b]; +FAIL 'grid' with: grid-template-columns: [a 50%] auto [b]; and grid-template-rows: [a 50%] auto [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [5] auto [10]; and grid-template-rows: [5] auto [10]; +FAIL 'grid' with: grid-template-columns: [5] auto [10]; and grid-template-rows: [5] auto [10]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a.] auto [b*]; and grid-template-rows: [a.] auto [b*]; +FAIL 'grid' with: grid-template-columns: [a.] auto [b*]; and grid-template-rows: [a.] auto [b*]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [#a] auto [$b]; and grid-template-rows: [#a] auto [$b]; +FAIL 'grid' with: grid-template-columns: [#a] auto [$b]; and grid-template-rows: [#a] auto [$b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [initial] auto; and grid-template-rows: [initial] auto; +FAIL 'grid' with: grid-template-columns: [initial] auto; and grid-template-rows: [initial] auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [inherit] auto; and grid-template-rows: [inherit] auto; +FAIL 'grid' with: grid-template-columns: [inherit] auto; and grid-template-rows: [inherit] auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [default] auto; and grid-template-rows: [default] auto; +FAIL 'grid' with: grid-template-columns: [default] auto; and grid-template-rows: [default] auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-repeat-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-repeat-001-expected.txt new file mode 100644 index 0000000..f55955d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-support-repeat-001-expected.txt
@@ -0,0 +1,43 @@ +This is a testharness.js-based test. +PASS 'emptyGrid' with: grid-template-columns: repeat(1, auto); and grid-template-rows: repeat(1, auto); +PASS 'grid' with: grid-template-columns: repeat(1, auto); and grid-template-rows: repeat(1, auto); +PASS 'emptyGrid' with: grid-template-columns: repeat(2, auto); and grid-template-rows: repeat(2, auto); +PASS 'grid' with: grid-template-columns: repeat(2, auto); and grid-template-rows: repeat(2, auto); +PASS 'emptyGrid' with: grid-template-columns: repeat(2, minmax(50px, calc(50px + 50%))); and grid-template-rows: repeat(2, minmax(50px, calc(50px + 50%))); +PASS 'grid' with: grid-template-columns: repeat(2, minmax(50px, calc(50px + 50%))); and grid-template-rows: repeat(2, minmax(50px, calc(50px + 50%))); +PASS 'emptyGrid' with: grid-template-columns: repeat(5, 10%); and grid-template-rows: repeat(5, 10%); +PASS 'grid' with: grid-template-columns: repeat(5, 10%); and grid-template-rows: repeat(5, 10%); +PASS 'emptyGrid' with: grid-template-columns: max-content repeat(2, 25%) 1fr; and grid-template-rows: 100px repeat(2, 25%) 1fr; +PASS 'grid' with: grid-template-columns: max-content repeat(2, 25%) 1fr; and grid-template-rows: max-content repeat(2, 25%) 1fr; +PASS 'emptyGrid' with: grid-template-columns: repeat(2, min-content 50px); and grid-template-rows: repeat(2, min-content 50px); +PASS 'grid' with: grid-template-columns: repeat(2, min-content 50px); and grid-template-rows: repeat(2, min-content 50px); +PASS 'emptyGrid' with: grid-template-columns: repeat(2, [a] minmax(50px, 100px) [b] 25em [c]); and grid-template-rows: repeat(2, [a] minmax(50px, 100px) [b] 25em [c]); +PASS 'grid' with: grid-template-columns: repeat(2, [a] minmax(50px, 100px) [b] 25em [c]); and grid-template-rows: repeat(2, [a] minmax(50px, 100px) [b] 25em [c]); +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(2, auto [b] 100px) [c]; and grid-template-rows: [a] repeat(2, auto [b] 100px) [c]; +PASS 'grid' with: grid-template-columns: [a] repeat(2, auto [b] 100px) [c]; and grid-template-rows: [a] repeat(2, auto [b] 100px) [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto repeat(2, [b] 100px) [c]; and grid-template-rows: [a] auto repeat(2, [b] 100px) [c]; +PASS 'grid' with: grid-template-columns: [a] auto repeat(2, [b] 100px) [c]; and grid-template-rows: [a] auto repeat(2, [b] 100px) [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(2, auto [b]) 100px [c]; and grid-template-rows: [a] repeat(2, auto [b]) 100px [c]; +PASS 'grid' with: grid-template-columns: [a] repeat(2, auto [b]) 100px [c]; and grid-template-rows: [a] repeat(2, auto [b]) 100px [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(2, [b] 100px); and grid-template-rows: [a] repeat(2, [b] 100px); +PASS 'grid' with: grid-template-columns: [a] repeat(2, [b] 100px); and grid-template-rows: [a] repeat(2, [b] 100px); +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(2, [b] auto [c]) [d]; and grid-template-rows: [a] repeat(2, [b] auto [c]) [d]; +PASS 'grid' with: grid-template-columns: [a] repeat(2, [b] auto [c]) [d]; and grid-template-rows: [a] repeat(2, [b] auto [c]) [d]; +PASS 'emptyGrid' with: grid-template-columns: [a] min-content repeat(2, [b] 1fr [c] calc(20px + 10%)) [d] minmax(30em, 50em) [e]; and grid-template-rows: [z] min-content repeat(2, [y] 1fr [x] calc(10% + 40px)) [w] minmax(3em, 5em) [v]; +PASS 'grid' with: grid-template-columns: [a] min-content repeat(2, [b] 1fr [c] calc(20px + 10%)) [d] minmax(30em, 50em) [e]; and grid-template-rows: [z] min-content repeat(2, [y] 1fr [x] calc(10% + 40px)) [w] minmax(3em, 5em) [v]; +PASS 'emptyGrid' with: grid-template-columns: repeat(-1, auto); and grid-template-rows: repeat(-1, auto); +FAIL 'grid' with: grid-template-columns: repeat(-1, auto); and grid-template-rows: repeat(-1, auto); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: repeat(auto, 2); and grid-template-rows: repeat(auto, 2); +FAIL 'grid' with: grid-template-columns: repeat(auto, 2); and grid-template-rows: repeat(auto, 2); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: repeat 2, auto; and grid-template-rows: repeat 2, auto; +FAIL 'grid' with: grid-template-columns: repeat 2, auto; and grid-template-rows: repeat 2, auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: repeat(2 auto); and grid-template-rows: repeat(2 auto); +FAIL 'grid' with: grid-template-columns: repeat(2 auto); and grid-template-rows: repeat(2 auto); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 100px (repeat 2, auto); and grid-template-rows: (repeat 2, auto); +FAIL 'grid' with: grid-template-columns: 100px (repeat 2, auto); and grid-template-rows: (repeat 2, auto); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: repeat(2, 50px repeat(2, 100px)); and grid-template-rows: repeat(2, 50px repeat(2, 100px)); +FAIL 'grid' with: grid-template-columns: repeat(2, 50px repeat(2, 100px)); and grid-template-rows: repeat(2, 50px repeat(2, 100px)); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 100px repeat(2, [a]); and grid-template-rows: 100px repeat(2, [a]); +FAIL 'grid' with: grid-template-columns: 100px repeat(2, [a]); and grid-template-rows: 100px repeat(2, [a]); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001-expected.txt new file mode 100644 index 0000000..c9eac7b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001-expected.txt
@@ -0,0 +1,80 @@ +This is a testharness.js-based test. +Found 76 tests; 40 PASS, 36 FAIL, 0 TIMEOUT, 0 NOTRUN. +FAIL 'grid' with: grid-template-columns: ; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "110px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: ; and grid-template-rows: ; +FAIL 'grid' with: grid-template-columns: auto auto; and grid-template-rows: ; assert_in_array: gridTemplateRows value "10px 20px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: auto auto; and grid-template-rows: ; +FAIL 'grid' with: grid-template-columns: 60px; and grid-template-rows: ; assert_in_array: gridTemplateRows value "20px 20px 20px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: 60px; and grid-template-rows: ; +FAIL 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: ; assert_in_array: gridTemplateRows value "20px 20px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: ; +FAIL 'grid' with: grid-template-columns: ; and grid-template-rows: 50px; assert_in_array: gridTemplateColumns value "110px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: ; and grid-template-rows: 50px; +FAIL 'grid' with: grid-template-columns: ; and grid-template-rows: 50px 30px; assert_in_array: gridTemplateColumns value "110px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: ; and grid-template-rows: 50px 30px; +FAIL 'grid' with: grid-template-columns: 60px; and grid-template-rows: 50px; assert_in_array: gridTemplateRows value "50px 20px 20px" not in array ["50px"] +PASS Children of 'grid' with: grid-template-columns: 60px; and grid-template-rows: 50px; +FAIL 'grid' with: grid-template-columns: 60px; and grid-template-rows: 50px 30px; assert_in_array: gridTemplateRows value "50px 30px 20px" not in array ["50px 30px"] +PASS Children of 'grid' with: grid-template-columns: 60px; and grid-template-rows: 50px 30px; +FAIL 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px; assert_in_array: gridTemplateRows value "50px 20px" not in array ["50px"] +PASS Children of 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px; +PASS 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px 30px; +PASS Children of 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px 30px; +FAIL 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "110px 0px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: ; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 0px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: ; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px 50px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: ; +FAIL 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "110px 0px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px; +FAIL 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px 50px; assert_in_array: gridTemplateColumns value "110px 0px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px 50px; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "60px 0px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px 50px; assert_in_array: gridTemplateColumns value "60px 0px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px 50px; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px 50px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: 60px; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: 60px 50px; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px 50px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: 60px 50px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "100px 110px 50px" not in array ["none"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: ; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: auto auto; assert_in_array: gridTemplateColumns value "110px 50px" not in array ["none"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: auto auto; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 110px 50px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: ; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "100px 60px 50px" not in array ["100px 60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: ; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: 50px; assert_in_array: gridTemplateColumns value "100px 110px 50px" not in array ["none"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: 50px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: 50px 30px; assert_in_array: gridTemplateColumns value "110px 50px" not in array ["none"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: 50px 30px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: 50px; assert_in_array: gridTemplateColumns value "60px 110px 50px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: 50px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: 50px 30px; assert_in_array: gridTemplateColumns value "60px 50px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: 50px 30px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px; assert_in_array: gridTemplateColumns value "100px 60px 50px" not in array ["100px 60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px; +PASS 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px 30px; +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px 30px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "110px 50px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: ; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: ; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 70px 0px 0px 100px" not in array ["60px 70px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: ; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "110px 50px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px 70px; assert_in_array: gridTemplateColumns value "110px 50px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px 70px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px 70px; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px 70px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "60px 70px 0px 0px 100px" not in array ["60px 70px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: 60px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: 60px 70px; assert_in_array: gridTemplateColumns value "60px 70px 0px 0px 100px" not in array ["60px 70px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: 60px 70px; +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-flexible-lengths-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-flexible-lengths-001-expected.txt new file mode 100644 index 0000000..6cde225 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-flexible-lengths-001-expected.txt
@@ -0,0 +1,66 @@ +This is a testharness.js-based test. +Found 62 tests; 54 PASS, 8 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS 'emptyGrid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr; +PASS 'grid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr; +PASS 'emptyGrid' with: grid-template-columns: 2fr; and grid-template-rows: 2fr; +PASS 'grid' with: grid-template-columns: 2fr; and grid-template-rows: 2fr; +PASS 'emptyGrid' with: grid-template-columns: 10fr; and grid-template-rows: 10fr; +PASS 'grid' with: grid-template-columns: 10fr; and grid-template-rows: 10fr; +PASS 'emptyGrid' with: grid-template-columns: 0.5fr; and grid-template-rows: 0.5fr; +PASS 'grid' with: grid-template-columns: 0.5fr; and grid-template-rows: 0.5fr; +PASS 'emptyGrid' with: grid-template-columns: .5fr; and grid-template-rows: .5fr; +PASS 'grid' with: grid-template-columns: .5fr; and grid-template-rows: .5fr; +PASS 'emptyGrid' with: grid-template-columns: minmax(100px, 1fr); and grid-template-rows: minmax(100px, 1fr); +PASS 'grid' with: grid-template-columns: minmax(100px, 1fr); and grid-template-rows: minmax(100px, 1fr); +PASS 'emptyGrid' with: grid-template-columns: minmax(1fr, 1fr); and grid-template-rows: minmax(1fr, 1fr); +PASS 'grid' with: grid-template-columns: minmax(1fr, 1fr); and grid-template-rows: minmax(1fr, 1fr); +PASS 'emptyGrid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr; +PASS 'grid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr; +PASS 'emptyGrid' with: grid-template-columns: 0.25fr 0.75fr; and grid-template-rows: 0.25fr 0.75fr; +PASS 'grid' with: grid-template-columns: 0.25fr 0.75fr; and grid-template-rows: 0.25fr 0.75fr; +PASS 'emptyGrid' with: grid-template-columns: 1fr 2fr 1fr; and grid-template-rows: 1fr 2fr 1fr; +PASS 'grid' with: grid-template-columns: 1fr 2fr 1fr; and grid-template-rows: 1fr 2fr 1fr; +PASS 'emptyGrid' with: grid-template-columns: auto 1fr 4fr 3fr 2fr; and grid-template-rows: auto 1fr 4fr 3fr 2fr; +PASS 'grid' with: grid-template-columns: auto 1fr 4fr 3fr 2fr; and grid-template-rows: auto 1fr 4fr 3fr 2fr; +PASS 'emptyGrid' with: grid-template-columns: 1fr 4fr 100px 3fr 2fr; and grid-template-rows: 1fr 4fr 100px 3fr 2fr; +PASS 'grid' with: grid-template-columns: 1fr 4fr 100px 3fr 2fr; and grid-template-rows: 1fr 4fr 100px 3fr 2fr; +PASS 'emptyGrid' with: grid-template-columns: auto 1fr; and grid-template-rows: auto 1fr; +PASS 'grid' with: grid-template-columns: auto 1fr; and grid-template-rows: auto 1fr; +PASS 'emptyGrid' with: grid-template-columns: max-content 1fr; and grid-template-rows: max-content 1fr; +PASS 'grid' with: grid-template-columns: max-content 1fr; and grid-template-rows: max-content 1fr; +PASS 'emptyGrid' with: grid-template-columns: min-content 1fr; and grid-template-rows: min-content 1fr; +PASS 'grid' with: grid-template-columns: min-content 1fr; and grid-template-rows: min-content 1fr; +PASS 'emptyGrid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto; +PASS 'grid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto; +PASS 'emptyGrid' with: grid-template-columns: 300px 1fr; and grid-template-rows: 200px 1fr; +PASS 'grid' with: grid-template-columns: 300px 1fr; and grid-template-rows: 200px 1fr; +PASS 'emptyGrid' with: grid-template-columns: 800px 1fr; and grid-template-rows: 600px 1fr; +PASS 'grid' with: grid-template-columns: 800px 1fr; and grid-template-rows: 600px 1fr; +PASS 'emptyGrid' with: grid-template-columns: 1000px 1fr; and grid-template-rows: 700px 1fr; +PASS 'grid' with: grid-template-columns: 1000px 1fr; and grid-template-rows: 700px 1fr; +PASS 'emptyGrid' with: grid-template-columns: calc(50px + 50%) 1fr; and grid-template-rows: calc(50px + 50%) 1fr; +PASS 'grid' with: grid-template-columns: calc(50px + 50%) 1fr; and grid-template-rows: calc(50px + 50%) 1fr; +PASS 'emptyGrid' with: grid-template-columns: minmax(100px, 300px) 1fr; and grid-template-rows: minmax(100px, 200px) 1fr; +PASS 'grid' with: grid-template-columns: minmax(100px, 300px) 1fr; and grid-template-rows: minmax(100px, 200px) 1fr; +PASS 'emptyGrid' with: grid-template-columns: repeat(4, 1fr); and grid-template-rows: repeat(4, 1fr); +PASS 'grid' with: grid-template-columns: repeat(4, 1fr); and grid-template-rows: repeat(4, 1fr); +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(4, [b] 1fr [c]) [d]; and grid-template-rows: [z] repeat(4, [y] 1fr) [x]; +PASS 'grid' with: grid-template-columns: [a] repeat(4, [b] 1fr [c]) [d]; and grid-template-rows: [z] repeat(4, [y] 1fr) [x]; +PASS 'emptyGrid' with: grid-template-columns: fr; and grid-template-rows: fr; +FAIL 'grid' with: grid-template-columns: fr; and grid-template-rows: fr; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 1 fr; and grid-template-rows: 1 fr; +FAIL 'grid' with: grid-template-columns: 1 fr; and grid-template-rows: 1 fr; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 1free-space; and grid-template-rows: 1free-space; +FAIL 'grid' with: grid-template-columns: 1free-space; and grid-template-rows: 1free-space; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: -2fr; and grid-template-rows: -2fr; +FAIL 'grid' with: grid-template-columns: -2fr; and grid-template-rows: -2fr; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 0,5fr; and grid-template-rows: 0,5fr; +FAIL 'grid' with: grid-template-columns: 0,5fr; and grid-template-rows: 0,5fr; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: calc(1fr + 100px); and grid-template-rows: calc(1fr + 100px); +FAIL 'grid' with: grid-template-columns: calc(1fr + 100px); and grid-template-rows: calc(1fr + 100px); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: (1fr) auto; and grid-template-rows: (1fr) auto; +FAIL 'grid' with: grid-template-columns: (1fr) auto; and grid-template-rows: (1fr) auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: minmax(1fr, 1000px); and grid-template-rows: minmax(1fr, 700px); +FAIL 'grid' with: grid-template-columns: minmax(1fr, 1000px); and grid-template-rows: minmax(1fr, 700px); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001-expected.txt new file mode 100644 index 0000000..3baf023 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001-expected.txt
@@ -0,0 +1,47 @@ +This is a testharness.js-based test. +PASS 'emptyGrid' with: grid-template-columns: none; and grid-template-rows: none; +FAIL 'grid' with: grid-template-columns: none; and grid-template-rows: none; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: auto; and grid-template-rows: auto; +PASS 'grid' with: grid-template-columns: auto; and grid-template-rows: auto; +PASS 'emptyGrid' with: grid-template-columns: 500px; and grid-template-rows: 300px; +PASS 'grid' with: grid-template-columns: 500px; and grid-template-rows: 300px; +PASS 'emptyGrid' with: grid-template-columns: 40em; and grid-template-rows: 20em; +PASS 'grid' with: grid-template-columns: 40em; and grid-template-rows: 20em; +PASS 'emptyGrid' with: grid-template-columns: 25%; and grid-template-rows: 50%; +PASS 'grid' with: grid-template-columns: 25%; and grid-template-rows: 50%; +PASS 'emptyGrid' with: grid-template-columns: calc(200px + 10%); and grid-template-rows: calc(25% + 50px); +PASS 'grid' with: grid-template-columns: calc(200px + 10%); and grid-template-rows: calc(25% + 50px); +PASS 'emptyGrid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr; +PASS 'grid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr; +PASS 'emptyGrid' with: grid-template-columns: max-content; and grid-template-rows: max-content; +PASS 'grid' with: grid-template-columns: max-content; and grid-template-rows: max-content; +PASS 'emptyGrid' with: grid-template-columns: min-content; and grid-template-rows: min-content; +PASS 'grid' with: grid-template-columns: min-content; and grid-template-rows: min-content; +PASS 'emptyGrid' with: grid-template-columns: minmax(200px, 400px); and grid-template-rows: minmax(50px, 100px); +PASS 'grid' with: grid-template-columns: minmax(200px, 400px); and grid-template-rows: minmax(50px, 100px); +PASS 'emptyGrid' with: grid-template-columns: minmax(calc(10% + 200px), calc(800px - 20%)); and grid-template-rows: minmax(calc(20% + 50px), calc(600px - 10%)); +PASS 'grid' with: grid-template-columns: minmax(calc(10% + 200px), calc(800px - 20%)); and grid-template-rows: minmax(calc(20% + 50px), calc(600px - 10%)); +PASS 'emptyGrid' with: grid-template-columns: 500px 200px 50px; and grid-template-rows: 100px 300px; +PASS 'grid' with: grid-template-columns: 500px 200px 50px; and grid-template-rows: 100px 300px; +PASS 'emptyGrid' with: grid-template-columns: 40em 100px 15%; and grid-template-rows: 50px 20em 10%; +PASS 'grid' with: grid-template-columns: 40em 100px 15%; and grid-template-rows: 50px 20em 10%; +PASS 'emptyGrid' with: grid-template-columns: 200px 1fr; and grid-template-rows: 1fr 100px; +PASS 'grid' with: grid-template-columns: 200px 1fr; and grid-template-rows: 1fr 100px; +PASS 'emptyGrid' with: grid-template-columns: auto 1fr; and grid-template-rows: auto 1fr; +PASS 'grid' with: grid-template-columns: auto 1fr; and grid-template-rows: auto 1fr; +PASS 'emptyGrid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 2fr 1fr; +PASS 'grid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 2fr 1fr; +PASS 'emptyGrid' with: grid-template-columns: minmax(25px, 75px) 750px; and grid-template-rows: minmax(50px, 150px) 500px; +PASS 'grid' with: grid-template-columns: minmax(25px, 75px) 750px; and grid-template-rows: minmax(50px, 150px) 500px; +PASS 'emptyGrid' with: grid-template-columns: min-content 1fr calc(20px + 10%) minmax(30em, 50em); and grid-template-rows: min-content 1fr calc(10% + 40px) minmax(3em, 5em); +PASS 'grid' with: grid-template-columns: min-content 1fr calc(20px + 10%) minmax(30em, 50em); and grid-template-rows: min-content 1fr calc(10% + 40px) minmax(3em, 5em); +PASS 'emptyGrid' with: grid-template-columns: foo; and grid-template-rows: bar; +FAIL 'grid' with: grid-template-columns: foo; and grid-template-rows: bar; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: auto none; and grid-template-rows: none auto; +FAIL 'grid' with: grid-template-columns: auto none; and grid-template-rows: none auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 100px, 200px; and grid-template-rows: 300px, 400px; +FAIL 'grid' with: grid-template-columns: 100px, 200px; and grid-template-rows: 300px, 400px; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: minmax(100px, 200px, 300px); and grid-template-rows: minmax(100px, 200px, 300px); +FAIL 'grid' with: grid-template-columns: minmax(100px, 200px, 300px); and grid-template-rows: minmax(100px, 200px, 300px); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-001-expected.txt new file mode 100644 index 0000000..e1fc637 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-001-expected.txt
@@ -0,0 +1,84 @@ +This is a testharness.js-based test. +Found 80 tests; 59 PASS, 21 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS 'emptyGrid' with: grid-template-columns: [first] auto [last]; and grid-template-rows: [first] auto [last]; +PASS 'grid' with: grid-template-columns: [first] auto [last]; and grid-template-rows: [first] auto [last]; +PASS 'emptyGrid' with: grid-template-columns: [F1rst-L1_n3] auto [L4st-L1_n3]; and grid-template-rows: [F1rst-L1_n3] auto [L4st-L1_n3]; +PASS 'grid' with: grid-template-columns: [F1rst-L1_n3] auto [L4st-L1_n3]; and grid-template-rows: [F1rst-L1_n3] auto [L4st-L1_n3]; +PASS 'emptyGrid' with: grid-template-columns: [] auto [ ]; and grid-template-rows: [ ] auto []; +PASS 'grid' with: grid-template-columns: [] auto [ ]; and grid-template-rows: [ ] auto []; +PASS 'emptyGrid' with: grid-template-columns: [first] auto; and grid-template-rows: [first] auto; +PASS 'grid' with: grid-template-columns: [first] auto; and grid-template-rows: [first] auto; +PASS 'emptyGrid' with: grid-template-columns: auto [last]; and grid-template-rows: auto [last]; +PASS 'grid' with: grid-template-columns: auto [last]; and grid-template-rows: auto [last]; +PASS 'emptyGrid' with: grid-template-columns: [line] auto [line]; and grid-template-rows: [line] auto [line]; +PASS 'grid' with: grid-template-columns: [line] auto [line]; and grid-template-rows: [line] auto [line]; +PASS 'emptyGrid' with: grid-template-columns: [first line] auto [last line]; and grid-template-rows: [first line] auto [last line]; +PASS 'grid' with: grid-template-columns: [first line] auto [last line]; and grid-template-rows: [first line] auto [last line]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto [b] auto [c]; and grid-template-rows: [a] auto [b] auto [c]; +PASS 'grid' with: grid-template-columns: [a] auto [b] auto [c]; and grid-template-rows: [a] auto [b] auto [c]; +PASS 'emptyGrid' with: grid-template-columns: auto [b] auto [c]; and grid-template-rows: auto [b] auto [c]; +PASS 'grid' with: grid-template-columns: auto [b] auto [c]; and grid-template-rows: auto [b] auto [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto auto [c]; and grid-template-rows: [a] auto auto [c]; +PASS 'grid' with: grid-template-columns: [a] auto auto [c]; and grid-template-rows: [a] auto auto [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto [b] auto; and grid-template-rows: [a] auto [b] auto; +PASS 'grid' with: grid-template-columns: [a] auto [b] auto; and grid-template-rows: [a] auto [b] auto; +PASS 'emptyGrid' with: grid-template-columns: [a] auto auto; and grid-template-rows: [a] auto auto; +PASS 'grid' with: grid-template-columns: [a] auto auto; and grid-template-rows: [a] auto auto; +PASS 'emptyGrid' with: grid-template-columns: auto [b] auto; and grid-template-rows: auto [b] auto; +PASS 'grid' with: grid-template-columns: auto [b] auto; and grid-template-rows: auto [b] auto; +PASS 'emptyGrid' with: grid-template-columns: auto auto [c]; and grid-template-rows: auto auto [c]; +PASS 'grid' with: grid-template-columns: auto auto [c]; and grid-template-rows: auto auto [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto [a] auto [a]; and grid-template-rows: [a] auto [a] auto [a]; +PASS 'grid' with: grid-template-columns: [a] auto [a] auto [a]; and grid-template-rows: [a] auto [a] auto [a]; +PASS 'emptyGrid' with: grid-template-columns: [a b c] auto [a b c] auto [a b c]; and grid-template-rows: [a b c] auto [a b c] auto [a b c]; +PASS 'grid' with: grid-template-columns: [a b c] auto [a b c] auto [a b c]; and grid-template-rows: [a b c] auto [a b c] auto [a b c]; +PASS 'emptyGrid' with: grid-template-columns: [a] 40em [b] 100px [c] 15% [d]; and grid-template-rows: [z] 50px [y] 20em [x] 10% [w]; +PASS 'grid' with: grid-template-columns: [a] 40em [b] 100px [c] 15% [d]; and grid-template-rows: [z] 50px [y] 20em [x] 10% [w]; +PASS 'emptyGrid' with: grid-template-columns: [a] 200px [b] 1fr [c]; and grid-template-rows: [z] 1fr [y] 100px [x]; +PASS 'grid' with: grid-template-columns: [a] 200px [b] 1fr [c]; and grid-template-rows: [z] 1fr [y] 100px [x]; +PASS 'emptyGrid' with: grid-template-columns: [a] min-content [b] 1fr [c] calc(20px + 10%) [d] minmax(30em, 50em) [e]; and grid-template-rows: [z] min-content [y] 1fr [x] calc(10% + 40px) [w] minmax(3em, 5em) [v]; +PASS 'grid' with: grid-template-columns: [a] min-content [b] 1fr [c] calc(20px + 10%) [d] minmax(30em, 50em) [e]; and grid-template-rows: [z] min-content [y] 1fr [x] calc(10% + 40px) [w] minmax(3em, 5em) [v]; +PASS 'emptyGrid' with: grid-template-columns: [a]; and grid-template-rows: [a]; +FAIL 'grid' with: grid-template-columns: [a]; and grid-template-rows: [a]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a b]; and grid-template-rows: [a b]; +FAIL 'grid' with: grid-template-columns: [a b]; and grid-template-rows: [a b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a] none [b]; and grid-template-rows: [a] none [b]; +FAIL 'grid' with: grid-template-columns: [a] none [b]; and grid-template-rows: [a] none [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a] [b]; and grid-template-rows: [a] [b]; +FAIL 'grid' with: grid-template-columns: [a] [b]; and grid-template-rows: [a] [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: a auto b; and grid-template-rows: a auto b; +FAIL 'grid' with: grid-template-columns: a auto b; and grid-template-rows: a auto b; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: (a) auto (b); and grid-template-rows: (a) auto (b); +FAIL 'grid' with: grid-template-columns: (a) auto (b); and grid-template-rows: (a) auto (b); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 'a' auto 'b'; and grid-template-rows: 'a' auto 'b'; +FAIL 'grid' with: grid-template-columns: 'a' auto 'b'; and grid-template-rows: 'a' auto 'b'; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: "a" auto "b"; and grid-template-rows: "a" auto "b"; +FAIL 'grid' with: grid-template-columns: "a" auto "b"; and grid-template-rows: "a" auto "b"; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a, b] auto [a, b]; and grid-template-rows: [a, b] auto [a, b]; +FAIL 'grid' with: grid-template-columns: [a, b] auto [a, b]; and grid-template-rows: [a, b] auto [a, b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a] [b] auto [c d] [e]; and grid-template-rows: [a] [b] auto [c d] [e]; +FAIL 'grid' with: grid-template-columns: [a] [b] auto [c d] [e]; and grid-template-rows: [a] [b] auto [c d] [e]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a [b]] auto [c]; and grid-template-rows: [a [b]] auto [c]; +FAIL 'grid' with: grid-template-columns: [a [b]] auto [c]; and grid-template-rows: [a [b]] auto [c]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a] auto [[b]]; and grid-template-rows: [a] auto [[b]]; +FAIL 'grid' with: grid-template-columns: [a] auto [[b]]; and grid-template-rows: [a] auto [[b]]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a auto [b]; and grid-template-rows: [a auto [b]; +FAIL 'grid' with: grid-template-columns: [a auto [b]; and grid-template-rows: [a auto [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a 100px] auto [b]; and grid-template-rows: [a 100px] auto [b]; +FAIL 'grid' with: grid-template-columns: [a 100px] auto [b]; and grid-template-rows: [a 100px] auto [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a 50%] auto [b]; and grid-template-rows: [a 50%] auto [b]; +FAIL 'grid' with: grid-template-columns: [a 50%] auto [b]; and grid-template-rows: [a 50%] auto [b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [5] auto [10]; and grid-template-rows: [5] auto [10]; +FAIL 'grid' with: grid-template-columns: [5] auto [10]; and grid-template-rows: [5] auto [10]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [a.] auto [b*]; and grid-template-rows: [a.] auto [b*]; +FAIL 'grid' with: grid-template-columns: [a.] auto [b*]; and grid-template-rows: [a.] auto [b*]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [#a] auto [$b]; and grid-template-rows: [#a] auto [$b]; +FAIL 'grid' with: grid-template-columns: [#a] auto [$b]; and grid-template-rows: [#a] auto [$b]; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [initial] auto; and grid-template-rows: [initial] auto; +FAIL 'grid' with: grid-template-columns: [initial] auto; and grid-template-rows: [initial] auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [inherit] auto; and grid-template-rows: [inherit] auto; +FAIL 'grid' with: grid-template-columns: [inherit] auto; and grid-template-rows: [inherit] auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: [default] auto; and grid-template-rows: [default] auto; +FAIL 'grid' with: grid-template-columns: [default] auto; and grid-template-rows: [default] auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-repeat-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-repeat-001-expected.txt new file mode 100644 index 0000000..f55955d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-repeat-001-expected.txt
@@ -0,0 +1,43 @@ +This is a testharness.js-based test. +PASS 'emptyGrid' with: grid-template-columns: repeat(1, auto); and grid-template-rows: repeat(1, auto); +PASS 'grid' with: grid-template-columns: repeat(1, auto); and grid-template-rows: repeat(1, auto); +PASS 'emptyGrid' with: grid-template-columns: repeat(2, auto); and grid-template-rows: repeat(2, auto); +PASS 'grid' with: grid-template-columns: repeat(2, auto); and grid-template-rows: repeat(2, auto); +PASS 'emptyGrid' with: grid-template-columns: repeat(2, minmax(50px, calc(50px + 50%))); and grid-template-rows: repeat(2, minmax(50px, calc(50px + 50%))); +PASS 'grid' with: grid-template-columns: repeat(2, minmax(50px, calc(50px + 50%))); and grid-template-rows: repeat(2, minmax(50px, calc(50px + 50%))); +PASS 'emptyGrid' with: grid-template-columns: repeat(5, 10%); and grid-template-rows: repeat(5, 10%); +PASS 'grid' with: grid-template-columns: repeat(5, 10%); and grid-template-rows: repeat(5, 10%); +PASS 'emptyGrid' with: grid-template-columns: max-content repeat(2, 25%) 1fr; and grid-template-rows: 100px repeat(2, 25%) 1fr; +PASS 'grid' with: grid-template-columns: max-content repeat(2, 25%) 1fr; and grid-template-rows: max-content repeat(2, 25%) 1fr; +PASS 'emptyGrid' with: grid-template-columns: repeat(2, min-content 50px); and grid-template-rows: repeat(2, min-content 50px); +PASS 'grid' with: grid-template-columns: repeat(2, min-content 50px); and grid-template-rows: repeat(2, min-content 50px); +PASS 'emptyGrid' with: grid-template-columns: repeat(2, [a] minmax(50px, 100px) [b] 25em [c]); and grid-template-rows: repeat(2, [a] minmax(50px, 100px) [b] 25em [c]); +PASS 'grid' with: grid-template-columns: repeat(2, [a] minmax(50px, 100px) [b] 25em [c]); and grid-template-rows: repeat(2, [a] minmax(50px, 100px) [b] 25em [c]); +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(2, auto [b] 100px) [c]; and grid-template-rows: [a] repeat(2, auto [b] 100px) [c]; +PASS 'grid' with: grid-template-columns: [a] repeat(2, auto [b] 100px) [c]; and grid-template-rows: [a] repeat(2, auto [b] 100px) [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] auto repeat(2, [b] 100px) [c]; and grid-template-rows: [a] auto repeat(2, [b] 100px) [c]; +PASS 'grid' with: grid-template-columns: [a] auto repeat(2, [b] 100px) [c]; and grid-template-rows: [a] auto repeat(2, [b] 100px) [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(2, auto [b]) 100px [c]; and grid-template-rows: [a] repeat(2, auto [b]) 100px [c]; +PASS 'grid' with: grid-template-columns: [a] repeat(2, auto [b]) 100px [c]; and grid-template-rows: [a] repeat(2, auto [b]) 100px [c]; +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(2, [b] 100px); and grid-template-rows: [a] repeat(2, [b] 100px); +PASS 'grid' with: grid-template-columns: [a] repeat(2, [b] 100px); and grid-template-rows: [a] repeat(2, [b] 100px); +PASS 'emptyGrid' with: grid-template-columns: [a] repeat(2, [b] auto [c]) [d]; and grid-template-rows: [a] repeat(2, [b] auto [c]) [d]; +PASS 'grid' with: grid-template-columns: [a] repeat(2, [b] auto [c]) [d]; and grid-template-rows: [a] repeat(2, [b] auto [c]) [d]; +PASS 'emptyGrid' with: grid-template-columns: [a] min-content repeat(2, [b] 1fr [c] calc(20px + 10%)) [d] minmax(30em, 50em) [e]; and grid-template-rows: [z] min-content repeat(2, [y] 1fr [x] calc(10% + 40px)) [w] minmax(3em, 5em) [v]; +PASS 'grid' with: grid-template-columns: [a] min-content repeat(2, [b] 1fr [c] calc(20px + 10%)) [d] minmax(30em, 50em) [e]; and grid-template-rows: [z] min-content repeat(2, [y] 1fr [x] calc(10% + 40px)) [w] minmax(3em, 5em) [v]; +PASS 'emptyGrid' with: grid-template-columns: repeat(-1, auto); and grid-template-rows: repeat(-1, auto); +FAIL 'grid' with: grid-template-columns: repeat(-1, auto); and grid-template-rows: repeat(-1, auto); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: repeat(auto, 2); and grid-template-rows: repeat(auto, 2); +FAIL 'grid' with: grid-template-columns: repeat(auto, 2); and grid-template-rows: repeat(auto, 2); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: repeat 2, auto; and grid-template-rows: repeat 2, auto; +FAIL 'grid' with: grid-template-columns: repeat 2, auto; and grid-template-rows: repeat 2, auto; assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: repeat(2 auto); and grid-template-rows: repeat(2 auto); +FAIL 'grid' with: grid-template-columns: repeat(2 auto); and grid-template-rows: repeat(2 auto); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 100px (repeat 2, auto); and grid-template-rows: (repeat 2, auto); +FAIL 'grid' with: grid-template-columns: 100px (repeat 2, auto); and grid-template-rows: (repeat 2, auto); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: repeat(2, 50px repeat(2, 100px)); and grid-template-rows: repeat(2, 50px repeat(2, 100px)); +FAIL 'grid' with: grid-template-columns: repeat(2, 50px repeat(2, 100px)); and grid-template-rows: repeat(2, 50px repeat(2, 100px)); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +PASS 'emptyGrid' with: grid-template-columns: 100px repeat(2, [a]); and grid-template-rows: 100px repeat(2, [a]); +FAIL 'grid' with: grid-template-columns: 100px repeat(2, [a]); and grid-template-rows: 100px repeat(2, [a]); assert_in_array: gridTemplateColumns value "90px" not in array ["none"] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001-expected.txt new file mode 100644 index 0000000..c9eac7b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001-expected.txt
@@ -0,0 +1,80 @@ +This is a testharness.js-based test. +Found 76 tests; 40 PASS, 36 FAIL, 0 TIMEOUT, 0 NOTRUN. +FAIL 'grid' with: grid-template-columns: ; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "110px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: ; and grid-template-rows: ; +FAIL 'grid' with: grid-template-columns: auto auto; and grid-template-rows: ; assert_in_array: gridTemplateRows value "10px 20px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: auto auto; and grid-template-rows: ; +FAIL 'grid' with: grid-template-columns: 60px; and grid-template-rows: ; assert_in_array: gridTemplateRows value "20px 20px 20px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: 60px; and grid-template-rows: ; +FAIL 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: ; assert_in_array: gridTemplateRows value "20px 20px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: ; +FAIL 'grid' with: grid-template-columns: ; and grid-template-rows: 50px; assert_in_array: gridTemplateColumns value "110px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: ; and grid-template-rows: 50px; +FAIL 'grid' with: grid-template-columns: ; and grid-template-rows: 50px 30px; assert_in_array: gridTemplateColumns value "110px" not in array ["none"] +PASS Children of 'grid' with: grid-template-columns: ; and grid-template-rows: 50px 30px; +FAIL 'grid' with: grid-template-columns: 60px; and grid-template-rows: 50px; assert_in_array: gridTemplateRows value "50px 20px 20px" not in array ["50px"] +PASS Children of 'grid' with: grid-template-columns: 60px; and grid-template-rows: 50px; +FAIL 'grid' with: grid-template-columns: 60px; and grid-template-rows: 50px 30px; assert_in_array: gridTemplateRows value "50px 30px 20px" not in array ["50px 30px"] +PASS Children of 'grid' with: grid-template-columns: 60px; and grid-template-rows: 50px 30px; +FAIL 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px; assert_in_array: gridTemplateRows value "50px 20px" not in array ["50px"] +PASS Children of 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px; +PASS 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px 30px; +PASS Children of 'grid' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px 30px; +FAIL 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "110px 0px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: ; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 0px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: ; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px 50px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: ; +FAIL 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "110px 0px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px; +FAIL 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px 50px; assert_in_array: gridTemplateColumns value "110px 0px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px 50px; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "60px 0px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px 50px; assert_in_array: gridTemplateColumns value "60px 0px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px 50px; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px 50px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: 60px; +FAIL 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: 60px 50px; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px 50px"] +PASS Children of 'gridItemsPositions' with: grid-template-columns: 60px 50px; and grid-template-rows: 60px 50px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "100px 110px 50px" not in array ["none"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: ; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: auto auto; assert_in_array: gridTemplateColumns value "110px 50px" not in array ["none"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: auto auto; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 110px 50px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: ; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "100px 60px 50px" not in array ["100px 60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: ; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: 50px; assert_in_array: gridTemplateColumns value "100px 110px 50px" not in array ["none"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: 50px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: 50px 30px; assert_in_array: gridTemplateColumns value "110px 50px" not in array ["none"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: ; and grid-template-rows: 50px 30px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: 50px; assert_in_array: gridTemplateColumns value "60px 110px 50px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: 50px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: 50px 30px; assert_in_array: gridTemplateColumns value "60px 50px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 60px; and grid-template-rows: 50px 30px; +FAIL 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px; assert_in_array: gridTemplateColumns value "100px 60px 50px" not in array ["100px 60px"] +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px; +PASS 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px 30px; +PASS Children of 'gridAutoFlowColumn' with: grid-template-columns: 100px 60px; and grid-template-rows: 50px 30px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "110px 50px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: ; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: ; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: ; assert_in_array: gridTemplateColumns value "60px 70px 0px 0px 100px" not in array ["60px 70px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: ; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "110px 50px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px 70px; assert_in_array: gridTemplateColumns value "110px 50px 0px 0px 100px" not in array ["none"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: ; and grid-template-rows: 60px 70px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px 70px; assert_in_array: gridTemplateColumns value "60px 50px 0px 0px 100px" not in array ["60px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px; and grid-template-rows: 60px 70px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: 60px; assert_in_array: gridTemplateColumns value "60px 70px 0px 0px 100px" not in array ["60px 70px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: 60px; +FAIL 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: 60px 70px; assert_in_array: gridTemplateColumns value "60px 70px 0px 0px 100px" not in array ["60px 70px"] +PASS Children of 'gridAutoFlowColumnItemsPositions' with: grid-template-columns: 60px 70px; and grid-template-rows: 60px 70px; +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-layout-properties-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-layout-properties-expected.txt index 591d959d..b669306 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-layout-properties-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-layout-properties-expected.txt
@@ -1,10 +1,10 @@ This is a testharness.js-based test. -Found 140 tests; 119 PASS, 21 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 140 tests; 105 PASS, 35 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS display: grid PASS display: inline-grid PASS grid-template-columns -PASS grid-template-columns.initial -PASS grid-template-columns.none +FAIL grid-template-columns.initial assert_equals: initial value of grid-template-columns should be none expected "none" but got "150px" +FAIL grid-template-columns.none assert_equals: none expected "none" but got "150px" PASS grid-template-columns.<line-names> PASS grid-template-columns.<track-size>.auto PASS grid-template-columns.<track-size>.<track-breadth>.<length> @@ -13,32 +13,32 @@ PASS grid-template-columns.<track-size>.<track-breadth>.min-content PASS grid-template-columns.<track-size>.<track-breadth>.max-content PASS grid-template-columns.<track-size>.<track-breadth>.minmax() -PASS grid-template-columns.reset +FAIL grid-template-columns.reset assert_equals: reset expected "none" but got "150px" PASS grid-template-rows -PASS grid-template-rows.initial -PASS grid-template-rows.none -PASS grid-template-rows.<line-names> -PASS grid-template-rows.<track-size>.auto -PASS grid-template-rows.<track-size>.<track-breadth>.<length> -PASS grid-template-rows.<track-size>.<track-breadth>.<percentage> -PASS grid-template-rows.<track-size>.<track-breadth>.<flex> -PASS grid-template-rows.<track-size>.<track-breadth>.min-content -PASS grid-template-rows.<track-size>.<track-breadth>.max-content -PASS grid-template-rows.<track-size>.<track-breadth>.minmax() -PASS grid-template-rows.reset +FAIL grid-template-rows.initial assert_equals: initial value of grid-template-rows should be none expected "none" but got "50px 50px 50px" +FAIL grid-template-rows.none assert_equals: none expected "none" but got "50px 50px 50px" +FAIL grid-template-rows.<line-names> assert_equals: <line-names> expected "[a] 50px [b] 50px [c]" but got "[a] 50px [b] 50px [c] 50px" +FAIL grid-template-rows.<track-size>.auto assert_equals: <track-size>.auto expected "50px" but got "50px 50px 50px" +FAIL grid-template-rows.<track-size>.<track-breadth>.<length> assert_equals: <track-size>.<track-breadth>.<length> expected "100px" but got "100px 50px 50px" +FAIL grid-template-rows.<track-size>.<track-breadth>.<percentage> assert_equals: <track-size>.<track-breadth>.<percentage> expected "150px" but got "150px 50px 50px" +FAIL grid-template-rows.<track-size>.<track-breadth>.<flex> assert_equals: <track-size>.<track-breadth>.<flex> expected "50px" but got "50px 50px 50px" +FAIL grid-template-rows.<track-size>.<track-breadth>.min-content assert_equals: <track-size>.<track-breadth>.min-content expected "50px" but got "50px 50px 50px" +FAIL grid-template-rows.<track-size>.<track-breadth>.max-content assert_equals: <track-size>.<track-breadth>.max-content expected "50px" but got "50px 50px 50px" +FAIL grid-template-rows.<track-size>.<track-breadth>.minmax() assert_equals: <track-size>.<track-breadth>.minmax() expected "200px" but got "200px 50px 50px" +FAIL grid-template-rows.reset assert_equals: reset expected "none" but got "50px 50px 50px" PASS grid-template-areas PASS grid-template-areas.initial PASS grid-template-areas.none PASS grid-template-areas.<string>+ PASS grid-template-areas.reset PASS grid-template -FAIL grid-template.initial assert_equals: initial value of grid-template should be none expected "none" but got "none / none / none" -FAIL grid-template.none assert_equals: none expected "none" but got "none / none / none" +FAIL grid-template.initial assert_equals: initial value of grid-template should be none expected "none" but got "50px 50px 50px / 150px / none" +FAIL grid-template.none assert_equals: none expected "none" but got "50px 50px 50px / 150px / none" FAIL grid-template.<grid-template-rows> / <grid-template-columns> assert_equals: <grid-template-rows> / <grid-template-columns> expected "100px 100px / 200px 200px" but got "" FAIL grid-template.<line-names> assert_equals: <line-names> expected "[a] auto [b] auto [c] / [d] auto [e] auto [f]" but got "" FAIL grid-template.<string>+ assert_equals: <string>+ expected "\"a b\" \"a b\"" but got "" FAIL grid-template.<string><track-size>+ assert_equals: <string><track-size>+ expected "100px / \"a b\" 50px" but got "" -FAIL grid-template.reset assert_equals: reset expected "none" but got "none / none / none" +FAIL grid-template.reset assert_equals: reset expected "none" but got "50px 50px 50px / 150px / none" PASS grid-auto-columns PASS grid-auto-columns.initial PASS grid-auto-columns.<track-size>.auto
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-columns-computed-withcontent-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-columns-computed-withcontent-expected.txt new file mode 100644 index 0000000..5640134 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-columns-computed-withcontent-expected.txt
@@ -0,0 +1,33 @@ +This is a testharness.js-based test. +FAIL Property grid-template-columns value 'none' assert_equals: expected "none" but got "300px" +PASS Property grid-template-columns value '20%' +PASS Property grid-template-columns value 'calc(-0.5em + 10px)' +PASS Property grid-template-columns value 'calc(0.5em + 10px)' +PASS Property grid-template-columns value 'calc(30% + 40px)' +PASS Property grid-template-columns value '5fr' +PASS Property grid-template-columns value 'min-content' +PASS Property grid-template-columns value 'max-content' +PASS Property grid-template-columns value 'auto' +PASS Property grid-template-columns value 'minmax(10px, auto)' +PASS Property grid-template-columns value 'minmax(20%, max-content)' +PASS Property grid-template-columns value 'minmax(min-content, calc(-0.5em + 10px))' +PASS Property grid-template-columns value 'minmax(auto, 0)' +PASS Property grid-template-columns value 'fit-content(70px)' +PASS Property grid-template-columns value 'fit-content(20%)' +PASS Property grid-template-columns value 'fit-content(calc(-0.5em + 10px))' +PASS Property grid-template-columns value 'repeat(1, 10px)' +PASS Property grid-template-columns value 'repeat(1, [one two] 20%)' +PASS Property grid-template-columns value 'repeat(2, minmax(10px, auto))' +PASS Property grid-template-columns value 'repeat(2, fit-content(20%) [three four] 30px 40px [five six])' +PASS Property grid-template-columns value 'min-content repeat(5, minmax(10px, auto))' +PASS Property grid-template-columns value '[] 150px [] 1fr []' +PASS Property grid-template-columns value 'repeat(auto-fill, 200px)' +PASS Property grid-template-columns value 'repeat(auto-fit, [one] 20%)' +PASS Property grid-template-columns value 'repeat(auto-fill, minmax(100px, 5fr) [two])' +PASS Property grid-template-columns value 'repeat(auto-fit, [three] minmax(max-content, 6em) [four])' +PASS Property grid-template-columns value '[a] 21px [b] repeat(auto-fill, [c] 22px [d] 23px [e]) [f] 24px [g]' +PASS Property grid-template-columns value '[a] 21px [b c] repeat(auto-fill, [d e] 22px [f g h] 23px [i j k l]) [m n] 24px [o]' +PASS Property grid-template-columns value '[a] repeat(2, [b] 20px [c d] 21px [e f g]) [h i] repeat(auto-fit, [j] 22px [k l m] 23px [n o p q]) [r s]' +PASS Property grid-template-columns value '[one] repeat(2, minmax(50px, auto)) [two] 30px [three] repeat(auto-fill, 10px) 40px [four five] repeat(2, minmax(200px, auto)) [six]' +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-rows-computed-withcontent-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-rows-computed-withcontent-expected.txt new file mode 100644 index 0000000..25a078e2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-rows-computed-withcontent-expected.txt
@@ -0,0 +1,30 @@ +This is a testharness.js-based test. +FAIL Property grid-template-rows value 'none' assert_equals: expected "none" but got "600px" +PASS Property grid-template-rows value '20%' +PASS Property grid-template-rows value 'calc(-0.5em + 10px)' +PASS Property grid-template-rows value 'calc(0.5em + 10px)' +PASS Property grid-template-rows value 'calc(30% + 40px)' +PASS Property grid-template-rows value '5fr' +PASS Property grid-template-rows value 'min-content' +PASS Property grid-template-rows value 'max-content' +PASS Property grid-template-rows value 'auto' +PASS Property grid-template-rows value 'minmax(10px, auto)' +PASS Property grid-template-rows value 'minmax(20%, max-content)' +PASS Property grid-template-rows value 'minmax(min-content, calc(-0.5em + 10px))' +PASS Property grid-template-rows value 'minmax(auto, 0)' +PASS Property grid-template-rows value 'fit-content(70px)' +PASS Property grid-template-rows value 'fit-content(20%)' +PASS Property grid-template-rows value 'fit-content(calc(-0.5em + 10px))' +PASS Property grid-template-rows value 'repeat(1, 10px)' +PASS Property grid-template-rows value 'repeat(1, [one two] 20%)' +PASS Property grid-template-rows value 'repeat(2, minmax(10px, auto))' +PASS Property grid-template-rows value 'repeat(2, fit-content(20%) [three four] 30px 40px [five six])' +PASS Property grid-template-rows value 'min-content repeat(5, minmax(10px, auto))' +PASS Property grid-template-rows value '[] 150px [] 1fr []' +PASS Property grid-template-rows value 'repeat(auto-fill, 200px)' +PASS Property grid-template-rows value 'repeat(auto-fit, [one] 20%)' +PASS Property grid-template-rows value 'repeat(auto-fill, minmax(100px, 5fr) [two])' +PASS Property grid-template-rows value 'repeat(auto-fit, [three] minmax(max-content, 6em) [four])' +PASS Property grid-template-rows value '[one] repeat(2, minmax(50px, auto)) [two] 30px [three] repeat(auto-fill, 10px) 40px [four five] repeat(2, minmax(200px, auto)) [six]' +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-descendant-text-mutated-001.html b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-descendant-text-mutated-001.html new file mode 100644 index 0000000..e41dacc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-descendant-text-mutated-001.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>CSS Masking: Test ancestors update as text descendants change</title> +<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com"> +<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-clip-path"> +<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=901851"> +<link rel="match" href="reference/clip-path-descendant-text-mutated-001-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="assert" content="This test ensures that ancestors are updated properly when a text descendant of clip path property changes."> +<script src="/common/reftest-wait.js"></script> +<script src="/common/rendering-utils.js"></script> +<style> +#target { + width: 100px; + height: 100px; + background-color: green; + border-right: 100px solid red; + clip-path: url(#clip); +} +</style> +<div id="target"></div> +<svg> + <clipPath id="clip"> + <text id="text" y="80" font-family="Ahem" font-size="100">XX</text> + </clipPath> +</svg> +<script> + waitForAtLeastOneFrame().then(function() { + text.firstChild.data = 'X'; + takeScreenshot(); + }); +</script>
diff --git a/third_party/blink/web_tests/css3/masking/clip-path-descendant-text-mutated-expected.html b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/reference/clip-path-descendant-text-mutated-001-ref.html similarity index 100% rename from third_party/blink/web_tests/css3/masking/clip-path-descendant-text-mutated-expected.html rename to third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/reference/clip-path-descendant-text-mutated-001-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-revert.html b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-revert.html index 3d0473ea..33c395d2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-revert.html +++ b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-revert.html
@@ -14,11 +14,33 @@ --inherited: revert; --non-inherited: revert; } + + @keyframes revert_animation { + from { + --animated-inherited: revert; + --animated-non-inherited: revert; + } + to { + --animated-inherited: 100px; + --animated-non-inherited: 100px; + } + } + + #animated_parent { + --animated-inherited: 0px; + } + #animated_child { + animation: revert_animation 10s -5s linear paused; + } </style> <div id=parent> <div id=child> </div> </div> +<div id=animated_parent> + <div id=animated_child> + </div> +</div> <script> CSS.registerProperty({ @@ -35,6 +57,20 @@ inherits: false }); +CSS.registerProperty({ + name: "--animated-non-inherited", + syntax: "<length>", + initialValue: "0px", + inherits: false +}); + +CSS.registerProperty({ + name: "--animated-inherited", + syntax: "<length>", + initialValue: "10000px", + inherits: true +}); + test(function(){ let cs = getComputedStyle(child); assert_equals(cs.getPropertyValue('--inherited'), '10px'); @@ -45,4 +81,14 @@ assert_equals(cs.getPropertyValue('--non-inherited'), '0px'); }, 'Non-inherited registered custom property can be reverted'); +test(function(){ + let cs = getComputedStyle(animated_child); + assert_equals(cs.getPropertyValue('--animated-non-inherited'), '50px'); +}, 'Non-inherited registered custom property can be reverted in animation'); + +test(function(){ + let cs = getComputedStyle(animated_child); + assert_equals(cs.getPropertyValue('--animated-inherited'), '50px'); +}, 'Inherited registered custom property can be reverted in animation'); + </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-003-ref.html new file mode 100644 index 0000000..9dfc24c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-003-ref.html
@@ -0,0 +1,13 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<style> + div { + border: 1px solid green; + background: green; + margin-top: 100px; + width: 100px; + height: 100px; + } +</style> +<div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-003.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-003.html new file mode 100644 index 0000000..d5da92d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-003.html
@@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: will-change: backdrop-filter should generate a containing block for absolute positioned elements.</title> +<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953"> +<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="will-change-abspos-cb-003-ref.html"> +<style> + .container { + border: 1px solid green; + background: red; + width: 100px; + height: 100px; + margin-top: 100px; + will-change: backdrop-filter; + } + .abspos { + position: absolute; + top: 0; + left: 0; + background: green; + height: 100px; + width: 100px; + } +</style> +<div class="container"> + <div class="abspos"></div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-004-ref.html new file mode 100644 index 0000000..9dfc24c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-004-ref.html
@@ -0,0 +1,13 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<style> + div { + border: 1px solid green; + background: green; + margin-top: 100px; + width: 100px; + height: 100px; + } +</style> +<div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-004.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-004.html new file mode 100644 index 0000000..7bc5d92 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-004.html
@@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: will-change: backdrop-filter should generate a containing block for fixed positioned elements.</title> +<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953"> +<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="will-change-fixedpos-cb-004-ref.html"> +<style> + .container { + border: 1px solid green; + background: red; + width: 100px; + height: 100px; + margin-top: 100px; + will-change: backdrop-filter; + } + .fixedpos { + position: fixed; + top: 0; + left: 0; + background: green; + height: 100px; + width: 100px; + } +</style> +<div class="container"> + <div class="fixedpos"></div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-005-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-005-ref.html new file mode 100644 index 0000000..7823c16 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-005-ref.html
@@ -0,0 +1,12 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<style> + div { + background: green; + margin-left: 100px; + width: 100px; + height: 100px; + } +</style> +<div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-005.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-005.html new file mode 100644 index 0000000..7cd88bd3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-005.html
@@ -0,0 +1,27 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: will-change: backdrop-filter on an inline should generate a containing block for fixed positioned elements.</title> +<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953"> +<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="will-change-fixedpos-cb-005-ref.html"> +<style> + .inline { + margin-left: 100px; + will-change: backdrop-filter; + } + .fixedpos { + position: fixed; + top: 0; + left: 0; + background: green; + height: 100px; + width: 100px; + } +</style> +<span class="inline"> + <!-- "FAIL" should be hidden by the green box and should not be visible. --> + FAIL + <div class="fixedpos"></div> +</span>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-006-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-006-ref.html new file mode 100644 index 0000000..05957327c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-006-ref.html
@@ -0,0 +1,31 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<style> + body { + margin: 0; + } + .hidden { + width: 100px; + height: 100px; + margin-left: 100px; + margin-top: 200px; + } + .fixedpos { + position: fixed; + top: 100px; + left: 100px; + background: green; + height: 100px; + width: 100px; + } + .spacer { + height: 2000px; + } +</style> +<div class="hidden"></div> +<div class="fixedpos"></div> +<div class="spacer"></div> +<script> + window.onload = function() { window.scrollTo(0, 100); }; +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-006.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-006.html new file mode 100644 index 0000000..ec9eaa4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-006.html
@@ -0,0 +1,41 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: will-change: backdrop-filter on the root should not generate a containing block for fixed positioned elements.</title> +<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953"> +<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="will-change-fixedpos-cb-006-ref.html"> +<style> + html { + will-change: backdrop-filter; + } + body { + margin: 0; + } + .hidden { + width: 100px; + height: 100px; + background: red; + margin-left: 100px; + margin-top: 200px; + } + .fixedpos { + position: fixed; + top: 100px; + left: 100px; + background: green; + height: 100px; + width: 100px; + } + .spacer { + height: 2000px; + } +</style> +<!-- This object should be fully hidden by the fixed position object. --> +<div class="hidden"></div> +<div class="fixedpos"></div> +<div class="spacer"></div> +<script> + window.onload = function() { window.scrollTo(0, 100); }; +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-002-ref.html new file mode 100644 index 0000000..38138eb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-002-ref.html
@@ -0,0 +1,11 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<style> + div { + background: green; + width: 100px; + height: 100px; + } +</style> +<div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-002.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-002.html new file mode 100644 index 0000000..1cda23b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-002.html
@@ -0,0 +1,36 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: will-change: backdrop-filter should create a stacking context.</title> +<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953"> +<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="will-change-stacking-context-002-ref.html"> +<style> + .indicator { + position: absolute; + background-color: green; + z-index: 1; + } + .willchange { + will-change: backdrop-filter; + z-index: 0; + } + .child { + position: relative; + background-color: red; + z-index: 2; + } + .box { + width: 100px; + height: 100px; + } +</style> + +<div class="indicator box"></div> +<div class="willchange box"> + <!-- Because will-change: backdrop-filter creates a stacking context, this + child remains on bottom even though it has a higher z-index than the + indicator box. --> + <div class="child box"></div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-csstext.html b/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-csstext.html index 30d9bd87..afd5426 100644 --- a/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-csstext.html +++ b/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-csstext.html
@@ -97,6 +97,18 @@ }, 'invalid property does not appear'); + // https://github.com/w3c/csswg-drafts/issues/1033 + test(function() { + var elm = newElm(); + var style = elm.style; + + style.color = 'red'; + style.unknown = 'unknown'; + style.fontSize = '10pt'; + + assert_not_equals(getComputedStyle(elm).length, 0, "Should have a style"); + assert_equals(getComputedStyle(elm).cssText, "", "cssText is empty"); + }, 'cssText on computed style declaration returns the empty string'); </script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-custom-properties-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-custom-properties-expected.txt new file mode 100644 index 0000000..d9072d7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-custom-properties-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Custom properties are included in computed style assert_equals: Should show up in .length expected 291 but got 290 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-custom-properties.html b/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-custom-properties.html new file mode 100644 index 0000000..92cf2c8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/cssom/cssstyledeclaration-custom-properties.html
@@ -0,0 +1,19 @@ +<!doctype html> +<title>CSS Test: computed style declaration includes custom properties.</title> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="author" href="https://mozilla.org" title="Mozilla"> +<link rel="help" href="https://drafts.csswg.org/cssom/#dom-window-getcomputedstyle"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/1316"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div style="--foo:bar"></div> +<div></div> +<script> + test(function() { + let withCustom = getComputedStyle(document.querySelector("div")); + let withoutCustom = getComputedStyle(document.querySelector("div + div")); + assert_equals(withCustom.getPropertyValue("--foo"), "bar", "Should be returned from getPropertyValue"); + assert_equals(withCustom.length, withoutCustom.length + 1, "Should show up in .length"); + assert_equals(withCustom[withCustom.length - 1], "--foo", "Should be after all the non-custom properties"); + }, "Custom properties are included in computed style"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/filter-effects/fecomposite-non-zero-inoffset-001.html b/third_party/blink/web_tests/external/wpt/css/filter-effects/fecomposite-non-zero-inoffset-001.html new file mode 100644 index 0000000..b2d71cfa --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/filter-effects/fecomposite-non-zero-inoffset-001.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<title>CSS Filters: Correct destination rectangle in feComposite</title> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feMorphologyElement"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feFloodElement"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feCompositeElement"> +<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=391200"> +<link rel="match" href="reference/fecomposite-non-zero-inoffset-001-ref.html"> +<meta name="assert" content="This test ensures that feComposite with 'operator=in' works properly on the correct destination rectangle."> +<body> + <div style="filter: url('#filter'); width: 100px; height: 100px; padding: 1px;"> + <div style="background-color: red; width: 98px; height: 98px;"></div> + </div> + <svg width="0" height="0"> + <filter id="filter"> + <feFlood result="outlineColor" flood-color="green"/> + <feMorphology in="SourceAlpha" operator="dilate" radius="1"/> + <feComposite operator="in" in="outlineColor"/> + </filter> + </svg> +</body>
diff --git a/third_party/blink/web_tests/css3/filters/fecomposite-non-zero-inoffset-expected.html b/third_party/blink/web_tests/external/wpt/css/filter-effects/reference/fecomposite-non-zero-inoffset-001-ref.html similarity index 100% rename from third_party/blink/web_tests/css3/filters/fecomposite-non-zero-inoffset-expected.html rename to third_party/blink/web_tests/external/wpt/css/filter-effects/reference/fecomposite-non-zero-inoffset-001-ref.html
diff --git a/third_party/blink/web_tests/css3/filters/remove-filter-repaint-expected.html b/third_party/blink/web_tests/external/wpt/css/filter-effects/reference/remove-filter-repaint-ref.html similarity index 82% rename from third_party/blink/web_tests/css3/filters/remove-filter-repaint-expected.html rename to third_party/blink/web_tests/external/wpt/css/filter-effects/reference/remove-filter-repaint-ref.html index 46fd1a3..bde2a93 100644 --- a/third_party/blink/web_tests/css3/filters/remove-filter-repaint-expected.html +++ b/third_party/blink/web_tests/external/wpt/css/filter-effects/reference/remove-filter-repaint-ref.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html> <head> - <title>filter-bug</title> + <title>CSS Filters: Repaint a compositing layer</title> <style> .backdrop { position: absolute; @@ -35,8 +35,7 @@ <body> <div class="composited backdrop"></div> <div class="overlay"> - <span id="play" class="play changed">this should be - visible</span> + <span id="play" class="play changed">this should be visible</span> </div> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/filter-effects/remove-filter-repaint.html b/third_party/blink/web_tests/external/wpt/css/filter-effects/remove-filter-repaint.html new file mode 100644 index 0000000..a9af9db3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/filter-effects/remove-filter-repaint.html
@@ -0,0 +1,60 @@ +<!DOCTYPE html> +<html> +<head> + <title>CSS Filters: Repaint a compositing layer</title> + <link rel="author" title="Simon Fraser" href="mailto:simon.fraser@apple.com>"> + <link rel="help" href="https://drafts.fxtf.org/filter-effects/#dropshadowEquivalent"> + <link rel="issue" href="https://bugs.webkit.org/show_bug.cgi?id=120135"> + <link rel="issue" href="https://chromiumcodereview.appspot.com/23526037"> + <link rel="match" href="reference/remove-filter-repaint-ref.html"> + <meta name="assert" content="This test ensures that we can repaint the compositing layer when removing a filter on an inline child of a compositing layer."> + <script src="/common/reftest-wait.js"></script> + <style> + .backdrop { + position: absolute; + top: 0; + left: 0; + height: 100px; + width: 100px; + background-color: silver; + } + .overlay { + position: absolute; + top: 50px; + left: 50px; + width: 400px; + height: 100px; + background: gray; + box-shadow: 0 0 4px black; + } + .play { + font-size: 36pt; + background-color: navy; + color: white; + } + .play.changed { + filter: drop-shadow(black 0 0 5px); + } + .composited { + will-change: transform; + } + </style> + <script> + function doTest() { + requestAnimationFrame(function() { + requestAnimationFrame(function() { + document.getElementById('play').classList.remove('changed'); + takeScreenshot(); + }); + }); + } + window.addEventListener('load', doTest, false); + </script> +</head> +<body> + <div class="composited backdrop"></div> + <div class="overlay"> + <span id="play" class="play changed">this should be visible</span> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt deleted file mode 100644 index 1046305..0000000 --- a/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -This is a testharness.js-based test. -PASS The method must exist -PASS It must return null when there are no matches -PASS It must return the first element when there are matches -FAIL Empty string ID values assert_equals: Even if there is an element with an empty-string ID attribute, it must not be returned expected null but got Element node <div id=""></div> -PASS It must return the first element when there are matches, using a template -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-label-element/clicking-interactive-content.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-label-element/clicking-interactive-content.html index 60a80fa..c448df0a 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-label-element/clicking-interactive-content.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-label-element/clicking-interactive-content.html
@@ -19,17 +19,6 @@ <select></select> <textarea></textarea> <video controls></video> - - <div tabindex=""></div> - - <!-- These are interesting in that even without tabindex, they could become - interactive with the addition/removal of an attribute. --> - <a tabindex=""></a> - <audio tabindex=""></audio> - <img tabindex=""> - <input type=hidden tabindex=""> - <object tabindex=""></object> - <video tabindex=""></video> </template> <script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html index 233168f5..be74ed68 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html
@@ -17,6 +17,16 @@ <input type=hidden> <object></object> <video></video> + + <!-- These are considered interactive content for the purpose of <label> in a + previous version of the HTML Standard, but no longer. --> + <a tabindex=""></a> + <audio tabindex=""></audio> + <div tabindex=""></div> + <img tabindex=""> + <input type=hidden tabindex=""> + <object tabindex=""></object> + <video tabindex=""></video> </template> <script>
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/add_cookie/add.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/add_cookie/add.py index c1a886a..30804c1 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/add_cookie/add.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/add_cookie/add.py
@@ -1,4 +1,5 @@ from datetime import datetime, timedelta +from six import text_type from webdriver.transport import Response @@ -59,11 +60,11 @@ cookie = session.cookies("hello") assert "domain" in cookie - assert isinstance(cookie["domain"], basestring) + assert isinstance(cookie["domain"], text_type) assert "name" in cookie - assert isinstance(cookie["name"], basestring) + assert isinstance(cookie["name"], text_type) assert "value" in cookie - assert isinstance(cookie["value"], basestring) + assert isinstance(cookie["value"], text_type) assert cookie["name"] == "hello" assert cookie["value"] == "world" @@ -89,11 +90,11 @@ cookie = session.cookies("hello") assert "name" in cookie - assert isinstance(cookie["name"], basestring) + assert isinstance(cookie["name"], text_type) assert "value" in cookie - assert isinstance(cookie["value"], basestring) + assert isinstance(cookie["value"], text_type) assert "domain" in cookie - assert isinstance(cookie["domain"], basestring) + assert isinstance(cookie["domain"], text_type) assert cookie["name"] == "hello" assert cookie["value"] == "world" @@ -118,9 +119,9 @@ cookie = session.cookies("hello") assert "name" in cookie - assert isinstance(cookie["name"], basestring) + assert isinstance(cookie["name"], text_type) assert "value" in cookie - assert isinstance(cookie["value"], basestring) + assert isinstance(cookie["value"], text_type) assert "expiry" in cookie assert isinstance(cookie["expiry"], int) @@ -143,9 +144,9 @@ cookie = session.cookies("hello") assert "name" in cookie - assert isinstance(cookie["name"], basestring) + assert isinstance(cookie["name"], text_type) assert "value" in cookie - assert isinstance(cookie["value"], basestring) + assert isinstance(cookie["value"], text_type) if "expiry" in cookie: assert cookie.get("expiry") is None @@ -168,11 +169,11 @@ cookie = session.cookies("hello") assert "name" in cookie - assert isinstance(cookie["name"], basestring) + assert isinstance(cookie["name"], text_type) assert "value" in cookie - assert isinstance(cookie["value"], basestring) + assert isinstance(cookie["value"], text_type) assert "domain" in cookie - assert isinstance(cookie["domain"], basestring) + assert isinstance(cookie["domain"], text_type) assert cookie["name"] == "hello" assert cookie["value"] == "world"
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/execute_async_script/collections.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/execute_async_script/collections.py index 14848da..484a247c 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/execute_async_script/collections.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/execute_async_script/collections.py
@@ -1,5 +1,7 @@ import os +from six import text_type + from tests.support.asserts import assert_same_element, assert_success from tests.support.inline import inline @@ -52,7 +54,7 @@ for expected, actual in zip(files, value): assert isinstance(actual, dict) assert "name" in actual - assert isinstance(actual["name"], basestring) + assert isinstance(actual["name"], text_type) assert os.path.basename(str(expected)) == actual["name"]
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/execute_script/collections.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/execute_script/collections.py index f939713..be0b3a01 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/execute_script/collections.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/execute_script/collections.py
@@ -1,5 +1,7 @@ import os +from six import text_type + from tests.support.asserts import assert_same_element, assert_success from tests.support.inline import inline @@ -45,7 +47,7 @@ for expected, actual in zip(files, value): assert isinstance(actual, dict) assert "name" in actual - assert isinstance(actual["name"], basestring) + assert isinstance(actual["name"], text_type) assert os.path.basename(str(expected)) == actual["name"]
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/get_alert_text/get.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/get_alert_text/get.py index d6fdda2d..ad0058e 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/get_alert_text/get.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/get_alert_text/get.py
@@ -1,3 +1,5 @@ +from six import text_type + from webdriver.error import NoSuchAlertException from tests.support.asserts import assert_error, assert_success @@ -27,7 +29,7 @@ assert isinstance(response.body, dict) assert "value" in response.body alert_text = response.body["value"] - assert isinstance(alert_text, basestring) + assert isinstance(alert_text, text_type) assert alert_text == "Hello" @@ -38,7 +40,7 @@ assert isinstance(response.body, dict) assert "value" in response.body confirm_text = response.body["value"] - assert isinstance(confirm_text, basestring) + assert isinstance(confirm_text, text_type) assert confirm_text == "Hello" @@ -49,7 +51,7 @@ assert isinstance(response.body, dict) assert "value" in response.body prompt_text = response.body["value"] - assert isinstance(prompt_text, basestring) + assert isinstance(prompt_text, text_type) assert prompt_text == "Enter Your Name: "
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/get_current_url/get.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/get_current_url/get.py index 39c28c61..c22e3d41 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/get_current_url/get.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/get_current_url/get.py
@@ -1,3 +1,5 @@ +from six import text_type + from tests.support import platform_name from tests.support.inline import inline from tests.support.asserts import assert_error, assert_success @@ -31,7 +33,7 @@ response = get_current_url(session) assert response.status == 200 - assert isinstance(response.body["value"], basestring) + assert isinstance(response.body["value"], text_type) def test_get_current_url_special_pages(session):
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/get_named_cookie/get.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/get_named_cookie/get.py index 9ea29c8..1fd5f9f 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/get_named_cookie/get.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/get_named_cookie/get.py
@@ -1,4 +1,6 @@ from datetime import datetime, timedelta +from six import integer_types, text_type + from tests.support.asserts import assert_error, assert_success from tests.support.helpers import clear_all_cookies @@ -28,13 +30,13 @@ # table for cookie conversion # https://w3c.github.io/webdriver/webdriver-spec.html#dfn-table-for-cookie-conversion assert "name" in cookie - assert isinstance(cookie["name"], basestring) + assert isinstance(cookie["name"], text_type) assert "value" in cookie - assert isinstance(cookie["value"], basestring) + assert isinstance(cookie["value"], text_type) assert "path" in cookie - assert isinstance(cookie["path"], basestring) + assert isinstance(cookie["path"], text_type) assert "domain" in cookie - assert isinstance(cookie["domain"], basestring) + assert isinstance(cookie["domain"], text_type) assert "secure" in cookie assert isinstance(cookie["secure"], bool) assert "httpOnly" in cookie @@ -60,11 +62,11 @@ assert isinstance(cookie, dict) assert "name" in cookie - assert isinstance(cookie["name"], basestring) + assert isinstance(cookie["name"], text_type) assert "value" in cookie - assert isinstance(cookie["value"], basestring) + assert isinstance(cookie["value"], text_type) assert "expiry" in cookie - assert isinstance(cookie["expiry"], (int, long)) + assert isinstance(cookie["expiry"], integer_types) assert cookie["name"] == "foo" assert cookie["value"] == "bar" @@ -99,9 +101,9 @@ assert isinstance(cookie, dict) assert "name" in cookie - assert isinstance(cookie["name"], basestring) + assert isinstance(cookie["name"], text_type) assert "value" in cookie - assert isinstance(cookie["value"], basestring) + assert isinstance(cookie["value"], text_type) assert cookie["name"] == new_cookie["name"] assert cookie["value"] == "newworld"
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/new_session/create_alwaysMatch.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/new_session/create_alwaysMatch.py index 097764e..a4cc9efc 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/new_session/create_alwaysMatch.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/new_session/create_alwaysMatch.py
@@ -2,7 +2,7 @@ import pytest -from conftest import product, flatten +from .conftest import product, flatten from tests.support.asserts import assert_success from tests.new_session.support.create import valid_data
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/new_session/create_firstMatch.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/new_session/create_firstMatch.py index f00f604..ec671530 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/new_session/create_firstMatch.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/new_session/create_firstMatch.py
@@ -2,7 +2,7 @@ import pytest -from conftest import product, flatten +from .conftest import product, flatten from tests.support.asserts import assert_success
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/support/keys.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/support/keys.py index d4072f5a..26825f04 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/support/keys.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/support/keys.py
@@ -17,9 +17,10 @@ """The Keys implementation.""" -from inspect import getmembers import sys +from inspect import getmembers +from six import text_type class Keys(object): """ @@ -105,7 +106,7 @@ R_DELETE = u"\uE05D" -ALL_KEYS = getmembers(Keys, lambda x: type(x) == unicode) +ALL_KEYS = getmembers(Keys, lambda x: type(x) == text_type) ALL_EVENTS = { "ADD": {
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/status/status.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/status/status.py index f0df16a..1f0f1bc 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/status/status.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/status/status.py
@@ -1,5 +1,7 @@ import json +from six import text_type + from tests.support.asserts import assert_success @@ -16,7 +18,7 @@ value = parsed_obj["value"] assert value["ready"] in [True, False] - assert isinstance(value["message"], basestring) + assert isinstance(value["message"], text_type) def test_status_with_session_running_on_endpoint_node(session):
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/asserts.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/asserts.py index f651374..5bd7f5b 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/asserts.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/asserts.py
@@ -2,7 +2,7 @@ import imghdr import struct -from six import PY3 +from six import ensure_binary, text_type, PY3 from webdriver import Element, NoSuchAlertException, WebDriverException @@ -52,8 +52,8 @@ assert response.status == errors[error_code] assert "value" in response.body assert response.body["value"]["error"] == error_code - assert isinstance(response.body["value"]["message"], basestring) - assert isinstance(response.body["value"]["stacktrace"], basestring) + assert isinstance(response.body["value"]["message"], text_type) + assert isinstance(response.body["value"]["stacktrace"], text_type) assert_response_headers(response.headers) @@ -221,6 +221,6 @@ def assert_png(screenshot): """Test that screenshot is a Base64 encoded PNG file.""" - image = base64.decodestring(screenshot) + image = base64.decodestring(ensure_binary(screenshot)) mime_type = imghdr.what("", image) assert mime_type == "png", "Expected image to be PNG, but it was {}".format(mime_type)
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/authentication.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/authentication.py index 6f880f3..1e88a9e 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/authentication.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/authentication.py
@@ -1,4 +1,4 @@ -import urllib +from six.moves.urllib.parse import urlencode def basic_authentication(username=None, password=None, protocol="http"): @@ -8,7 +8,7 @@ query = {} return build_url("/webdriver/tests/support/authentication.py", - query=urllib.urlencode(query), + query=urlencode(query), protocol=protocol)
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures.py index ab2aaf4..80ccfdd 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures.py
@@ -1,11 +1,14 @@ import copy import json import os -import urlparse import pytest import webdriver +from six import string_types + +from six.moves.urllib.parse import urlunsplit + from tests.support import defaults from tests.support.helpers import cleanup_session from tests.support.http_request import HTTPRequest @@ -172,7 +175,7 @@ domain = server_config["domains"][domain][subdomain] port = server_config["ports"][protocol][0] host = "{0}:{1}".format(domain, port) - return urlparse.urlunsplit((protocol, host, path, query, fragment)) + return urlunsplit((protocol, host, path, query, fragment)) inner.__name__ = "url" return inner @@ -191,7 +194,7 @@ if text is None: text = "" - assert isinstance(text, basestring), "`text` parameter must be a string" + assert isinstance(text, string_types), "`text` parameter must be a string" # Script completes itself when the user prompt has been opened. # For prompt() dialogs, add a value for the 'default' argument,
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/http_request.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/http_request.py index 5e46d97..895d1319 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/http_request.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/http_request.py
@@ -1,9 +1,10 @@ import contextlib -import httplib import json from six import text_type +from six.moves.http_client import HTTPConnection + class HTTPRequest(object): def __init__(self, host, port): @@ -33,7 +34,7 @@ if isinstance(payload, text_type): payload = body.encode("utf-8") - conn = httplib.HTTPConnection(self.host, self.port) + conn = HTTPConnection(self.host, self.port) try: conn.request(method, path, payload) yield conn.getresponse()
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/image.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/image.py index 81dd933..6149ccc 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/image.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/image.py
@@ -2,11 +2,13 @@ import math import struct +from six import ensure_binary + from tests.support.asserts import assert_png def png_dimensions(screenshot): assert_png(screenshot) - image = base64.decodestring(screenshot) + image = base64.decodestring(ensure_binary(screenshot)) width, height = struct.unpack(">LL", image[16:24]) return int(width), int(height)
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/inline.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/inline.py index b65b9cb..15bc26e5 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/inline.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/inline.py
@@ -1,6 +1,6 @@ """Helpers for inlining extracts of documents in tests.""" -import urllib +from six.moves.urllib.parse import urlencode BOILERPLATES = { @@ -58,7 +58,7 @@ query = {"doc": doc, "mime": mime, "charset": charset} return build_url( "/webdriver/tests/support/inline.py", - query=urllib.urlencode(query), + query=urlencode(query), **kwargs)
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/switch_to_frame/cross_origin.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/switch_to_frame/cross_origin.py index 4425a3a..905f1eb 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/switch_to_frame/cross_origin.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/switch_to_frame/cross_origin.py
@@ -1,4 +1,4 @@ -from urlparse import urlparse +from six.moves.urllib.parse import urlparse import webdriver.protocol as protocol
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/switch_to_frame/switch.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/switch_to_frame/switch.py index 67b855a..f9b0e6fc 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/switch_to_frame/switch.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/switch_to_frame/switch.py
@@ -18,7 +18,7 @@ def frameset(*docs): - frames = map(lambda doc: "<frame src='{}'></frame>".format(inline(doc)), docs) + frames = list(map(lambda doc: "<frame src='{}'></frame>".format(inline(doc)), docs)) return "<frameset rows='{}'>\n{}</frameset>".format(len(frames) * "*,", "\n".join(frames))
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt index 21d934de..91772b5c 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt +++ b/third_party/blink/web_tests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt
@@ -15,19 +15,19 @@ PASS window.getComputedStyle(gridAutoFitContent, '').getPropertyValue('grid-auto-columns') is "fit-content(30px)" -Test that getting grid-template-columns and grid-template-rows set through CSS only lists explicit tracks, but not implicit ones +Test that getting grid-template-columns and grid-template-rows set through CSS lists every track listed whether implicitly or explicitly created PASS window.getComputedStyle(gridAutoFixedFixedWithChildren, '').getPropertyValue('grid-auto-rows') is "30px" PASS window.getComputedStyle(gridAutoFixedFixedWithChildren, '').getPropertyValue('grid-auto-columns') is "50px" -PASS window.getComputedStyle(gridAutoFixedFixedWithChildren, '').getPropertyValue('grid-template-columns') is "none" -PASS window.getComputedStyle(gridAutoFixedFixedWithChildren, '').getPropertyValue('grid-template-rows') is "none" +PASS window.getComputedStyle(gridAutoFixedFixedWithChildren, '').getPropertyValue('grid-template-columns') is "50px" +PASS window.getComputedStyle(gridAutoFixedFixedWithChildren, '').getPropertyValue('grid-template-rows') is "30px" PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-auto-rows') is "30px" PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-auto-columns') is "40px" -PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-template-columns') is "20px" -PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-template-rows') is "15px" -PASS window.getComputedStyle(gridAutoMultipleTracks, '').getPropertyValue('grid-template-columns') is "none" -PASS window.getComputedStyle(gridAutoMultipleTracks, '').getPropertyValue('grid-template-rows') is "none" -PASS window.getComputedStyle(gridAutoMultipleTracksNegativeIndexes, '').getPropertyValue('grid-template-columns') is "none" -PASS window.getComputedStyle(gridAutoMultipleTracksNegativeIndexes, '').getPropertyValue('grid-template-rows') is "none" +PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-template-columns') is "20px 40px 40px" +PASS window.getComputedStyle(gridAutoFixedFixedWithFixedFixedWithChildren, '').getPropertyValue('grid-template-rows') is "15px 30px 30px" +PASS window.getComputedStyle(gridAutoMultipleTracks, '').getPropertyValue('grid-template-columns') is "25px 50px 100px 25px" +PASS window.getComputedStyle(gridAutoMultipleTracks, '').getPropertyValue('grid-template-rows') is "10px 20px 30px 10px" +PASS window.getComputedStyle(gridAutoMultipleTracksNegativeIndexes, '').getPropertyValue('grid-template-columns') is "100px 25px 50px 100px" +PASS window.getComputedStyle(gridAutoMultipleTracksNegativeIndexes, '').getPropertyValue('grid-template-rows') is "30px 10px 20px 30px" Test that grid-template-* definitions are not affected by grid-auto-* definitions
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html index 5a32d9cf..28898073 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html +++ b/third_party/blink/web_tests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html
@@ -84,13 +84,13 @@ testGridAutoDefinitionsValues(document.getElementById("gridAutoFitContent"), "fit-content(50%)", "fit-content(30px)"); debug(""); -debug("Test that getting grid-template-columns and grid-template-rows set through CSS only lists explicit tracks, but not implicit ones"); +debug("Test that getting grid-template-columns and grid-template-rows set through CSS lists every track listed whether implicitly or explicitly created"); testGridAutoDefinitionsValues(document.getElementById("gridAutoFixedFixedWithChildren"), "30px", "50px"); -testGridDefinitionsValues(document.getElementById("gridAutoFixedFixedWithChildren"), "none", "none"); +testGridDefinitionsValues(document.getElementById("gridAutoFixedFixedWithChildren"), "50px", "30px"); testGridAutoDefinitionsValues(document.getElementById("gridAutoFixedFixedWithFixedFixedWithChildren"), "30px", "40px"); -testGridDefinitionsValues(document.getElementById("gridAutoFixedFixedWithFixedFixedWithChildren"), "20px", "15px"); -testGridDefinitionsValues(document.getElementById("gridAutoMultipleTracks"), "none", "none"); -testGridDefinitionsValues(document.getElementById("gridAutoMultipleTracksNegativeIndexes"), "none", "none"); +testGridDefinitionsValues(document.getElementById("gridAutoFixedFixedWithFixedFixedWithChildren"), "20px 40px 40px", "15px 30px 30px"); +testGridDefinitionsValues(document.getElementById("gridAutoMultipleTracks"), "25px 50px 100px 25px", "10px 20px 30px 10px"); +testGridDefinitionsValues(document.getElementById("gridAutoMultipleTracksNegativeIndexes"), "100px 25px 50px 100px", "30px 10px 20px 30px"); debug(""); debug("Test that grid-template-* definitions are not affected by grid-auto-* definitions");
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-columns-rows-get-set.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-columns-rows-get-set.html index 01543f4..ea79d1c 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-columns-rows-get-set.html +++ b/third_party/blink/web_tests/fast/css-grid-layout/grid-columns-rows-get-set.html
@@ -93,7 +93,7 @@ } .gridWithFitContentFunction { grid-template-columns: fit-content(30%); - grid-template-rows: fit-content(20px); + grid-template-rows: fit-content(20px): } </style> <script src="../../resources/js-test.js"></script>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-template-shorthand-get-set-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/grid-template-shorthand-get-set-expected.txt index b7ec83b6..52b8653 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-template-shorthand-get-set-expected.txt +++ b/third_party/blink/web_tests/fast/css-grid-layout/grid-template-shorthand-get-set-expected.txt
@@ -48,10 +48,10 @@ PASS window.getComputedStyle(gridTemplateComplexFormWithAuto, '').getPropertyValue('grid-template-columns') is "10px" PASS window.getComputedStyle(gridTemplateComplexFormWithAuto, '').getPropertyValue('grid-template-rows') is "0px" PASS window.getComputedStyle(gridTemplateComplexFormWithAuto, '').getPropertyValue('grid-template-areas') is "\"a\"" -PASS window.getComputedStyle(gridTemplateComplexFormOnlyAreas, '').getPropertyValue('grid-template-columns') is "none" +PASS window.getComputedStyle(gridTemplateComplexFormOnlyAreas, '').getPropertyValue('grid-template-columns') is "0px" PASS window.getComputedStyle(gridTemplateComplexFormOnlyAreas, '').getPropertyValue('grid-template-rows') is "0px" PASS window.getComputedStyle(gridTemplateComplexFormOnlyAreas, '').getPropertyValue('grid-template-areas') is "\"a\"" -PASS window.getComputedStyle(gridTemplateNoColumnsRowWithEmptyTrailingLineNames, '').getPropertyValue('grid-template-columns') is "none" +PASS window.getComputedStyle(gridTemplateNoColumnsRowWithEmptyTrailingLineNames, '').getPropertyValue('grid-template-columns') is "0px" PASS window.getComputedStyle(gridTemplateNoColumnsRowWithEmptyTrailingLineNames, '').getPropertyValue('grid-template-rows') is "[first] 0px" PASS window.getComputedStyle(gridTemplateNoColumnsRowWithEmptyTrailingLineNames, '').getPropertyValue('grid-template-areas') is "\"a\"" PASS window.getComputedStyle(gridTemplateConsecutiveAreas, '').getPropertyValue('grid-template-columns') is "10px" @@ -186,7 +186,7 @@ PASS element.style.gridTemplateRows is "[foo1 bar1] 50px [foo2 bar2 foo3 bar3] 50px [foo4 bar4]" PASS getComputedStyle(element, '').getPropertyValue('grid-template-areas') is "\"a\" \"b\"" PASS element.style.gridTemplateAreas is "\"a\" \"b\"" -PASS getComputedStyle(element, '').getPropertyValue('grid-template-columns') is "none" +PASS getComputedStyle(element, '').getPropertyValue('grid-template-columns') is "0px" PASS element.style.gridTemplateColumns is "none" PASS getComputedStyle(element, '').getPropertyValue('grid-template-rows') is "0px" PASS element.style.gridTemplateRows is "auto"
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-template-shorthand-get-set.html b/third_party/blink/web_tests/fast/css-grid-layout/grid-template-shorthand-get-set.html index 17846cc..de0c6a2 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/grid-template-shorthand-get-set.html +++ b/third_party/blink/web_tests/fast/css-grid-layout/grid-template-shorthand-get-set.html
@@ -222,8 +222,8 @@ testGridDefinitionsValues(document.getElementById("gridTemplateComplexFormWithLineNamesMultipleRowsAndColumns"), "[first] 10px [nav nav2] 15px [nav] 15px [last]", "100px [nav nav2] 25px [nav nav2] 25px [last]", '"a b c" "d e f" "g h i"'); testGridDefinitionsValues(document.getElementById("gridTemplateComplexFormWithLineNamesMultipleRowsAndColumnsWithoutRowsSizes"), "[first] 10px [nav nav2] 15px [nav] 15px [last]", "0px [nav nav2] 0px [nav nav2] 0px [last]", '"a b c" "d e f" "g h i"'); testGridDefinitionsValues(document.getElementById("gridTemplateComplexFormWithAuto"), "10px", "0px", '"a"'); - testGridDefinitionsValues(document.getElementById("gridTemplateComplexFormOnlyAreas"), "none", "0px", '"a"'); - testGridDefinitionsValues(document.getElementById("gridTemplateNoColumnsRowWithEmptyTrailingLineNames"), "none", "[first] 0px", '"a"'); + testGridDefinitionsValues(document.getElementById("gridTemplateComplexFormOnlyAreas"), "0px", "0px", '"a"'); + testGridDefinitionsValues(document.getElementById("gridTemplateNoColumnsRowWithEmptyTrailingLineNames"), "0px", "[first] 0px", '"a"'); testGridDefinitionsValues(document.getElementById("gridTemplateConsecutiveAreas"), "10px", "0px 0px", '"a" "a"'); debug(""); @@ -275,7 +275,7 @@ testGridDefinitionsSetJSValues("66px / 18px", "18px", "66px", "none"); testGridDefinitionsSetJSValues("[head] 'a' 15px [tail] / 10px", "10px", "[head] 15px [tail]", "\"a\""); testGridDefinitionsSetJSValues("[foo1 bar1] 'a' 50px [foo2 bar2] [foo3 bar3] 'b' 50px [foo4 bar4] / 100px", "100px", "[foo1 bar1] 50px [foo2 bar2 foo3 bar3] 50px [foo4 bar4]", "\"a\" \"b\""); - testGridDefinitionsSetJSValues("'a'", "none", "0px", "\"a\"", "none", "auto"); + testGridDefinitionsSetJSValues("'a'", "0px", "0px", "\"a\"", "none", "auto"); debug(""); debug("Test setting grid-template shorthand to bad values through JS");
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/mark-as-infinitely-growable.html b/third_party/blink/web_tests/fast/css-grid-layout/mark-as-infinitely-growable.html index dea1bee..944d557a 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/mark-as-infinitely-growable.html +++ b/third_party/blink/web_tests/fast/css-grid-layout/mark-as-infinitely-growable.html
@@ -5,7 +5,6 @@ <style> .grid { font: 10px/1 Ahem; - grid-template-rows: auto; } .gridAutoAndAuto { grid-template-columns: auto auto;
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks-expected.txt index 47673fa..e10c026 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks-expected.txt +++ b/third_party/blink/web_tests/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks-expected.txt
@@ -1,127 +1,23 @@ -Test that computed style for grid-template-columns and grid-template-rows works as expected, with named grid lines but without implicit tracks. Also test the size and position of the items, since the size of implicit tracks is not exposed +Test that computed style for grid-template-columns and grid-template-rows works as expected with named grid lines and implicit tracks On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". PASS window.getComputedStyle(gridOneColumnSingle, '').getPropertyValue('grid-template-columns') is "[a] 200px [b]" -PASS window.getComputedStyle(gridOneColumnSingle, '').getPropertyValue('grid-template-rows') is "[x] 50px [y]" -PASS gridOneColumnSingle.childElementCount is 4 -PASS gridOneColumnSingle.children[0].offsetWidth is 200 -PASS gridOneColumnSingle.children[0].offsetTop is 0 -PASS gridOneColumnSingle.children[0].offsetHeight is 50 -PASS gridOneColumnSingle.children[1].offsetWidth is 200 -PASS gridOneColumnSingle.children[1].offsetTop is 50 -PASS gridOneColumnSingle.children[1].offsetHeight is 50 -PASS gridOneColumnSingle.children[2].offsetWidth is 200 -PASS gridOneColumnSingle.children[2].offsetTop is 100 -PASS gridOneColumnSingle.children[2].offsetHeight is 50 -PASS gridOneColumnSingle.children[3].offsetWidth is 200 -PASS gridOneColumnSingle.children[3].offsetTop is 150 -PASS gridOneColumnSingle.children[3].offsetHeight is 50 -PASS window.getComputedStyle(gridTwoColumnsSingle, '').getPropertyValue('grid-template-columns') is "[a] 200px [b]" -PASS window.getComputedStyle(gridTwoColumnsSingle, '').getPropertyValue('grid-template-rows') is "[x] 50px [y]" -PASS gridTwoColumnsSingle.childElementCount is 4 -PASS gridTwoColumnsSingle.children[0].offsetWidth is 200 -PASS gridTwoColumnsSingle.children[0].offsetTop is 0 -PASS gridTwoColumnsSingle.children[0].offsetHeight is 50 -PASS gridTwoColumnsSingle.children[1].offsetWidth is 150 -PASS gridTwoColumnsSingle.children[1].offsetTop is 0 -PASS gridTwoColumnsSingle.children[1].offsetHeight is 50 -PASS gridTwoColumnsSingle.children[2].offsetWidth is 200 -PASS gridTwoColumnsSingle.children[2].offsetTop is 50 -PASS gridTwoColumnsSingle.children[2].offsetHeight is 50 -PASS gridTwoColumnsSingle.children[3].offsetWidth is 150 -PASS gridTwoColumnsSingle.children[3].offsetTop is 50 -PASS gridTwoColumnsSingle.children[3].offsetHeight is 50 -PASS window.getComputedStyle(gridThreeColumnsSingle, '').getPropertyValue('grid-template-columns') is "[a] 200px [b]" -PASS window.getComputedStyle(gridThreeColumnsSingle, '').getPropertyValue('grid-template-rows') is "[x] 50px [y]" -PASS gridThreeColumnsSingle.childElementCount is 4 -PASS gridThreeColumnsSingle.children[0].offsetWidth is 200 -PASS gridThreeColumnsSingle.children[0].offsetTop is 0 -PASS gridThreeColumnsSingle.children[0].offsetHeight is 50 -PASS gridThreeColumnsSingle.children[1].offsetWidth is 150 -PASS gridThreeColumnsSingle.children[1].offsetTop is 0 -PASS gridThreeColumnsSingle.children[1].offsetHeight is 50 -PASS gridThreeColumnsSingle.children[2].offsetWidth is 100 -PASS gridThreeColumnsSingle.children[2].offsetTop is 0 -PASS gridThreeColumnsSingle.children[2].offsetHeight is 50 -PASS gridThreeColumnsSingle.children[3].offsetWidth is 200 -PASS gridThreeColumnsSingle.children[3].offsetTop is 50 -PASS gridThreeColumnsSingle.children[3].offsetHeight is 50 -PASS window.getComputedStyle(gridFourColumnsSingle, '').getPropertyValue('grid-template-columns') is "[a] 200px [b]" +PASS window.getComputedStyle(gridOneColumnSingle, '').getPropertyValue('grid-template-rows') is "[x] 50px [y] 50px 50px 50px" +PASS window.getComputedStyle(gridTwoColumnsSingle, '').getPropertyValue('grid-template-columns') is "[a] 200px [b] 150px" +PASS window.getComputedStyle(gridTwoColumnsSingle, '').getPropertyValue('grid-template-rows') is "[x] 50px [y] 50px" +PASS window.getComputedStyle(gridThreeColumnsSingle, '').getPropertyValue('grid-template-columns') is "[a] 200px [b] 150px 100px" +PASS window.getComputedStyle(gridThreeColumnsSingle, '').getPropertyValue('grid-template-rows') is "[x] 50px [y] 50px" +PASS window.getComputedStyle(gridFourColumnsSingle, '').getPropertyValue('grid-template-columns') is "[a] 200px [b] 150px 100px 50px" PASS window.getComputedStyle(gridFourColumnsSingle, '').getPropertyValue('grid-template-rows') is "[x] 50px [y]" -PASS gridFourColumnsSingle.childElementCount is 4 -PASS gridFourColumnsSingle.children[0].offsetWidth is 200 -PASS gridFourColumnsSingle.children[0].offsetTop is 0 -PASS gridFourColumnsSingle.children[0].offsetHeight is 50 -PASS gridFourColumnsSingle.children[1].offsetWidth is 150 -PASS gridFourColumnsSingle.children[1].offsetTop is 0 -PASS gridFourColumnsSingle.children[1].offsetHeight is 50 -PASS gridFourColumnsSingle.children[2].offsetWidth is 100 -PASS gridFourColumnsSingle.children[2].offsetTop is 0 -PASS gridFourColumnsSingle.children[2].offsetHeight is 50 -PASS gridFourColumnsSingle.children[3].offsetWidth is 50 -PASS gridFourColumnsSingle.children[3].offsetTop is 0 -PASS gridFourColumnsSingle.children[3].offsetHeight is 50 PASS window.getComputedStyle(gridOneColumnMultiple, '').getPropertyValue('grid-template-columns') is "[a b c] 200px [d e]" -PASS window.getComputedStyle(gridOneColumnMultiple, '').getPropertyValue('grid-template-rows') is "[x y z] 50px [v w]" -PASS gridOneColumnMultiple.childElementCount is 4 -PASS gridOneColumnMultiple.children[0].offsetWidth is 200 -PASS gridOneColumnMultiple.children[0].offsetTop is 0 -PASS gridOneColumnMultiple.children[0].offsetHeight is 50 -PASS gridOneColumnMultiple.children[1].offsetWidth is 200 -PASS gridOneColumnMultiple.children[1].offsetTop is 50 -PASS gridOneColumnMultiple.children[1].offsetHeight is 50 -PASS gridOneColumnMultiple.children[2].offsetWidth is 200 -PASS gridOneColumnMultiple.children[2].offsetTop is 100 -PASS gridOneColumnMultiple.children[2].offsetHeight is 50 -PASS gridOneColumnMultiple.children[3].offsetWidth is 200 -PASS gridOneColumnMultiple.children[3].offsetTop is 150 -PASS gridOneColumnMultiple.children[3].offsetHeight is 50 -PASS window.getComputedStyle(gridTwoColumnsMultiple, '').getPropertyValue('grid-template-columns') is "[a b c] 200px [d e]" -PASS window.getComputedStyle(gridTwoColumnsMultiple, '').getPropertyValue('grid-template-rows') is "[x y z] 50px [v w]" -PASS gridTwoColumnsMultiple.childElementCount is 4 -PASS gridTwoColumnsMultiple.children[0].offsetWidth is 200 -PASS gridTwoColumnsMultiple.children[0].offsetTop is 0 -PASS gridTwoColumnsMultiple.children[0].offsetHeight is 50 -PASS gridTwoColumnsMultiple.children[1].offsetWidth is 150 -PASS gridTwoColumnsMultiple.children[1].offsetTop is 0 -PASS gridTwoColumnsMultiple.children[1].offsetHeight is 50 -PASS gridTwoColumnsMultiple.children[2].offsetWidth is 200 -PASS gridTwoColumnsMultiple.children[2].offsetTop is 50 -PASS gridTwoColumnsMultiple.children[2].offsetHeight is 50 -PASS gridTwoColumnsMultiple.children[3].offsetWidth is 150 -PASS gridTwoColumnsMultiple.children[3].offsetTop is 50 -PASS gridTwoColumnsMultiple.children[3].offsetHeight is 50 -PASS window.getComputedStyle(gridThreeColumnsMultiple, '').getPropertyValue('grid-template-columns') is "[a b c] 200px [d e]" -PASS window.getComputedStyle(gridThreeColumnsMultiple, '').getPropertyValue('grid-template-rows') is "[x y z] 50px [v w]" -PASS gridThreeColumnsMultiple.childElementCount is 4 -PASS gridThreeColumnsMultiple.children[0].offsetWidth is 200 -PASS gridThreeColumnsMultiple.children[0].offsetTop is 0 -PASS gridThreeColumnsMultiple.children[0].offsetHeight is 50 -PASS gridThreeColumnsMultiple.children[1].offsetWidth is 150 -PASS gridThreeColumnsMultiple.children[1].offsetTop is 0 -PASS gridThreeColumnsMultiple.children[1].offsetHeight is 50 -PASS gridThreeColumnsMultiple.children[2].offsetWidth is 100 -PASS gridThreeColumnsMultiple.children[2].offsetTop is 0 -PASS gridThreeColumnsMultiple.children[2].offsetHeight is 50 -PASS gridThreeColumnsMultiple.children[3].offsetWidth is 200 -PASS gridThreeColumnsMultiple.children[3].offsetTop is 50 -PASS gridThreeColumnsMultiple.children[3].offsetHeight is 50 -PASS window.getComputedStyle(gridFourColumnsMultiple, '').getPropertyValue('grid-template-columns') is "[a b c] 200px [d e]" +PASS window.getComputedStyle(gridOneColumnMultiple, '').getPropertyValue('grid-template-rows') is "[x y z] 50px [v w] 50px 50px 50px" +PASS window.getComputedStyle(gridTwoColumnsMultiple, '').getPropertyValue('grid-template-columns') is "[a b c] 200px [d e] 150px" +PASS window.getComputedStyle(gridTwoColumnsMultiple, '').getPropertyValue('grid-template-rows') is "[x y z] 50px [v w] 50px" +PASS window.getComputedStyle(gridThreeColumnsMultiple, '').getPropertyValue('grid-template-columns') is "[a b c] 200px [d e] 150px 100px" +PASS window.getComputedStyle(gridThreeColumnsMultiple, '').getPropertyValue('grid-template-rows') is "[x y z] 50px [v w] 50px" +PASS window.getComputedStyle(gridFourColumnsMultiple, '').getPropertyValue('grid-template-columns') is "[a b c] 200px [d e] 150px 100px 50px" PASS window.getComputedStyle(gridFourColumnsMultiple, '').getPropertyValue('grid-template-rows') is "[x y z] 50px [v w]" -PASS gridFourColumnsMultiple.childElementCount is 4 -PASS gridFourColumnsMultiple.children[0].offsetWidth is 200 -PASS gridFourColumnsMultiple.children[0].offsetTop is 0 -PASS gridFourColumnsMultiple.children[0].offsetHeight is 50 -PASS gridFourColumnsMultiple.children[1].offsetWidth is 150 -PASS gridFourColumnsMultiple.children[1].offsetTop is 0 -PASS gridFourColumnsMultiple.children[1].offsetHeight is 50 -PASS gridFourColumnsMultiple.children[2].offsetWidth is 100 -PASS gridFourColumnsMultiple.children[2].offsetTop is 0 -PASS gridFourColumnsMultiple.children[2].offsetHeight is 50 -PASS gridFourColumnsMultiple.children[3].offsetWidth is 50 -PASS gridFourColumnsMultiple.children[3].offsetTop is 0 -PASS gridFourColumnsMultiple.children[3].offsetHeight is 50 PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks.html b/third_party/blink/web_tests/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks.html index 8fe3e5d..7a776c6a 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks.html +++ b/third_party/blink/web_tests/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks.html
@@ -4,7 +4,6 @@ <style> .grid { font: 50px/1 Ahem; - position: relative; } .singleNamedGridLines { @@ -77,70 +76,15 @@ <script src="resources/grid-definitions-parsing-utils.js"></script> <script> - function testSizeAndPositionOfItems(element, expectedItemData) { - window.element = element; - var elementID = element.id || "element"; - shouldBeEqualToNumber(elementID + ".childElementCount", expectedItemData.length); - var props = ["offsetWidth", "offsetTop", "offsetHeight"]; - for (var i = 0; i < expectedItemData.length; ++i) - for (let prop of props) - shouldBeEqualToNumber(elementID + ".children[" + i + "]." + prop, expectedItemData[i][prop]); - } + description("Test that computed style for grid-template-columns and grid-template-rows works as expected with named grid lines and implicit tracks"); - function testGrid(element, columnValue, rowValue, expectedItemData) { - testGridDefinitionsValues(element, columnValue, rowValue); - testSizeAndPositionOfItems(element, expectedItemData); - } + testGridDefinitionsValues(document.getElementById("gridOneColumnSingle"), "[a] 200px [b]", "[x] 50px [y] 50px 50px 50px"); + testGridDefinitionsValues(document.getElementById("gridTwoColumnsSingle"), "[a] 200px [b] 150px", "[x] 50px [y] 50px"); + testGridDefinitionsValues(document.getElementById("gridThreeColumnsSingle"), "[a] 200px [b] 150px 100px", "[x] 50px [y] 50px"); + testGridDefinitionsValues(document.getElementById("gridFourColumnsSingle"), "[a] 200px [b] 150px 100px 50px", "[x] 50px [y]"); - description("Test that computed style for grid-template-columns and grid-template-rows works as expected, with named grid lines but without implicit tracks. Also test the size and position of the items, since the size of implicit tracks is not exposed"); - - testGrid(document.getElementById("gridOneColumnSingle"), "[a] 200px [b]", "[x] 50px [y]", [ - {offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 100, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 150, offsetHeight: 50}, - ]); - testGrid(document.getElementById("gridTwoColumnsSingle"), "[a] 200px [b]", "[x] 50px [y]", [ - {offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50}, - {offsetLeft: 200, offsetWidth: 150, offsetTop: 50, offsetHeight: 50}, - ]); - testGrid(document.getElementById("gridThreeColumnsSingle"), "[a] 200px [b]", "[x] 50px [y]", [ - {offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 350, offsetWidth: 100, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50}, - ]); - testGrid(document.getElementById("gridFourColumnsSingle"), "[a] 200px [b]", "[x] 50px [y]", [ - {offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 350, offsetWidth: 100, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 450, offsetWidth: 50, offsetTop: 0, offsetHeight: 50}, - ]); - - testGrid(document.getElementById("gridOneColumnMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w]", [ - {offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 100, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 150, offsetHeight: 50}, - ]); - testGrid(document.getElementById("gridTwoColumnsMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w]", [ - {offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50}, - {offsetLeft: 200, offsetWidth: 150, offsetTop: 50, offsetHeight: 50}, - ]); - testGrid(document.getElementById("gridThreeColumnsMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w]", [ - {offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 350, offsetWidth: 100, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50}, - ]); - testGrid(document.getElementById("gridFourColumnsMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w]", [ - {offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 350, offsetWidth: 100, offsetTop: 0, offsetHeight: 50}, - {offsetLeft: 450, offsetWidth: 50, offsetTop: 0, offsetHeight: 50}, - ]); + testGridDefinitionsValues(document.getElementById("gridOneColumnMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w] 50px 50px 50px"); + testGridDefinitionsValues(document.getElementById("gridTwoColumnsMultiple"), "[a b c] 200px [d e] 150px", "[x y z] 50px [v w] 50px"); + testGridDefinitionsValues(document.getElementById("gridThreeColumnsMultiple"), "[a b c] 200px [d e] 150px 100px", "[x y z] 50px [v w] 50px"); + testGridDefinitionsValues(document.getElementById("gridFourColumnsMultiple"), "[a b c] 200px [d e] 150px 100px 50px", "[x y z] 50px [v w]"); </script>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/negative-growth-share-as-infinity-crash.html b/third_party/blink/web_tests/fast/css-grid-layout/negative-growth-share-as-infinity-crash.html index 35eac13..2aa26cf4 100644 --- a/third_party/blink/web_tests/fast/css-grid-layout/negative-growth-share-as-infinity-crash.html +++ b/third_party/blink/web_tests/fast/css-grid-layout/negative-growth-share-as-infinity-crash.html
@@ -3,8 +3,8 @@ <link href="resources/grid.css" rel="stylesheet"> <style> .grid { - grid-template-rows: minmax(min-content, 9px); - grid-template-columns: min-content; + grid-auto-rows: minmax(min-content, 9px); + grid-auto-columns: min-content; height: 10px; } .firstRowFirstColumn {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/http/tests/devtools/layers/layer-tree-model-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/http/tests/devtools/layers/layer-tree-model-expected.txt index 9dd541e..7e35e7a 100644 --- a/third_party/blink/web_tests/flag-specific/composite-after-paint/http/tests/devtools/layers/layer-tree-model-expected.txt +++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/http/tests/devtools/layers/layer-tree-model-expected.txt
@@ -2,6 +2,7 @@ Initial layer tree <invalid node id> 0x0 (0) #document (1) + #document (1) div#subframe1 80x80 (1) div#a 200x200 (1) div#b1 100x150 (1) @@ -11,6 +12,7 @@ Updated layer tree <invalid node id> 0x0 (0) #document (1) + #document (1) div#subframe1 80x80 (1) div#a 200x200 (1) div#b2 110x140 (1) @@ -20,6 +22,7 @@ Updated layer geometry <invalid node id> 0x0 (0) #document (1) + #document (1) div#subframe1 80x80 (1) div#a 200x200 (1) div#b2 110x140 (1)
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/css/cssom/cssstyledeclaration-csstext-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/css/cssom/cssstyledeclaration-csstext-expected.txt new file mode 100644 index 0000000..9d796ee --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/external/wpt/css/cssom/cssstyledeclaration-csstext-expected.txt
@@ -0,0 +1,12 @@ +This is a testharness.js-based test. +PASS uppercase property +PASS uppercase value +PASS overwriting with invalid value +PASS use rgb +PASS cssText order +PASS another cssText order (non-alphabetical order) +PASS whitespaces in value +PASS invalid property does not appear +FAIL cssText on computed style declaration returns the empty string assert_equals: cssText is empty expected "" but got "animation-delay: 0s; animation-direction: normal; animation-duration: 0s; animation-fill-mode: none; animation-iteration-count: 1; animation-name: none; animation-play-state: running; animation-timing-function: ease; background-attachment: scroll; background-blend-mode: normal; background-clip: border-box; background-color: rgba(0, 0, 0, 0); background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-bottom-color: rgb(255, 0, 0); border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-bottom-style: none; border-bottom-width: 0px; border-collapse: separate; border-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-image-source: none; border-image-width: 1; border-left-color: rgb(255, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(255, 0, 0); border-right-style: none; border-right-width: 0px; border-top-color: rgb(255, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-top-style: none; border-top-width: 0px; bottom: auto; box-shadow: none; box-sizing: content-box; break-after: auto; break-before: auto; break-inside: auto; caption-side: top; clear: none; clip: auto; color: rgb(255, 0, 0); content: normal; cursor: auto; direction: ltr; display: block; empty-cells: show; float: none; font-family: Times; font-kerning: auto; font-optical-sizing: auto; font-size: 13.3333px; font-size-adjust: none; font-stretch: 100%; font-style: normal; font-variant: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-weight: 400; height: 0px; image-orientation: from-image; image-rendering: auto; isolation: auto; justify-items: normal; justify-self: auto; left: auto; letter-spacing: normal; line-height: normal; line-height-step: 0px; list-style-image: none; list-style-position: outside; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; mix-blend-mode: normal; object-fit: fill; object-position: 50% 50%; offset-anchor: auto; offset-distance: 0px; offset-path: none; offset-position: auto; offset-rotate: auto 0deg; opacity: 1; orphans: 2; outline-color: rgb(255, 0, 0); outline-offset: 0px; outline-style: none; outline-width: 0px; overflow-anchor: auto; overflow-wrap: normal; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; pointer-events: auto; position: static; resize: none; right: auto; scroll-behavior: auto; speak: normal; table-layout: auto; tab-size: 8; text-align: start; text-align-last: auto; text-decoration: none solid rgb(255, 0, 0); text-decoration-line: none; text-decoration-style: solid; text-decoration-color: rgb(255, 0, 0); text-decoration-skip-ink: auto; text-justify: auto; text-underline-position: auto; text-indent: 0px; text-rendering: auto; text-shadow: none; text-size-adjust: auto; text-overflow: clip; text-transform: none; top: auto; touch-action: auto; transition-delay: 0s; transition-duration: 0s; transition-property: all; transition-timing-function: ease; unicode-bidi: normal; vertical-align: baseline; visibility: visible; white-space: normal; widows: 2; width: 784px; will-change: auto; word-break: normal; word-spacing: 0px; z-index: auto; zoom: 1; appearance: none; backface-visibility: visible; -webkit-border-horizontal-spacing: 0px; -webkit-border-image: none; -webkit-border-vertical-spacing: 0px; -webkit-box-align: stretch; -webkit-box-decoration-break: slice; -webkit-box-direction: normal; -webkit-box-flex: 0; -webkit-box-ordinal-group: 1; -webkit-box-orient: horizontal; -webkit-box-pack: start; -webkit-box-reflect: none; column-count: auto; column-gap: normal; column-rule-color: rgb(255, 0, 0); column-rule-style: none; column-rule-width: 0px; column-span: none; column-width: auto; backdrop-filter: none; align-content: normal; align-items: normal; align-self: auto; flex-basis: auto; flex-grow: 0; flex-shrink: 1; flex-direction: row; flex-wrap: nowrap; justify-content: normal; -webkit-font-smoothing: auto; grid-auto-columns: auto; grid-auto-flow: row; grid-auto-rows: auto; grid-column-end: auto; grid-column-start: auto; grid-template-areas: none; grid-template-columns: none; grid-template-rows: none; grid-row-end: auto; grid-row-start: auto; row-gap: normal; -webkit-highlight: none; hyphens: manual; -webkit-hyphenate-character: auto; -webkit-line-break: auto; -webkit-line-clamp: none; -webkit-locale: auto; -webkit-mask-box-image: none; -webkit-mask-box-image-outset: 0; -webkit-mask-box-image-repeat: stretch; -webkit-mask-box-image-slice: 0 fill; -webkit-mask-box-image-source: none; -webkit-mask-box-image-width: auto; -webkit-mask-clip: border-box; -webkit-mask-composite: source-over; -webkit-mask-image: none; -webkit-mask-origin: border-box; -webkit-mask-position: 0% 0%; -webkit-mask-repeat: repeat; -webkit-mask-size: auto; order: 0; perspective: none; perspective-origin: 392px 0px; -webkit-print-color-adjust: economy; -webkit-rtl-ordering: logical; shape-outside: none; shape-image-threshold: 0; shape-margin: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.18); -webkit-text-combine: none; -webkit-text-decorations-in-effect: none; -webkit-text-emphasis-color: rgb(255, 0, 0); -webkit-text-emphasis-position: over right; -webkit-text-emphasis-style: none; -webkit-text-fill-color: rgb(255, 0, 0); -webkit-text-orientation: vertical-right; -webkit-text-security: none; -webkit-text-stroke-color: rgb(255, 0, 0); -webkit-text-stroke-width: 0px; transform: none; transform-origin: 392px 0px; transform-style: flat; -webkit-user-drag: auto; -webkit-user-modify: read-only; user-select: auto; -webkit-writing-mode: horizontal-tb; -webkit-app-region: none; buffered-rendering: auto; clip-path: none; clip-rule: nonzero; mask: none; filter: none; flood-color: rgb(0, 0, 0); flood-opacity: 1; lighting-color: rgb(255, 255, 255); stop-color: rgb(0, 0, 0); stop-opacity: 1; color-interpolation: srgb; color-interpolation-filters: linearrgb; color-rendering: auto; fill: rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; marker-end: none; marker-mid: none; marker-start: none; mask-type: luminance; mask-source-type: alpha; shape-rendering: auto; stroke: none; stroke-dasharray: none; stroke-dashoffset: 0px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-opacity: 1; stroke-width: 1px; alignment-baseline: auto; baseline-shift: 0px; dominant-baseline: auto; text-anchor: start; writing-mode: horizontal-tb; vector-effect: none; paint-order: normal; d: none; cx: 0px; cy: 0px; x: 0px; y: 0px; r: 0px; rx: auto; ry: auto; translate: none; rotate: none; scale: none; caret-color: rgb(255, 0, 0); line-break: auto; math-style: inline;" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/css/cssom/cssstyledeclaration-csstext-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/css/cssom/cssstyledeclaration-csstext-expected.txt new file mode 100644 index 0000000..623121a --- /dev/null +++ b/third_party/blink/web_tests/platform/win/external/wpt/css/cssom/cssstyledeclaration-csstext-expected.txt
@@ -0,0 +1,12 @@ +This is a testharness.js-based test. +PASS uppercase property +PASS uppercase value +PASS overwriting with invalid value +PASS use rgb +PASS cssText order +PASS another cssText order (non-alphabetical order) +PASS whitespaces in value +PASS invalid property does not appear +FAIL cssText on computed style declaration returns the empty string assert_equals: cssText is empty expected "" but got "animation-delay: 0s; animation-direction: normal; animation-duration: 0s; animation-fill-mode: none; animation-iteration-count: 1; animation-name: none; animation-play-state: running; animation-timing-function: ease; background-attachment: scroll; background-blend-mode: normal; background-clip: border-box; background-color: rgba(0, 0, 0, 0); background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-bottom-color: rgb(255, 0, 0); border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-bottom-style: none; border-bottom-width: 0px; border-collapse: separate; border-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-image-source: none; border-image-width: 1; border-left-color: rgb(255, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(255, 0, 0); border-right-style: none; border-right-width: 0px; border-top-color: rgb(255, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-top-style: none; border-top-width: 0px; bottom: auto; box-shadow: none; box-sizing: content-box; break-after: auto; break-before: auto; break-inside: auto; caption-side: top; clear: none; clip: auto; color: rgb(255, 0, 0); content: normal; cursor: auto; direction: ltr; display: block; empty-cells: show; float: none; font-family: \"times new roman\"; font-kerning: auto; font-optical-sizing: auto; font-size: 13.3333px; font-size-adjust: none; font-stretch: 100%; font-style: normal; font-variant: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-weight: 400; height: 0px; image-orientation: from-image; image-rendering: auto; isolation: auto; justify-items: normal; justify-self: auto; left: auto; letter-spacing: normal; line-height: normal; line-height-step: 0px; list-style-image: none; list-style-position: outside; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; mix-blend-mode: normal; object-fit: fill; object-position: 50% 50%; offset-anchor: auto; offset-distance: 0px; offset-path: none; offset-position: auto; offset-rotate: auto 0deg; opacity: 1; orphans: 2; outline-color: rgb(255, 0, 0); outline-offset: 0px; outline-style: none; outline-width: 0px; overflow-anchor: auto; overflow-wrap: normal; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; pointer-events: auto; position: static; resize: none; right: auto; scroll-behavior: auto; speak: normal; table-layout: auto; tab-size: 8; text-align: start; text-align-last: auto; text-decoration: none solid rgb(255, 0, 0); text-decoration-line: none; text-decoration-style: solid; text-decoration-color: rgb(255, 0, 0); text-decoration-skip-ink: auto; text-justify: auto; text-underline-position: auto; text-indent: 0px; text-rendering: auto; text-shadow: none; text-size-adjust: auto; text-overflow: clip; text-transform: none; top: auto; touch-action: auto; transition-delay: 0s; transition-duration: 0s; transition-property: all; transition-timing-function: ease; unicode-bidi: normal; vertical-align: baseline; visibility: visible; white-space: normal; widows: 2; width: 784px; will-change: auto; word-break: normal; word-spacing: 0px; z-index: auto; zoom: 1; appearance: none; backface-visibility: visible; -webkit-border-horizontal-spacing: 0px; -webkit-border-image: none; -webkit-border-vertical-spacing: 0px; -webkit-box-align: stretch; -webkit-box-decoration-break: slice; -webkit-box-direction: normal; -webkit-box-flex: 0; -webkit-box-ordinal-group: 1; -webkit-box-orient: horizontal; -webkit-box-pack: start; -webkit-box-reflect: none; column-count: auto; column-gap: normal; column-rule-color: rgb(255, 0, 0); column-rule-style: none; column-rule-width: 0px; column-span: none; column-width: auto; backdrop-filter: none; align-content: normal; align-items: normal; align-self: auto; flex-basis: auto; flex-grow: 0; flex-shrink: 1; flex-direction: row; flex-wrap: nowrap; justify-content: normal; -webkit-font-smoothing: auto; grid-auto-columns: auto; grid-auto-flow: row; grid-auto-rows: auto; grid-column-end: auto; grid-column-start: auto; grid-template-areas: none; grid-template-columns: none; grid-template-rows: none; grid-row-end: auto; grid-row-start: auto; row-gap: normal; -webkit-highlight: none; hyphens: manual; -webkit-hyphenate-character: auto; -webkit-line-break: auto; -webkit-line-clamp: none; -webkit-locale: auto; -webkit-mask-box-image: none; -webkit-mask-box-image-outset: 0; -webkit-mask-box-image-repeat: stretch; -webkit-mask-box-image-slice: 0 fill; -webkit-mask-box-image-source: none; -webkit-mask-box-image-width: auto; -webkit-mask-clip: border-box; -webkit-mask-composite: source-over; -webkit-mask-image: none; -webkit-mask-origin: border-box; -webkit-mask-position: 0% 0%; -webkit-mask-repeat: repeat; -webkit-mask-size: auto; order: 0; perspective: none; perspective-origin: 392px 0px; -webkit-print-color-adjust: economy; -webkit-rtl-ordering: logical; shape-outside: none; shape-image-threshold: 0; shape-margin: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.18); -webkit-text-combine: none; -webkit-text-decorations-in-effect: none; -webkit-text-emphasis-color: rgb(255, 0, 0); -webkit-text-emphasis-position: over right; -webkit-text-emphasis-style: none; -webkit-text-fill-color: rgb(255, 0, 0); -webkit-text-orientation: vertical-right; -webkit-text-security: none; -webkit-text-stroke-color: rgb(255, 0, 0); -webkit-text-stroke-width: 0px; transform: none; transform-origin: 392px 0px; transform-style: flat; -webkit-user-drag: auto; -webkit-user-modify: read-only; user-select: auto; -webkit-writing-mode: horizontal-tb; -webkit-app-region: none; buffered-rendering: auto; clip-path: none; clip-rule: nonzero; mask: none; filter: none; flood-color: rgb(0, 0, 0); flood-opacity: 1; lighting-color: rgb(255, 255, 255); stop-color: rgb(0, 0, 0); stop-opacity: 1; color-interpolation: srgb; color-interpolation-filters: linearrgb; color-rendering: auto; fill: rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; marker-end: none; marker-mid: none; marker-start: none; mask-type: luminance; mask-source-type: alpha; shape-rendering: auto; stroke: none; stroke-dasharray: none; stroke-dashoffset: 0px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-opacity: 1; stroke-width: 1px; alignment-baseline: auto; baseline-shift: 0px; dominant-baseline: auto; text-anchor: start; writing-mode: horizontal-tb; vector-effect: none; paint-order: normal; d: none; cx: 0px; cy: 0px; x: 0px; y: 0px; r: 0px; rx: auto; ry: auto; translate: none; rotate: none; scale: none; caret-color: rgb(255, 0, 0); line-break: auto; math-style: inline;" +Harness: the test ran to completion. +
diff --git a/tools/mb/mb_config_buckets.pyl b/tools/mb/mb_config_buckets.pyl index c33a5b2..3fa4ba5 100644 --- a/tools/mb/mb_config_buckets.pyl +++ b/tools/mb/mb_config_buckets.pyl
@@ -187,11 +187,11 @@ 'Win x64 Builder (dbg)': 'gpu_tests_debug_bot', 'Win10 FYI x64 SkiaRenderer Dawn Release (NVIDIA)': 'gpu_tests_sk_dawn_release_trybot', 'Windows deterministic': 'release_bot_x86_minimal_symbols', - 'android-10-arm64-rel': 'android_release_trybot_arm64_fastbuild_webview_google', + 'android-10-arm64-rel': 'android_release_bot_minimal_symbols_arm64_fastbuild_webview_google', 'android-archive-dbg': 'android_without_codecs_debug_bot', 'android-archive-rel': 'android_without_codecs_release_bot_minimal_symbols', 'android-arm64-proguard-rel': 'android_release_bot_minimal_symbols_arm64_webview_google', - 'android-asan': 'android_clang_asan_release_trybot', + 'android-asan': 'android_clang_asan_release_bot', 'android-code-coverage': 'gpu_tests_android_release_bot_minimal_symbols_arm64_fastbuild_java_coverage', 'android-code-coverage-native': 'gpu_tests_android_release_bot_minimal_symbols_arm64_fastbuild_native_coverage', 'android-cronet-arm-dbg': 'android_cronet_debug_static_bot_arm_no_neon', @@ -203,37 +203,38 @@ 'android-cronet-x86-dbg': 'android_cronet_debug_static_bot_x86', 'android-cronet-x86-rel': 'android_cronet_release_bot_minimal_symbols_x86', 'android-incremental-dbg': 'android_incremental_debug_bot', - 'android-kitkat-arm-rel': 'android_release_trybot_fastbuild', - 'android-lollipop-arm-rel': 'android_release_trybot_fastbuild_webview_google', - 'android-marshmallow-arm64-rel': 'gpu_tests_android_release_trybot_arm64_resource_whitelisting_fastbuild_java_coverage', - 'android-marshmallow-x86-fyi-rel': 'android_release_trybot_x86_fastbuild_resource_whitelisting', + 'android-kitkat-arm-rel': 'android_release_bot_minimal_symbols_fastbuild', + 'android-lollipop-arm-rel': 'android_release_bot_minimal_symbols_fastbuild_webview_google', + 'android-marshmallow-arm64-rel': 'gpu_tests_android_release_bot_minimal_symbols_arm64_fastbuild', + 'android-marshmallow-x86-fyi-rel': 'android_release_bot_minimal_symbols_x86_fastbuild_resource_whitelisting', 'android-mojo-webview-rel': 'android_release_bot_minimal_symbols_arm64', - 'android-pie-arm64-dbg': 'android_debug_trybot_arm64', - 'android-pie-arm64-rel': 'android_release_trybot_arm64_webview_google', - 'android-pie-x86-rel': 'android_release_trybot_x86_fastbuild_webview_google', + 'android-pie-arm64-rel': 'android_release_bot_minimal_symbols_arm64_webview_google', + 'android-pie-x86-rel': 'android_release_bot_minimal_symbols_x86_fastbuild_webview_google', 'chromeos-amd64-generic-cfi-thin-lto-rel': 'chromeos_amd64-generic_cfi_thin_lto', 'chromeos-amd64-generic-dbg': 'chromeos_amd64-generic_dbg', 'chromeos-amd64-generic-rel': 'chromeos_amd64-generic', 'chromeos-amd64-generic-rel-vm-tests': 'chromeos_amd64-generic_dcheck_always_on', 'chromeos-arm-generic-dbg': 'chromeos_arm-generic_dbg', - 'chromeos-arm-generic-rel': 'chromeos_arm-generic_dcheck_always_on', + 'chromeos-arm-generic-rel': 'chromeos_arm-generic', 'chromeos-kevin-rel': 'chromeos_kevin', 'chromeos-kevin-rel-hw-tests': 'chromeos_kevin', - 'fuchsia-arm64-cast': 'release_trybot_fuchsia_arm64_cast', - 'fuchsia-fyi-arm64-rel': 'release_trybot_fuchsia_arm64', + 'fuchsia-arm64-cast': 'release_bot_fuchsia_arm64_cast', + 'fuchsia-fyi-arm64-rel': 'release_bot_fuchsia_arm64', 'fuchsia-fyi-x64-dbg': 'debug_bot_fuchsia', - 'fuchsia-fyi-x64-rel': 'release_trybot_fuchsia', - 'fuchsia-x64-cast': 'release_trybot_fuchsia_cast', + 'fuchsia-fyi-x64-rel': 'release_bot_fuchsia', + 'fuchsia-x64-cast': 'release_bot_fuchsia_cast', 'fuchsia-x64-dbg': 'debug_bot_fuchsia_compile_only', 'ios-device': 'ios_device_release_rbe_compile_only', - 'ios-simulator': 'ios_error', + 'ios-simulator': 'ios_simulator_debug_static_rbe_bot', 'ios-simulator-code-coverage': 'clang_code_coverage_ios', 'ios-simulator-cr-recipe': 'ios_simulator_debug_static_bot', 'ios-simulator-cronet': 'ios_cronet', 'ios-simulator-full-configs': 'ios_simulator_debug_static_bot', 'ios-webkit-tot': 'ios_simulator_debug_static_rbe_bot', + 'ios13-beta-simulator': 'ios_simulator_debug_static_bot', 'ios13-sdk-device': 'ios_device_release_static_rbe_bot', - 'linux-annotator-rel': 'release_trybot', + 'ios13-sdk-simulator': 'ios_simulator_debug_static_rbe_bot', + 'linux-annotator-rel': 'release_bot', 'linux-archive-dbg': 'debug_bot', 'linux-archive-rel': 'release_bot', 'linux-bfcache-rel': 'release_bot', @@ -243,12 +244,12 @@ 'linux-blink-heap-verification': 'release_bot_enable_blink_heap_verification_dcheck_always_on', 'linux-chromeos-code-coverage': 'chromeos_with_codecs_release_bot_coverage', 'linux-chromeos-dbg': 'chromeos_with_codecs_debug_bot', - 'linux-chromeos-rel': 'chromeos_with_codecs_release_trybot_code_coverage', + 'linux-chromeos-rel': 'chromeos_with_codecs_release_bot', 'linux-chromium-tests-staging-builder': 'release_bot', 'linux-code-coverage': 'clang_code_coverage', 'linux-fieldtrial-rel': 'release_bot_minimal_symbols', 'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11', - 'linux-ozone-rel': 'ozone_linux_release_trybot', + 'linux-ozone-rel': 'ozone_linux_release_bot', 'linux-swangle-chromium-x64': 'gpu_tests_release_trybot', 'linux-swangle-tot-angle-x64': 'angle_deqp_release_trybot', 'linux-swangle-tot-angle-x86': 'angle_deqp_release_trybot_x86', @@ -256,19 +257,18 @@ 'linux-swangle-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', 'linux-swangle-x64': 'angle_deqp_release_trybot', 'linux-swangle-x86': 'angle_deqp_release_trybot_x86', - 'linux-trusty-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange', + 'linux-trusty-rel': 'gpu_tests_release_bot', 'linux-upload-perfetto': 'release_bot', 'linux-win_cross-rel': 'clang_tot_win_release_cross', - 'linux-wpt-fyi-rel': 'release_trybot', + 'linux-wpt-fyi-rel': 'release_bot_minimal_symbols', 'mac-archive-dbg': 'debug_bot', 'mac-archive-rel': 'release_bot_mac_strip_minimal_symbols', 'mac-code-coverage': 'clang_code_coverage', 'mac-hermetic-upgrade-rel': 'release_bot', 'mac-mojo-rel': 'release_trybot', - 'mac-osxbeta-rel': 'gpu_tests_release_trybot_deterministic_mac', 'mac-swangle-chromium-x64': 'gpu_tests_release_trybot_deterministic_mac', 'mac-upload-perfetto': 'release_bot', - 'win-annotator-rel': 'release_trybot', + 'win-annotator-rel': 'release_bot', 'win-archive-dbg': 'debug_bot', 'win-archive-rel': 'release_bot_minimal_symbols_enable_archive_compression', 'win-asan': 'asan_clang_fuzzer_static_v8_heap_minimal_symbols_release', @@ -285,643 +285,10 @@ 'win10-code-coverage': 'clang_code_coverage', 'win32-archive-dbg': 'debug_bot_x86', 'win32-archive-rel': 'release_bot_x86_minimal_symbols_enable_archive_compression', - 'win32-arm64-rel': 'win32_arm64_release_bot', - 'Chromium Android ARM 32-bit Goma RBE ToT': 'android_release_bot_minimal_symbols', - 'Chromium Android ARM 32-bit Goma RBE ToT (ATS)': 'android_release_bot_minimal_symbols_java_goma', - 'Chromium Linux Goma RBE Staging': 'release_bot', - 'Chromium Linux Goma RBE Staging (clobber)': 'release_bot', - 'Chromium Linux Goma RBE Staging (dbg)': 'debug_bot', - 'Chromium Linux Goma RBE Staging (dbg) (clobber)': 'debug_bot', - 'Chromium Linux Goma RBE ToT': 'release_bot', - 'Chromium Linux Goma RBE ToT (ATS)': 'release_bot', - 'Chromium Linux Goma Staging': 'release_bot', - 'Chromium Mac Goma RBE Staging': 'release_bot', - 'Chromium Mac Goma RBE Staging (clobber)': 'release_bot', - 'Chromium Mac Goma RBE Staging (dbg)': 'debug_bot', - 'Chromium Mac Goma RBE ToT': 'release_bot', - 'Chromium Mac Goma Staging': 'release_bot', - 'Chromium Win Goma RBE Staging': 'release_bot_x86_minimal_symbols', - 'Chromium Win Goma RBE Staging (clobber)': 'release_bot_x86_minimal_symbols', - 'Chromium Win Goma RBE ToT': 'release_bot_x86_minimal_symbols', - 'Chromium iOS Goma RBE ToT': 'ios_device_release_compile_only', - 'CrWinGomaStaging': 'release_bot_x86_minimal_symbols', - 'Linux Builder Goma Canary': 'gpu_tests_release_bot', - 'Linux Builder Goma Latest Client': 'gpu_tests_release_bot', - 'Linux Builder Goma RBE Canary': 'gpu_tests_release_bot', - 'Linux Builder Goma RBE Latest Client': 'gpu_tests_release_bot', - 'Mac Builder (dbg) Goma Canary': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma Canary (clobber)': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma Latest Client': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma Latest Client (clobber)': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma RBE Canary (clobber)': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma RBE Latest Client (clobber)': 'gpu_tests_debug_bot', - 'Mac Builder Goma Canary': 'gpu_tests_release_bot_minimal_symbols', - 'Mac Builder Goma Latest Client': 'gpu_tests_release_bot_minimal_symbols', - 'Win Builder (dbg) Goma Canary': 'gpu_tests_debug_bot_x86', - 'Win Builder (dbg) Goma Latest Client': 'gpu_tests_debug_bot_x86', - 'Win Builder (dbg) Goma RBE Latest Client': 'gpu_tests_debug_bot_x86', - 'Win Builder Goma Canary': 'gpu_tests_release_bot_x86_minimal_symbols', - 'Win Builder Goma Latest Client': 'gpu_tests_release_bot_x86_minimal_symbols', - 'Win Builder Goma RBE Latest Client': 'gpu_tests_release_bot_x86_minimal_symbols', - 'Win7 Builder (dbg) Goma Canary': 'gpu_tests_debug_bot_x86', - 'Win7 Builder (dbg) Goma Latest Client': 'gpu_tests_debug_bot_x86', - 'Win7 Builder Goma Canary': 'gpu_tests_release_bot_x86_minimal_symbols', - 'Win7 Builder Goma Latest Client': 'gpu_tests_release_bot_x86_minimal_symbols', - 'android-archive-dbg-goma-canary': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-latest': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-rbe-ats-canary': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-rbe-ats-latest': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-rbe-canary': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-rbe-latest': 'android_without_codecs_debug_bot', - 'chromeos-amd64-generic-rel-goma-canary': 'chromeos_amd64-generic', - 'chromeos-amd64-generic-rel-goma-latest': 'chromeos_amd64-generic', - 'chromeos-amd64-generic-rel-goma-rbe-canary': 'chromeos_amd64-generic', - 'chromeos-amd64-generic-rel-goma-rbe-latest': 'chromeos_amd64-generic', - 'ios-device-goma-canary-clobber': 'ios_device_release_compile_only', - 'ios-device-goma-latest-clobber': 'ios_device_release_compile_only', - 'ios-device-goma-rbe-canary-clobber': 'ios_device_release_rbe_compile_only', - 'ios-device-goma-rbe-latest-clobber': 'ios_device_release_rbe_compile_only', - 'linux-archive-rel-goma-canary': 'release_bot', - 'linux-archive-rel-goma-canary-localoutputcache': 'release_bot', - 'linux-archive-rel-goma-latest': 'release_bot', - 'linux-archive-rel-goma-latest-localoutputcache': 'release_bot', - 'linux-archive-rel-goma-rbe-ats-canary': 'release_bot', - 'linux-archive-rel-goma-rbe-ats-latest': 'release_bot', - 'linux-archive-rel-goma-rbe-canary': 'release_bot', - 'linux-archive-rel-goma-rbe-latest': 'release_bot', - 'mac-archive-rel-goma-canary': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-canary-localoutputcache': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-latest': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-latest-localoutputcache': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-rbe-canary': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-rbe-latest': 'release_bot_mac_strip_minimal_symbols', - 'win32-archive-rel-goma-canary-localoutputcache': 'release_bot_x86_minimal_symbols_enable_archive_compression', - 'win32-archive-rel-goma-latest-localoutputcache': 'release_bot_x86_minimal_symbols_enable_archive_compression', - 'android-bfcache-rel': 'android_release_trybot', - 'android-binary-size': 'android_binary_size', - 'android-deterministic-dbg': 'android_debug_bot', - 'android-deterministic-rel': 'android_without_codecs_release_trybot', - 'android-opus-kitkat-arm-rel': 'android_release_trybot', - 'android-oreo-arm64-cts-networkservice-dbg': 'android_debug_trybot_arm64', - 'android-oreo-arm64-dbg': 'android_debug_trybot_arm64', - 'android-pie-arm64-coverage-rel': 'android_release_trybot_arm64_webview_google_native_coverage', - 'android-weblayer-pie-arm64-fyi-rel': 'android_release_trybot_arm64', - 'android-webview-marshmallow-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-nougat-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-oreo-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-pie-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-pie-arm64-fyi-rel': 'android_release_trybot_arm64_webview_google', - 'android_angle_deqp_rel_ng': 'angle_deqp_android_release_trybot_arm64', - 'android_angle_rel_ng': 'gpu_tests_android_release_trybot_arm64', - 'android_angle_vk32_deqp_rel_ng': 'angle_deqp_android_vulkan_ndk_release_trybot', - 'android_angle_vk32_rel_ng': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', - 'android_angle_vk64_deqp_rel_ng': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', - 'android_angle_vk64_rel_ng': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', - 'android_archive_rel_ng': 'android_release_trybot', - 'android_arm64_dbg_recipe': 'android_debug_trybot_compile_only_arm64_fastbuild', - 'android_blink_rel': 'android_release_trybot', - 'android_cfi_rel_ng': 'android_cfi_full_cfi_diag_thin_lto_release_static_dcheck_always_on_goma', - 'android_clang_dbg_recipe': 'android_clang_asan_debug_trybot_compile_only_fastbuild', - 'android_compile_dbg': 'android_debug_trybot_compile_only', - 'android_compile_x64_dbg': 'android_debug_trybot_compile_only_x64', - 'android_compile_x86_dbg': 'android_debug_trybot_compile_only_x86', - 'android_cronet': 'android_cronet_release_trybot_arm_no_neon', - 'android_cronet_tester': 'android_cronet_debug_static_bot_arm_no_neon', - 'android_mojo': 'android_release_trybot_arm64', - 'android_n5x_swarming_dbg': 'android_debug_trybot_arm64', - 'android_optional_gpu_tests_rel': 'gpu_tests_android_release_trybot_arm64', - 'android_unswarmed_pixel_aosp': 'android_debug_trybot_arm64', - 'cast_shell_android': 'android_cast_debug_static_bot_compile_only', - 'cast_shell_audio_linux': 'cast_audio_release_trybot', - 'cast_shell_linux': 'cast_release_trybot', - 'chromeos-kevin-compile-rel': 'chromeos_kevin', - 'chromium_presubmit': 'presubmit', - 'closure_compilation': 'closure_compilation', - 'dawn-linux-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-mac-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-win10-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-win10-x86-deps-rel': 'dawn_tests_release_trybot_x86', - 'fuchsia-angle-rel': 'gpu_fyi_tests_release_trybot_fuchsia', - 'fuchsia-compile-x64-dbg': 'debug_bot_fuchsia_compile_only', - 'fuchsia_arm64': 'release_trybot_fuchsia_arm64', - 'fuchsia_x64': 'release_trybot_fuchsia', - 'gpu-fyi-try-android-l-nexus-5-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-l-nexus-6-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-5x-deqp-64': 'angle_deqp_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-5x-skgl-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-6p-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-9-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-n-nvidia-shield-tv-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-p-pixel-2-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-p-pixel-2-skv-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-deqp-vk-32': 'angle_deqp_android_vulkan_ndk_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-deqp-vk-64': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', - 'gpu-fyi-try-android-q-pixel-2-vk-32': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-vk-64': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', - 'gpu-fyi-try-linux-intel-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-linux-intel-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-intel-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-intel-sk-dawn-rel': 'gpu_tests_sk_dawn_release_trybot', - 'gpu-fyi-try-linux-intel-skv': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-linux-nvidia-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-linux-nvidia-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-skv': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-tsn': 'gpu_fyi_tests_release_trybot_tsan', - 'gpu-fyi-try-mac-amd-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-mac-amd-pro-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-amd-retina-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-amd-retina-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-amd-retina-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-asan': 'gpu_fyi_tests_release_trybot_asan', - 'gpu-fyi-try-mac-intel-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-intel-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-mac-intel-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-intel-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-nvidia-retina-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-nvidia-retina-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-nvidia-retina-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-intel-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win10-intel-exp-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-intel-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-dbg-64': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-win10-nvidia-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win10-nvidia-dx12vk-dbg-64': 'gpu_fyi_tests_dx12vk_debug_trybot', - 'gpu-fyi-try-win10-nvidia-dx12vk-rel-64': 'gpu_fyi_tests_dx12vk_release_trybot', - 'gpu-fyi-try-win10-nvidia-exp-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win10-nvidia-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-sk-dawn-rel-64': 'gpu_tests_sk_dawn_release_trybot', - 'gpu-fyi-try-win10-nvidia-skgl-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win7-amd-dbg-32': 'gpu_fyi_tests_debug_trybot_x86', - 'gpu-fyi-try-win7-amd-dqp-32': 'angle_deqp_release_trybot_x86', - 'gpu-fyi-try-win7-amd-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win7-nvidia-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win7-nvidia-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win7-nvidia-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-try-linux-nvidia-dbg': 'gpu_tests_debug_bot', - 'gpu-try-linux-nvidia-rel': 'gpu_tests_release_trybot', - 'gpu-try-mac-amd-retina-dbg': 'gpu_tests_debug_bot', - 'gpu-try-mac-intel-dbg': 'gpu_tests_debug_bot', - 'layout_test_leak_detection': 'release_trybot', - 'leak_detection_linux': 'release_trybot', - 'linux-angle-rel': 'gpu_fyi_tests_release_trybot', - 'linux-autofill-assistant': 'autofill_assistant_release_trybot', - 'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification', - 'linux-blink-rel': 'release_bot_minimal_symbols', - 'linux-chromeos-compile-dbg': 'chromeos_with_codecs_debug_bot', - 'linux-clang-tidy-dbg': 'debug_bot', - 'linux-clang-tidy-rel': 'release_trybot', - 'linux-dawn-rel': 'dawn_tests_release_trybot', - 'linux-dcheck-off-rel': 'release_trybot_dcheck_off', - 'linux-layout-tests-edit-ng': 'release_trybot', - 'linux-layout-tests-fragment-item': 'release_trybot', - 'linux-libfuzzer-asan-rel': 'libfuzzer_asan_release_trybot', - 'linux-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange_code_coverage', - 'linux-swangle-chromium-try-x64': 'gpu_tests_release_trybot', - 'linux-swangle-try-tot-angle-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-tot-angle-x86': 'angle_deqp_release_trybot_x86', - 'linux-swangle-try-tot-swiftshader-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', - 'linux-swangle-try-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-x86': 'angle_deqp_release_trybot_x86', - 'linux-viz-rel': 'release_trybot', - 'linux-webkit-msan-rel': 'msan_release_bot', - 'linux_android_dbg_ng': 'android_debug_bot', - 'linux_angle_deqp_rel_ng': 'angle_deqp_release_trybot', - 'linux_angle_ozone_rel_ng': 'angle_ozone_linux_system_gbm_libdrm_release_trybot', - 'linux_arm': 'release_trybot_arm', - 'linux_chromium_archive_rel_ng': 'release_bot', - 'linux_chromium_asan_rel_ng': 'asan_lsan_release_trybot', - 'linux_chromium_cfi_rel_ng': 'cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on_goma', - 'linux_chromium_chromeos_asan_rel_ng': 'asan_lsan_chromeos_release_trybot', - 'linux_chromium_chromeos_msan_rel_ng': 'chromeos_msan_release_bot', - 'linux_chromium_clobber_deterministic': 'release_trybot', - 'linux_chromium_clobber_rel_ng': 'release_trybot', - 'linux_chromium_compile_dbg_32_ng': 'debug_bot_x86', - 'linux_chromium_compile_dbg_ng': 'debug_bot', - 'linux_chromium_compile_rel_ng': 'release_trybot', - 'linux_chromium_dbg_ng': 'gpu_tests_debug_bot', - 'linux_chromium_msan_rel_ng': 'msan_release_bot', - 'linux_chromium_tsan_rel_ng': 'tsan_disable_nacl_release_trybot', - 'linux_chromium_ubsan_rel_ng': 'ubsan_vptr_release_bot', - 'linux_layout_tests_composite_after_paint': 'release_trybot', - 'linux_layout_tests_layout_ng_disabled': 'release_trybot', - 'linux_mojo': 'release_trybot', - 'linux_mojo_chromeos': 'chromeos_with_codecs_release_trybot', - 'linux_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'linux_upload_clang': 'release_bot', - 'linux_vr': 'vr_release_trybot', - 'mac-angle-rel': 'gpu_fyi_tests_release_trybot', - 'mac-coverage-rel': 'gpu_tests_release_trybot_deterministic_mac_code_coverage', - 'mac-dawn-rel': 'dawn_tests_release_trybot', - 'mac-rel': 'gpu_tests_release_trybot_deterministic_mac', - 'mac10.10-blink-rel': 'release_bot_minimal_symbols', - 'mac10.11-blink-rel': 'release_bot_minimal_symbols', - 'mac10.12-blink-rel': 'release_bot_minimal_symbols', - 'mac10.13-blink-rel': 'release_bot_minimal_symbols', - 'mac10.13_retina-blink-rel': 'release_bot_minimal_symbols', - 'mac10.14-blink-rel': 'release_bot_minimal_symbols', - 'mac10.15-blink-rel': 'release_bot_minimal_symbols_no_nacl', - 'mac_chromium_10.10': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_10.12_rel_ng': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_10.13_rel_ng': 'release_trybot', - 'mac_chromium_10.14_rel_ng': 'release_trybot', - 'mac_chromium_10.15_rel_ng': 'release_trybot_no_nacl', - 'mac_chromium_archive_rel_ng': 'release_bot_mac_strip_minimal_symbols', - 'mac_chromium_asan_rel_ng': 'asan_dcheck_disable_nacl_release_bot', - 'mac_chromium_compile_dbg_ng': 'gpu_tests_debug_bot', - 'mac_chromium_compile_rel_ng': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_dbg_ng': 'gpu_tests_debug_bot', - 'mac_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'mac-swangle-chromium-try-x64': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_upload_clang': 'release_bot', - 'try-nougat-phone-tester': 'android_debug_trybot_arm64', - 'win-angle-deqp-rel-32': 'angle_deqp_release_trybot_x86', - 'win-angle-deqp-rel-64': 'angle_deqp_release_trybot', - 'win-angle-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'win-angle-rel-64': 'gpu_fyi_tests_release_trybot', - 'win-celab-try-rel': 'release_bot_minimal_symbols', - 'win-dawn-rel': 'dawn_tests_release_trybot', - 'win-libfuzzer-asan-rel': 'libfuzzer_windows_asan_release_trybot', - 'win-swangle-chromium-try-x86': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win-swangle-try-tot-angle-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-tot-angle-x86': 'angle_deqp_release_trybot_x86', - 'win-swangle-try-tot-swiftshader-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', - 'win-swangle-try-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-x86': 'angle_deqp_release_trybot_x86', - 'win10-blink-rel': 'release_bot_x86_minimal_symbols', - 'win10_chromium_x64_coverage_rel_ng': 'gpu_tests_release_trybot_resource_whitelisting_code_coverage', - 'win10_chromium_x64_dbg_ng': 'gpu_tests_debug_bot', - 'win10_chromium_x64_rel_ng': 'gpu_tests_release_trybot_resource_whitelisting_code_coverage', - 'win10_chromium_x64_rel_ng_exp': 'release_trybot', - 'win7-blink-rel': 'release_bot_x86_minimal_symbols', - 'win7-rel': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win_archive': 'release_trybot_x86', - 'win_chromium_compile_dbg_ng': 'gpu_tests_debug_trybot_x86_compile_only', - 'win_chromium_compile_rel_ng': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win_chromium_dbg_ng': 'gpu_tests_debug_bot_x86', - 'win_chromium_x64_rel_ng': 'gpu_tests_release_trybot', - 'win_mojo': 'release_trybot_x86', - 'win_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'win_upload_clang': 'release_bot', - 'win_x64_archive': 'release_trybot', - 'WebRTC Chromium Android Builder': 'android_debug_static_bot_arm64', - 'WebRTC Chromium Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Android Builder': 'android_release_bot_minimal_symbols', - 'WebRTC Chromium FYI Android Builder (dbg)': 'android_debug_static_bot', - 'WebRTC Chromium FYI Android Builder ARM64 (dbg)': 'android_debug_static_bot_arm64', - 'WebRTC Chromium FYI Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Linux Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Mac Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Win Builder (dbg)': 'debug_bot_x86_no_com_init_hooks_with_codecs' + 'win32-arm64-rel': 'win32_arm64_release_bot' }, - 'findit': { - 'Chromium Android ARM 32-bit Goma RBE ToT': 'android_release_bot_minimal_symbols', - 'Chromium Android ARM 32-bit Goma RBE ToT (ATS)': 'android_release_bot_minimal_symbols_java_goma', - 'Chromium Linux Goma RBE Staging': 'release_bot', - 'Chromium Linux Goma RBE Staging (clobber)': 'release_bot', - 'Chromium Linux Goma RBE Staging (dbg)': 'debug_bot', - 'Chromium Linux Goma RBE Staging (dbg) (clobber)': 'debug_bot', - 'Chromium Linux Goma RBE ToT': 'release_bot', - 'Chromium Linux Goma RBE ToT (ATS)': 'release_bot', - 'Chromium Linux Goma Staging': 'release_bot', - 'Chromium Mac Goma RBE Staging': 'release_bot', - 'Chromium Mac Goma RBE Staging (clobber)': 'release_bot', - 'Chromium Mac Goma RBE Staging (dbg)': 'debug_bot', - 'Chromium Mac Goma RBE ToT': 'release_bot', - 'Chromium Mac Goma Staging': 'release_bot', - 'Chromium Win Goma RBE Staging': 'release_bot_x86_minimal_symbols', - 'Chromium Win Goma RBE Staging (clobber)': 'release_bot_x86_minimal_symbols', - 'Chromium Win Goma RBE ToT': 'release_bot_x86_minimal_symbols', - 'Chromium iOS Goma RBE ToT': 'ios_device_release_compile_only', - 'CrWinGomaStaging': 'release_bot_x86_minimal_symbols', - 'Linux Builder Goma Canary': 'gpu_tests_release_bot', - 'Linux Builder Goma Latest Client': 'gpu_tests_release_bot', - 'Linux Builder Goma RBE Canary': 'gpu_tests_release_bot', - 'Linux Builder Goma RBE Latest Client': 'gpu_tests_release_bot', - 'Mac Builder (dbg) Goma Canary': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma Canary (clobber)': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma Latest Client': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma Latest Client (clobber)': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma RBE Canary (clobber)': 'gpu_tests_debug_bot', - 'Mac Builder (dbg) Goma RBE Latest Client (clobber)': 'gpu_tests_debug_bot', - 'Mac Builder Goma Canary': 'gpu_tests_release_bot_minimal_symbols', - 'Mac Builder Goma Latest Client': 'gpu_tests_release_bot_minimal_symbols', - 'Win Builder (dbg) Goma Canary': 'gpu_tests_debug_bot_x86', - 'Win Builder (dbg) Goma Latest Client': 'gpu_tests_debug_bot_x86', - 'Win Builder (dbg) Goma RBE Latest Client': 'gpu_tests_debug_bot_x86', - 'Win Builder Goma Canary': 'gpu_tests_release_bot_x86_minimal_symbols', - 'Win Builder Goma Latest Client': 'gpu_tests_release_bot_x86_minimal_symbols', - 'Win Builder Goma RBE Latest Client': 'gpu_tests_release_bot_x86_minimal_symbols', - 'Win7 Builder (dbg) Goma Canary': 'gpu_tests_debug_bot_x86', - 'Win7 Builder (dbg) Goma Latest Client': 'gpu_tests_debug_bot_x86', - 'Win7 Builder Goma Canary': 'gpu_tests_release_bot_x86_minimal_symbols', - 'Win7 Builder Goma Latest Client': 'gpu_tests_release_bot_x86_minimal_symbols', - 'android-archive-dbg-goma-canary': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-latest': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-rbe-ats-canary': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-rbe-ats-latest': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-rbe-canary': 'android_without_codecs_debug_bot', - 'android-archive-dbg-goma-rbe-latest': 'android_without_codecs_debug_bot', - 'chromeos-amd64-generic-rel-goma-canary': 'chromeos_amd64-generic', - 'chromeos-amd64-generic-rel-goma-latest': 'chromeos_amd64-generic', - 'chromeos-amd64-generic-rel-goma-rbe-canary': 'chromeos_amd64-generic', - 'chromeos-amd64-generic-rel-goma-rbe-latest': 'chromeos_amd64-generic', - 'ios-device-goma-canary-clobber': 'ios_device_release_compile_only', - 'ios-device-goma-latest-clobber': 'ios_device_release_compile_only', - 'ios-device-goma-rbe-canary-clobber': 'ios_device_release_rbe_compile_only', - 'ios-device-goma-rbe-latest-clobber': 'ios_device_release_rbe_compile_only', - 'linux-archive-rel-goma-canary': 'release_bot', - 'linux-archive-rel-goma-canary-localoutputcache': 'release_bot', - 'linux-archive-rel-goma-latest': 'release_bot', - 'linux-archive-rel-goma-latest-localoutputcache': 'release_bot', - 'linux-archive-rel-goma-rbe-ats-canary': 'release_bot', - 'linux-archive-rel-goma-rbe-ats-latest': 'release_bot', - 'linux-archive-rel-goma-rbe-canary': 'release_bot', - 'linux-archive-rel-goma-rbe-latest': 'release_bot', - 'mac-archive-rel-goma-canary': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-canary-localoutputcache': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-latest': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-latest-localoutputcache': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-rbe-canary': 'release_bot_mac_strip_minimal_symbols', - 'mac-archive-rel-goma-rbe-latest': 'release_bot_mac_strip_minimal_symbols', - 'win32-archive-rel-goma-canary-localoutputcache': 'release_bot_x86_minimal_symbols_enable_archive_compression', - 'win32-archive-rel-goma-latest-localoutputcache': 'release_bot_x86_minimal_symbols_enable_archive_compression', - 'android-10-arm64-rel': 'android_release_trybot_arm64_fastbuild_webview_google', - 'android-asan': 'android_clang_asan_release_trybot', - 'android-bfcache-rel': 'android_release_trybot', - 'android-binary-size': 'android_binary_size', - 'android-cronet-arm-dbg': 'android_cronet_debug_static_bot_arm_no_neon', - 'android-deterministic-dbg': 'android_debug_bot', - 'android-deterministic-rel': 'android_without_codecs_release_trybot', - 'android-kitkat-arm-rel': 'android_release_trybot_fastbuild', - 'android-lollipop-arm-rel': 'android_release_trybot_fastbuild_webview_google', - 'android-marshmallow-arm64-rel': 'gpu_tests_android_release_trybot_arm64_resource_whitelisting_fastbuild_java_coverage', - 'android-marshmallow-x86-fyi-rel': 'android_release_trybot_x86_fastbuild_resource_whitelisting', - 'android-opus-kitkat-arm-rel': 'android_release_trybot', - 'android-oreo-arm64-cts-networkservice-dbg': 'android_debug_trybot_arm64', - 'android-oreo-arm64-dbg': 'android_debug_trybot_arm64', - 'android-pie-arm64-coverage-rel': 'android_release_trybot_arm64_webview_google_native_coverage', - 'android-pie-arm64-dbg': 'android_debug_trybot_arm64', - 'android-pie-arm64-rel': 'android_release_trybot_arm64_webview_google', - 'android-pie-x86-rel': 'android_release_trybot_x86_fastbuild_webview_google', - 'android-weblayer-pie-arm64-fyi-rel': 'android_release_trybot_arm64', - 'android-webview-marshmallow-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-nougat-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-oreo-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-pie-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-pie-arm64-fyi-rel': 'android_release_trybot_arm64_webview_google', - 'android_angle_deqp_rel_ng': 'angle_deqp_android_release_trybot_arm64', - 'android_angle_rel_ng': 'gpu_tests_android_release_trybot_arm64', - 'android_angle_vk32_deqp_rel_ng': 'angle_deqp_android_vulkan_ndk_release_trybot', - 'android_angle_vk32_rel_ng': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', - 'android_angle_vk64_deqp_rel_ng': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', - 'android_angle_vk64_rel_ng': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', - 'android_archive_rel_ng': 'android_release_trybot', - 'android_arm64_dbg_recipe': 'android_debug_trybot_compile_only_arm64_fastbuild', - 'android_blink_rel': 'android_release_trybot', - 'android_cfi_rel_ng': 'android_cfi_full_cfi_diag_thin_lto_release_static_dcheck_always_on_goma', - 'android_clang_dbg_recipe': 'android_clang_asan_debug_trybot_compile_only_fastbuild', - 'android_compile_dbg': 'android_debug_trybot_compile_only', - 'android_compile_x64_dbg': 'android_debug_trybot_compile_only_x64', - 'android_compile_x86_dbg': 'android_debug_trybot_compile_only_x86', - 'android_cronet': 'android_cronet_release_trybot_arm_no_neon', - 'android_cronet_tester': 'android_cronet_debug_static_bot_arm_no_neon', - 'android_mojo': 'android_release_trybot_arm64', - 'android_n5x_swarming_dbg': 'android_debug_trybot_arm64', - 'android_optional_gpu_tests_rel': 'gpu_tests_android_release_trybot_arm64', - 'android_unswarmed_pixel_aosp': 'android_debug_trybot_arm64', - 'cast_shell_android': 'android_cast_debug_static_bot_compile_only', - 'cast_shell_audio_linux': 'cast_audio_release_trybot', - 'cast_shell_linux': 'cast_release_trybot', - 'chromeos-amd64-generic-cfi-thin-lto-rel': 'chromeos_amd64-generic_cfi_thin_lto', - 'chromeos-amd64-generic-dbg': 'chromeos_amd64-generic_dbg', - 'chromeos-amd64-generic-rel': 'chromeos_amd64-generic', - 'chromeos-arm-generic-dbg': 'chromeos_arm-generic_dbg', - 'chromeos-arm-generic-rel': 'chromeos_arm-generic_dcheck_always_on', - 'chromeos-kevin-compile-rel': 'chromeos_kevin', - 'chromeos-kevin-rel': 'chromeos_kevin', - 'chromium_presubmit': 'presubmit', - 'closure_compilation': 'closure_compilation', - 'dawn-linux-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-mac-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-win10-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-win10-x86-deps-rel': 'dawn_tests_release_trybot_x86', - 'fuchsia-angle-rel': 'gpu_fyi_tests_release_trybot_fuchsia', - 'fuchsia-arm64-cast': 'release_trybot_fuchsia_arm64_cast', - 'fuchsia-compile-x64-dbg': 'debug_bot_fuchsia_compile_only', - 'fuchsia-fyi-arm64-rel': 'release_trybot_fuchsia_arm64', - 'fuchsia-fyi-x64-dbg': 'debug_bot_fuchsia', - 'fuchsia-fyi-x64-rel': 'release_trybot_fuchsia', - 'fuchsia-x64-cast': 'release_trybot_fuchsia_cast', - 'fuchsia_arm64': 'release_trybot_fuchsia_arm64', - 'fuchsia_x64': 'release_trybot_fuchsia', - 'gpu-fyi-try-android-l-nexus-5-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-l-nexus-6-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-5x-deqp-64': 'angle_deqp_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-5x-skgl-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-6p-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-9-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-n-nvidia-shield-tv-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-p-pixel-2-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-p-pixel-2-skv-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-deqp-vk-32': 'angle_deqp_android_vulkan_ndk_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-deqp-vk-64': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', - 'gpu-fyi-try-android-q-pixel-2-vk-32': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-vk-64': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', - 'gpu-fyi-try-linux-intel-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-linux-intel-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-intel-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-intel-sk-dawn-rel': 'gpu_tests_sk_dawn_release_trybot', - 'gpu-fyi-try-linux-intel-skv': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-linux-nvidia-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-linux-nvidia-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-skv': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-tsn': 'gpu_fyi_tests_release_trybot_tsan', - 'gpu-fyi-try-mac-amd-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-mac-amd-pro-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-amd-retina-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-amd-retina-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-amd-retina-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-asan': 'gpu_fyi_tests_release_trybot_asan', - 'gpu-fyi-try-mac-intel-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-intel-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-mac-intel-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-intel-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-nvidia-retina-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-nvidia-retina-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-nvidia-retina-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-intel-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win10-intel-exp-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-intel-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-dbg-64': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-win10-nvidia-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win10-nvidia-dx12vk-dbg-64': 'gpu_fyi_tests_dx12vk_debug_trybot', - 'gpu-fyi-try-win10-nvidia-dx12vk-rel-64': 'gpu_fyi_tests_dx12vk_release_trybot', - 'gpu-fyi-try-win10-nvidia-exp-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win10-nvidia-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-sk-dawn-rel-64': 'gpu_tests_sk_dawn_release_trybot', - 'gpu-fyi-try-win10-nvidia-skgl-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win7-amd-dbg-32': 'gpu_fyi_tests_debug_trybot_x86', - 'gpu-fyi-try-win7-amd-dqp-32': 'angle_deqp_release_trybot_x86', - 'gpu-fyi-try-win7-amd-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win7-nvidia-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win7-nvidia-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win7-nvidia-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-try-linux-nvidia-dbg': 'gpu_tests_debug_bot', - 'gpu-try-linux-nvidia-rel': 'gpu_tests_release_trybot', - 'gpu-try-mac-amd-retina-dbg': 'gpu_tests_debug_bot', - 'gpu-try-mac-intel-dbg': 'gpu_tests_debug_bot', - 'ios-device': 'ios_device_release_rbe_compile_only', - 'ios-simulator': 'ios_error', - 'ios-simulator-code-coverage': 'clang_code_coverage_ios', - 'ios-simulator-cr-recipe': 'ios_simulator_debug_static_bot', - 'ios-simulator-cronet': 'ios_cronet', - 'layout_test_leak_detection': 'release_trybot', - 'leak_detection_linux': 'release_trybot', - 'linux-angle-rel': 'gpu_fyi_tests_release_trybot', - 'linux-annotator-rel': 'release_trybot', - 'linux-autofill-assistant': 'autofill_assistant_release_trybot', - 'linux-bfcache-rel': 'release_bot', - 'linux-blink-heap-concurrent-marking-tsan-rel': 'release_trybot_tsan', - 'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification', - 'linux-blink-rel': 'release_bot_minimal_symbols', - 'linux-chromeos-compile-dbg': 'chromeos_with_codecs_debug_bot', - 'linux-chromeos-dbg': 'chromeos_with_codecs_debug_bot', - 'linux-chromeos-rel': 'chromeos_with_codecs_release_trybot_code_coverage', - 'linux-clang-tidy-dbg': 'debug_bot', - 'linux-clang-tidy-rel': 'release_trybot', - 'linux-dawn-rel': 'dawn_tests_release_trybot', - 'linux-dcheck-off-rel': 'release_trybot_dcheck_off', - 'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11', - 'linux-layout-tests-edit-ng': 'release_trybot', - 'linux-layout-tests-fragment-item': 'release_trybot', - 'linux-libfuzzer-asan-rel': 'libfuzzer_asan_release_trybot', - 'linux-ozone-rel': 'ozone_linux_release_trybot', - 'linux-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange_code_coverage', - 'linux-swangle-chromium-try-x64': 'gpu_tests_release_trybot', - 'linux-swangle-try-tot-angle-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-tot-angle-x86': 'angle_deqp_release_trybot_x86', - 'linux-swangle-try-tot-swiftshader-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', - 'linux-swangle-try-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-x86': 'angle_deqp_release_trybot_x86', - 'linux-trusty-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange', - 'linux-viz-rel': 'release_trybot', - 'linux-webkit-msan-rel': 'msan_release_bot', - 'linux-wpt-fyi-rel': 'release_trybot', - 'linux_android_dbg_ng': 'android_debug_bot', - 'linux_angle_deqp_rel_ng': 'angle_deqp_release_trybot', - 'linux_angle_ozone_rel_ng': 'angle_ozone_linux_system_gbm_libdrm_release_trybot', - 'linux_arm': 'release_trybot_arm', - 'linux_chromium_archive_rel_ng': 'release_bot', - 'linux_chromium_asan_rel_ng': 'asan_lsan_release_trybot', - 'linux_chromium_cfi_rel_ng': 'cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on_goma', - 'linux_chromium_chromeos_asan_rel_ng': 'asan_lsan_chromeos_release_trybot', - 'linux_chromium_chromeos_msan_rel_ng': 'chromeos_msan_release_bot', - 'linux_chromium_clobber_deterministic': 'release_trybot', - 'linux_chromium_clobber_rel_ng': 'release_trybot', - 'linux_chromium_compile_dbg_32_ng': 'debug_bot_x86', - 'linux_chromium_compile_dbg_ng': 'debug_bot', - 'linux_chromium_compile_rel_ng': 'release_trybot', - 'linux_chromium_dbg_ng': 'gpu_tests_debug_bot', - 'linux_chromium_msan_rel_ng': 'msan_release_bot', - 'linux_chromium_tsan_rel_ng': 'tsan_disable_nacl_release_trybot', - 'linux_chromium_ubsan_rel_ng': 'ubsan_vptr_release_bot', - 'linux_layout_tests_composite_after_paint': 'release_trybot', - 'linux_layout_tests_layout_ng_disabled': 'release_trybot', - 'linux_mojo': 'release_trybot', - 'linux_mojo_chromeos': 'chromeos_with_codecs_release_trybot', - 'linux_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'linux_upload_clang': 'release_bot', - 'linux_vr': 'vr_release_trybot', - 'mac-angle-rel': 'gpu_fyi_tests_release_trybot', - 'mac-coverage-rel': 'gpu_tests_release_trybot_deterministic_mac_code_coverage', - 'mac-dawn-rel': 'dawn_tests_release_trybot', - 'mac-osxbeta-rel': 'gpu_tests_release_trybot_deterministic_mac', - 'mac-rel': 'gpu_tests_release_trybot_deterministic_mac', - 'mac10.10-blink-rel': 'release_bot_minimal_symbols', - 'mac10.11-blink-rel': 'release_bot_minimal_symbols', - 'mac10.12-blink-rel': 'release_bot_minimal_symbols', - 'mac10.13-blink-rel': 'release_bot_minimal_symbols', - 'mac10.13_retina-blink-rel': 'release_bot_minimal_symbols', - 'mac10.14-blink-rel': 'release_bot_minimal_symbols', - 'mac10.15-blink-rel': 'release_bot_minimal_symbols_no_nacl', - 'mac_chromium_10.10': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_10.12_rel_ng': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_10.13_rel_ng': 'release_trybot', - 'mac_chromium_10.14_rel_ng': 'release_trybot', - 'mac_chromium_10.15_rel_ng': 'release_trybot_no_nacl', - 'mac_chromium_archive_rel_ng': 'release_bot_mac_strip_minimal_symbols', - 'mac_chromium_asan_rel_ng': 'asan_dcheck_disable_nacl_release_bot', - 'mac_chromium_compile_dbg_ng': 'gpu_tests_debug_bot', - 'mac_chromium_compile_rel_ng': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_dbg_ng': 'gpu_tests_debug_bot', - 'mac_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'mac-swangle-chromium-try-x64': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_upload_clang': 'release_bot', - 'try-nougat-phone-tester': 'android_debug_trybot_arm64', - 'win-angle-deqp-rel-32': 'angle_deqp_release_trybot_x86', - 'win-angle-deqp-rel-64': 'angle_deqp_release_trybot', - 'win-angle-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'win-angle-rel-64': 'gpu_fyi_tests_release_trybot', - 'win-annotator-rel': 'release_trybot', - 'win-asan': 'asan_clang_fuzzer_static_v8_heap_minimal_symbols_release', - 'win-celab-try-rel': 'release_bot_minimal_symbols', - 'win-dawn-rel': 'dawn_tests_release_trybot', - 'win-libfuzzer-asan-rel': 'libfuzzer_windows_asan_release_trybot', - 'win-swangle-chromium-try-x86': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win-swangle-try-tot-angle-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-tot-angle-x86': 'angle_deqp_release_trybot_x86', - 'win-swangle-try-tot-swiftshader-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', - 'win-swangle-try-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-x86': 'angle_deqp_release_trybot_x86', - 'win10-blink-rel': 'release_bot_x86_minimal_symbols', - 'win10_chromium_x64_coverage_rel_ng': 'gpu_tests_release_trybot_resource_whitelisting_code_coverage', - 'win10_chromium_x64_dbg_ng': 'gpu_tests_debug_bot', - 'win10_chromium_x64_rel_ng': 'gpu_tests_release_trybot_resource_whitelisting_code_coverage', - 'win10_chromium_x64_rel_ng_exp': 'release_trybot', - 'win7-blink-rel': 'release_bot_x86_minimal_symbols', - 'win7-rel': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win_archive': 'release_trybot_x86', - 'win_chromium_compile_dbg_ng': 'gpu_tests_debug_trybot_x86_compile_only', - 'win_chromium_compile_rel_ng': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win_chromium_dbg_ng': 'gpu_tests_debug_bot_x86', - 'win_chromium_x64_rel_ng': 'gpu_tests_release_trybot', - 'win_mojo': 'release_trybot_x86', - 'win_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'win_upload_clang': 'release_bot', - 'win_x64_archive': 'release_trybot', - 'WebRTC Chromium Android Builder': 'android_debug_static_bot_arm64', - 'WebRTC Chromium Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Android Builder': 'android_release_bot_minimal_symbols', - 'WebRTC Chromium FYI Android Builder (dbg)': 'android_debug_static_bot', - 'WebRTC Chromium FYI Android Builder ARM64 (dbg)': 'android_debug_static_bot_arm64', - 'WebRTC Chromium FYI Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Linux Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Mac Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Win Builder (dbg)': 'debug_bot_x86_no_com_init_hooks_with_codecs' - }, + 'findit': {}, 'goma': { 'Chromium Android ARM 32-bit Goma RBE Staging': 'android_release_bot_minimal_symbols', @@ -995,271 +362,7 @@ 'mac-archive-rel-goma-rbe-canary': 'release_bot_mac_strip_minimal_symbols', 'mac-archive-rel-goma-rbe-latest': 'release_bot_mac_strip_minimal_symbols', 'win32-archive-rel-goma-canary-localoutputcache': 'release_bot_x86_minimal_symbols_enable_archive_compression', - 'win32-archive-rel-goma-latest-localoutputcache': 'release_bot_x86_minimal_symbols_enable_archive_compression', - 'android-10-arm64-rel': 'android_release_trybot_arm64_fastbuild_webview_google', - 'android-asan': 'android_clang_asan_release_trybot', - 'android-bfcache-rel': 'android_release_trybot', - 'android-binary-size': 'android_binary_size', - 'android-cronet-arm-dbg': 'android_cronet_debug_static_bot_arm_no_neon', - 'android-deterministic-dbg': 'android_debug_bot', - 'android-deterministic-rel': 'android_without_codecs_release_trybot', - 'android-kitkat-arm-rel': 'android_release_trybot_fastbuild', - 'android-lollipop-arm-rel': 'android_release_trybot_fastbuild_webview_google', - 'android-marshmallow-arm64-rel': 'gpu_tests_android_release_trybot_arm64_resource_whitelisting_fastbuild_java_coverage', - 'android-marshmallow-x86-fyi-rel': 'android_release_trybot_x86_fastbuild_resource_whitelisting', - 'android-opus-kitkat-arm-rel': 'android_release_trybot', - 'android-oreo-arm64-cts-networkservice-dbg': 'android_debug_trybot_arm64', - 'android-oreo-arm64-dbg': 'android_debug_trybot_arm64', - 'android-pie-arm64-coverage-rel': 'android_release_trybot_arm64_webview_google_native_coverage', - 'android-pie-arm64-dbg': 'android_debug_trybot_arm64', - 'android-pie-arm64-rel': 'android_release_trybot_arm64_webview_google', - 'android-pie-x86-rel': 'android_release_trybot_x86_fastbuild_webview_google', - 'android-weblayer-pie-arm64-fyi-rel': 'android_release_trybot_arm64', - 'android-webview-marshmallow-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-nougat-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-oreo-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-pie-arm64-dbg': 'android_release_trybot_arm64_webview_google', - 'android-webview-pie-arm64-fyi-rel': 'android_release_trybot_arm64_webview_google', - 'android_angle_deqp_rel_ng': 'angle_deqp_android_release_trybot_arm64', - 'android_angle_rel_ng': 'gpu_tests_android_release_trybot_arm64', - 'android_angle_vk32_deqp_rel_ng': 'angle_deqp_android_vulkan_ndk_release_trybot', - 'android_angle_vk32_rel_ng': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', - 'android_angle_vk64_deqp_rel_ng': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', - 'android_angle_vk64_rel_ng': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', - 'android_archive_rel_ng': 'android_release_trybot', - 'android_arm64_dbg_recipe': 'android_debug_trybot_compile_only_arm64_fastbuild', - 'android_blink_rel': 'android_release_trybot', - 'android_cfi_rel_ng': 'android_cfi_full_cfi_diag_thin_lto_release_static_dcheck_always_on_goma', - 'android_clang_dbg_recipe': 'android_clang_asan_debug_trybot_compile_only_fastbuild', - 'android_compile_dbg': 'android_debug_trybot_compile_only', - 'android_compile_x64_dbg': 'android_debug_trybot_compile_only_x64', - 'android_compile_x86_dbg': 'android_debug_trybot_compile_only_x86', - 'android_cronet': 'android_cronet_release_trybot_arm_no_neon', - 'android_cronet_tester': 'android_cronet_debug_static_bot_arm_no_neon', - 'android_mojo': 'android_release_trybot_arm64', - 'android_n5x_swarming_dbg': 'android_debug_trybot_arm64', - 'android_optional_gpu_tests_rel': 'gpu_tests_android_release_trybot_arm64', - 'android_unswarmed_pixel_aosp': 'android_debug_trybot_arm64', - 'cast_shell_android': 'android_cast_debug_static_bot_compile_only', - 'cast_shell_audio_linux': 'cast_audio_release_trybot', - 'cast_shell_linux': 'cast_release_trybot', - 'chromeos-amd64-generic-cfi-thin-lto-rel': 'chromeos_amd64-generic_cfi_thin_lto', - 'chromeos-amd64-generic-dbg': 'chromeos_amd64-generic_dbg', - 'chromeos-amd64-generic-rel': 'chromeos_amd64-generic', - 'chromeos-arm-generic-dbg': 'chromeos_arm-generic_dbg', - 'chromeos-arm-generic-rel': 'chromeos_arm-generic_dcheck_always_on', - 'chromeos-kevin-compile-rel': 'chromeos_kevin', - 'chromeos-kevin-rel': 'chromeos_kevin', - 'chromium_presubmit': 'presubmit', - 'closure_compilation': 'closure_compilation', - 'dawn-linux-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-mac-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-win10-x64-deps-rel': 'dawn_tests_release_trybot', - 'dawn-win10-x86-deps-rel': 'dawn_tests_release_trybot_x86', - 'fuchsia-angle-rel': 'gpu_fyi_tests_release_trybot_fuchsia', - 'fuchsia-arm64-cast': 'release_trybot_fuchsia_arm64_cast', - 'fuchsia-compile-x64-dbg': 'debug_bot_fuchsia_compile_only', - 'fuchsia-fyi-arm64-rel': 'release_trybot_fuchsia_arm64', - 'fuchsia-fyi-x64-dbg': 'debug_bot_fuchsia', - 'fuchsia-fyi-x64-rel': 'release_trybot_fuchsia', - 'fuchsia-x64-cast': 'release_trybot_fuchsia_cast', - 'fuchsia_arm64': 'release_trybot_fuchsia_arm64', - 'fuchsia_x64': 'release_trybot_fuchsia', - 'gpu-fyi-try-android-l-nexus-5-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-l-nexus-6-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-5x-deqp-64': 'angle_deqp_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-5x-skgl-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-6p-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-9-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-n-nvidia-shield-tv-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-p-pixel-2-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-p-pixel-2-skv-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-deqp-vk-32': 'angle_deqp_android_vulkan_ndk_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-deqp-vk-64': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', - 'gpu-fyi-try-android-q-pixel-2-vk-32': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-vk-64': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', - 'gpu-fyi-try-linux-intel-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-linux-intel-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-intel-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-intel-sk-dawn-rel': 'gpu_tests_sk_dawn_release_trybot', - 'gpu-fyi-try-linux-intel-skv': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-linux-nvidia-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-linux-nvidia-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-skv': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-linux-nvidia-tsn': 'gpu_fyi_tests_release_trybot_tsan', - 'gpu-fyi-try-mac-amd-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-mac-amd-pro-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-amd-retina-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-amd-retina-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-amd-retina-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-asan': 'gpu_fyi_tests_release_trybot_asan', - 'gpu-fyi-try-mac-intel-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-intel-dqp': 'angle_deqp_release_trybot', - 'gpu-fyi-try-mac-intel-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-intel-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-nvidia-retina-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-nvidia-retina-exp': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-mac-nvidia-retina-rel': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-intel-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win10-intel-exp-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-intel-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-dbg-64': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-win10-nvidia-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win10-nvidia-dx12vk-dbg-64': 'gpu_fyi_tests_dx12vk_debug_trybot', - 'gpu-fyi-try-win10-nvidia-dx12vk-rel-64': 'gpu_fyi_tests_dx12vk_release_trybot', - 'gpu-fyi-try-win10-nvidia-exp-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win10-nvidia-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-nvidia-sk-dawn-rel-64': 'gpu_tests_sk_dawn_release_trybot', - 'gpu-fyi-try-win10-nvidia-skgl-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win7-amd-dbg-32': 'gpu_fyi_tests_debug_trybot_x86', - 'gpu-fyi-try-win7-amd-dqp-32': 'angle_deqp_release_trybot_x86', - 'gpu-fyi-try-win7-amd-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win7-nvidia-dqp-64': 'angle_deqp_release_trybot', - 'gpu-fyi-try-win7-nvidia-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win7-nvidia-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-try-linux-nvidia-dbg': 'gpu_tests_debug_bot', - 'gpu-try-linux-nvidia-rel': 'gpu_tests_release_trybot', - 'gpu-try-mac-amd-retina-dbg': 'gpu_tests_debug_bot', - 'gpu-try-mac-intel-dbg': 'gpu_tests_debug_bot', - 'ios-device': 'ios_device_release_rbe_compile_only', - 'ios-simulator': 'ios_error', - 'ios-simulator-code-coverage': 'clang_code_coverage_ios', - 'ios-simulator-cr-recipe': 'ios_simulator_debug_static_bot', - 'ios-simulator-cronet': 'ios_cronet', - 'layout_test_leak_detection': 'release_trybot', - 'leak_detection_linux': 'release_trybot', - 'linux-angle-rel': 'gpu_fyi_tests_release_trybot', - 'linux-annotator-rel': 'release_trybot', - 'linux-autofill-assistant': 'autofill_assistant_release_trybot', - 'linux-bfcache-rel': 'release_bot', - 'linux-blink-heap-concurrent-marking-tsan-rel': 'release_trybot_tsan', - 'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification', - 'linux-blink-rel': 'release_bot_minimal_symbols', - 'linux-chromeos-compile-dbg': 'chromeos_with_codecs_debug_bot', - 'linux-chromeos-dbg': 'chromeos_with_codecs_debug_bot', - 'linux-chromeos-rel': 'chromeos_with_codecs_release_trybot_code_coverage', - 'linux-clang-tidy-dbg': 'debug_bot', - 'linux-clang-tidy-rel': 'release_trybot', - 'linux-dawn-rel': 'dawn_tests_release_trybot', - 'linux-dcheck-off-rel': 'release_trybot_dcheck_off', - 'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11', - 'linux-layout-tests-edit-ng': 'release_trybot', - 'linux-layout-tests-fragment-item': 'release_trybot', - 'linux-libfuzzer-asan-rel': 'libfuzzer_asan_release_trybot', - 'linux-ozone-rel': 'ozone_linux_release_trybot', - 'linux-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange_code_coverage', - 'linux-swangle-chromium-try-x64': 'gpu_tests_release_trybot', - 'linux-swangle-try-tot-angle-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-tot-angle-x86': 'angle_deqp_release_trybot_x86', - 'linux-swangle-try-tot-swiftshader-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', - 'linux-swangle-try-x64': 'angle_deqp_release_trybot', - 'linux-swangle-try-x86': 'angle_deqp_release_trybot_x86', - 'linux-trusty-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange', - 'linux-viz-rel': 'release_trybot', - 'linux-webkit-msan-rel': 'msan_release_bot', - 'linux-wpt-fyi-rel': 'release_trybot', - 'linux_android_dbg_ng': 'android_debug_bot', - 'linux_angle_deqp_rel_ng': 'angle_deqp_release_trybot', - 'linux_angle_ozone_rel_ng': 'angle_ozone_linux_system_gbm_libdrm_release_trybot', - 'linux_arm': 'release_trybot_arm', - 'linux_chromium_archive_rel_ng': 'release_bot', - 'linux_chromium_asan_rel_ng': 'asan_lsan_release_trybot', - 'linux_chromium_cfi_rel_ng': 'cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on_goma', - 'linux_chromium_chromeos_asan_rel_ng': 'asan_lsan_chromeos_release_trybot', - 'linux_chromium_chromeos_msan_rel_ng': 'chromeos_msan_release_bot', - 'linux_chromium_clobber_deterministic': 'release_trybot', - 'linux_chromium_clobber_rel_ng': 'release_trybot', - 'linux_chromium_compile_dbg_32_ng': 'debug_bot_x86', - 'linux_chromium_compile_dbg_ng': 'debug_bot', - 'linux_chromium_compile_rel_ng': 'release_trybot', - 'linux_chromium_dbg_ng': 'gpu_tests_debug_bot', - 'linux_chromium_msan_rel_ng': 'msan_release_bot', - 'linux_chromium_tsan_rel_ng': 'tsan_disable_nacl_release_trybot', - 'linux_chromium_ubsan_rel_ng': 'ubsan_vptr_release_bot', - 'linux_layout_tests_composite_after_paint': 'release_trybot', - 'linux_layout_tests_layout_ng_disabled': 'release_trybot', - 'linux_mojo': 'release_trybot', - 'linux_mojo_chromeos': 'chromeos_with_codecs_release_trybot', - 'linux_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'linux_upload_clang': 'release_bot', - 'linux_vr': 'vr_release_trybot', - 'mac-angle-rel': 'gpu_fyi_tests_release_trybot', - 'mac-coverage-rel': 'gpu_tests_release_trybot_deterministic_mac_code_coverage', - 'mac-dawn-rel': 'dawn_tests_release_trybot', - 'mac-osxbeta-rel': 'gpu_tests_release_trybot_deterministic_mac', - 'mac-rel': 'gpu_tests_release_trybot_deterministic_mac', - 'mac10.10-blink-rel': 'release_bot_minimal_symbols', - 'mac10.11-blink-rel': 'release_bot_minimal_symbols', - 'mac10.12-blink-rel': 'release_bot_minimal_symbols', - 'mac10.13-blink-rel': 'release_bot_minimal_symbols', - 'mac10.13_retina-blink-rel': 'release_bot_minimal_symbols', - 'mac10.14-blink-rel': 'release_bot_minimal_symbols', - 'mac10.15-blink-rel': 'release_bot_minimal_symbols_no_nacl', - 'mac_chromium_10.10': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_10.12_rel_ng': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_10.13_rel_ng': 'release_trybot', - 'mac_chromium_10.14_rel_ng': 'release_trybot', - 'mac_chromium_10.15_rel_ng': 'release_trybot_no_nacl', - 'mac_chromium_archive_rel_ng': 'release_bot_mac_strip_minimal_symbols', - 'mac_chromium_asan_rel_ng': 'asan_dcheck_disable_nacl_release_bot', - 'mac_chromium_compile_dbg_ng': 'gpu_tests_debug_bot', - 'mac_chromium_compile_rel_ng': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_chromium_dbg_ng': 'gpu_tests_debug_bot', - 'mac_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'mac-swangle-chromium-try-x64': 'gpu_tests_release_trybot_deterministic_mac', - 'mac_upload_clang': 'release_bot', - 'try-nougat-phone-tester': 'android_debug_trybot_arm64', - 'win-angle-deqp-rel-32': 'angle_deqp_release_trybot_x86', - 'win-angle-deqp-rel-64': 'angle_deqp_release_trybot', - 'win-angle-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'win-angle-rel-64': 'gpu_fyi_tests_release_trybot', - 'win-annotator-rel': 'release_trybot', - 'win-asan': 'asan_clang_fuzzer_static_v8_heap_minimal_symbols_release', - 'win-celab-try-rel': 'release_bot_minimal_symbols', - 'win-dawn-rel': 'dawn_tests_release_trybot', - 'win-libfuzzer-asan-rel': 'libfuzzer_windows_asan_release_trybot', - 'win-swangle-chromium-try-x86': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win-swangle-try-tot-angle-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-tot-angle-x86': 'angle_deqp_release_trybot_x86', - 'win-swangle-try-tot-swiftshader-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', - 'win-swangle-try-x64': 'angle_deqp_release_trybot', - 'win-swangle-try-x86': 'angle_deqp_release_trybot_x86', - 'win10-blink-rel': 'release_bot_x86_minimal_symbols', - 'win10_chromium_x64_coverage_rel_ng': 'gpu_tests_release_trybot_resource_whitelisting_code_coverage', - 'win10_chromium_x64_dbg_ng': 'gpu_tests_debug_bot', - 'win10_chromium_x64_rel_ng': 'gpu_tests_release_trybot_resource_whitelisting_code_coverage', - 'win10_chromium_x64_rel_ng_exp': 'release_trybot', - 'win7-blink-rel': 'release_bot_x86_minimal_symbols', - 'win7-rel': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win_archive': 'release_trybot_x86', - 'win_chromium_compile_dbg_ng': 'gpu_tests_debug_trybot_x86_compile_only', - 'win_chromium_compile_rel_ng': 'gpu_tests_release_trybot_x86_resource_whitelisting', - 'win_chromium_dbg_ng': 'gpu_tests_debug_bot_x86', - 'win_chromium_x64_rel_ng': 'gpu_tests_release_trybot', - 'win_mojo': 'release_trybot_x86', - 'win_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'win_upload_clang': 'release_bot', - 'win_x64_archive': 'release_trybot', - 'WebRTC Chromium Android Builder': 'android_debug_static_bot_arm64', - 'WebRTC Chromium Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Android Builder': 'android_release_bot_minimal_symbols', - 'WebRTC Chromium FYI Android Builder (dbg)': 'android_debug_static_bot', - 'WebRTC Chromium FYI Android Builder ARM64 (dbg)': 'android_debug_static_bot_arm64', - 'WebRTC Chromium FYI Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Linux Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Mac Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Win Builder (dbg)': 'debug_bot_x86_no_com_init_hooks_with_codecs' + 'win32-archive-rel-goma-latest-localoutputcache': 'release_bot_x86_minimal_symbols_enable_archive_compression' }, 'try': { @@ -1394,11 +497,13 @@ 'gpu-try-mac-amd-retina-dbg': 'gpu_tests_debug_bot', 'gpu-try-mac-intel-dbg': 'gpu_tests_debug_bot', 'ios-device': 'ios_device_release_rbe_compile_only', - 'ios-simulator': 'ios_error', + 'ios-simulator': 'ios_simulator_debug_static_rbe_bot', 'ios-simulator-code-coverage': 'clang_code_coverage_ios', 'ios-simulator-cr-recipe': 'ios_simulator_debug_static_bot', 'ios-simulator-cronet': 'ios_cronet', 'ios-simulator-full-configs': 'ios_simulator_debug_static_bot', + 'ios13-beta-simulator': 'ios_simulator_debug_static_rbe_bot', + 'ios13-sdk-simulator': 'ios_simulator_debug_static_rbe_bot', 'layout_test_leak_detection': 'release_trybot', 'leak_detection_linux': 'release_trybot', 'linux-angle-rel': 'gpu_fyi_tests_release_trybot', @@ -1462,6 +567,7 @@ 'mac-dawn-rel': 'dawn_tests_release_trybot', 'mac-osxbeta-rel': 'gpu_tests_release_trybot_deterministic_mac', 'mac-rel': 'gpu_tests_release_trybot_deterministic_mac', + 'mac-swangle-chromium-try-x64': 'gpu_tests_release_trybot_deterministic_mac', 'mac10.10-blink-rel': 'release_bot_minimal_symbols', 'mac10.11-blink-rel': 'release_bot_minimal_symbols', 'mac10.12-blink-rel': 'release_bot_minimal_symbols', @@ -1480,7 +586,6 @@ 'mac_chromium_compile_rel_ng': 'gpu_tests_release_trybot_deterministic_mac', 'mac_chromium_dbg_ng': 'gpu_tests_debug_bot', 'mac_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', - 'mac-swangle-chromium-try-x64': 'gpu_tests_release_trybot_deterministic_mac', 'mac_upload_clang': 'release_bot', 'try-nougat-phone-tester': 'android_debug_trybot_arm64', 'win-angle-deqp-rel-32': 'angle_deqp_release_trybot_x86', @@ -1514,36 +619,14 @@ 'win_mojo': 'release_trybot_x86', 'win_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', 'win_upload_clang': 'release_bot', - 'win_x64_archive': 'release_trybot', - 'WebRTC Chromium Android Builder': 'android_debug_static_bot_arm64', - 'WebRTC Chromium Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Android Builder': 'android_release_bot_minimal_symbols', - 'WebRTC Chromium FYI Android Builder (dbg)': 'android_debug_static_bot', - 'WebRTC Chromium FYI Android Builder ARM64 (dbg)': 'android_debug_static_bot_arm64', - 'WebRTC Chromium FYI Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Linux Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Mac Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Win Builder (dbg)': 'debug_bot_x86_no_com_init_hooks_with_codecs' + 'win_x64_archive': 'release_trybot' }, 'webrtc': { 'WebRTC Chromium Android Builder': 'android_debug_static_bot_arm64', 'WebRTC Chromium Linux Builder': 'gpu_tests_release_bot', 'WebRTC Chromium Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Android Builder': 'android_release_bot_minimal_symbols', - 'WebRTC Chromium FYI Android Builder (dbg)': 'android_debug_static_bot', - 'WebRTC Chromium FYI Android Builder ARM64 (dbg)': 'android_debug_static_bot_arm64', - 'WebRTC Chromium FYI Linux Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Linux Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Mac Builder': 'gpu_tests_release_bot', - 'WebRTC Chromium FYI Mac Builder (dbg)': 'debug_bot', - 'WebRTC Chromium FYI Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs', - 'WebRTC Chromium FYI Win Builder (dbg)': 'debug_bot_x86_no_com_init_hooks_with_codecs' + 'WebRTC Chromium Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs' }, 'webrtc.fyi': { @@ -1571,7 +654,7 @@ 'win32-archive-dbg', 'win-archive-rel', 'win-archive-dbg' - ], + ] }, 'configs': { @@ -1632,6 +715,14 @@ 'compile_only', 'android_fastbuild' ], + 'android_clang_asan_release_bot': [ + 'android', + 'clang', + 'asan', + 'release_bot', + 'strip_debug_info', + 'minimal_symbols' + ], 'android_clang_asan_release_trybot': [ 'android', 'clang', @@ -1836,6 +927,15 @@ 'arm64', 'strip_debug_info' ], + 'android_release_bot_minimal_symbols_arm64_fastbuild_webview_google': [ + 'android', + 'release_bot', + 'minimal_symbols', + 'arm64', + 'strip_debug_info', + 'android_fastbuild', + 'webview_google' + ], 'android_release_bot_minimal_symbols_arm64_webview_google': [ 'android', 'release_bot', @@ -1844,6 +944,38 @@ 'strip_debug_info', 'webview_google' ], + 'android_release_bot_minimal_symbols_fastbuild': [ + 'android', + 'release_bot', + 'minimal_symbols', + 'strip_debug_info', + 'android_fastbuild' + ], + 'android_release_bot_minimal_symbols_fastbuild_webview_google': [ + 'android', + 'release_bot', + 'minimal_symbols', + 'strip_debug_info', + 'android_fastbuild', + 'webview_google' + ], + 'android_release_bot_minimal_symbols_x86_fastbuild_resource_whitelisting': [ + 'android', + 'release_bot', + 'minimal_symbols', + 'x86', + 'android_fastbuild', + 'resource_whitelisting' + ], + 'android_release_bot_minimal_symbols_x86_fastbuild_webview_google': [ + 'android', + 'release_bot', + 'minimal_symbols', + 'x86', + 'strip_debug_info', + 'android_fastbuild', + 'webview_google' + ], 'android_release_trybot': [ 'android', 'release_trybot', @@ -2165,6 +1297,10 @@ 'amd64-generic', 'debug' ], + 'chromeos_arm-generic': [ + 'chromeos_device', + 'arm-generic' + ], 'chromeos_arm-generic_dcheck_always_on': [ 'chromeos_device', 'arm-generic', @@ -2445,6 +1581,18 @@ 'release_trybot', 'x86' ], + 'gpu_tests_android_release_bot_minimal_symbols_arm64_fastbuild': [ + 'gpu_tests', + 'android', + 'release_bot', + 'minimal_symbols', + 'arm64', + 'resource_whitelisting', + 'static_angle', + 'android_fastbuild', + 'webview_google', + 'android_no_proguard' + ], 'gpu_tests_android_release_bot_minimal_symbols_arm64_fastbuild_java_coverage': [ 'gpu_tests', 'android', @@ -2593,9 +1741,6 @@ 'sk_dawn', 'release_trybot' ], - 'ios_error': [ - 'error' - ], 'ios_clang_tot': [ 'clang_tot', 'ios_simulator', @@ -2828,6 +1973,10 @@ 'msan_no_origins', 'release_bot' ], + 'ozone_linux_release_bot': [ + 'ozone_linux', + 'release_bot' + ], 'ozone_linux_release_trybot': [ 'ozone_linux', 'release_trybot' @@ -2847,11 +1996,25 @@ 'release_bot', 'fuchsia' ], + 'release_bot_fuchsia_cast': [ + 'release_bot', + 'fuchsia', + 'cast', + 'cast', + 'no_symbols' + ], 'release_bot_fuchsia_arm64': [ 'release_bot', 'fuchsia', 'arm64' ], + 'release_bot_fuchsia_arm64_cast': [ + 'release_bot', + 'fuchsia', + 'arm64', + 'cast', + 'no_symbols' + ], 'release_bot_mac_strip_minimal_symbols': [ 'release_bot', 'mac_strip',
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 6ab90ad..8fc5cc6d 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -4714,9 +4714,10 @@ </histogram> <histogram name="Android.WebView.LoadDataWithBaseUrl.BaseUrl" - enum="WebViewUrlScheme" expires_after="2020-05-05"> + enum="WebViewUrlScheme" expires_after="2021-05-05"> <owner>ntfschr@chromium.org</owner> <owner>torne@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> <summary> Records the scheme for the baseUrl parameter to loadDataWithBaseURL. This also records if this value is "empty", as determined by @@ -4748,9 +4749,10 @@ </histogram> <histogram name="Android.WebView.LoadUrl.UrlScheme" enum="WebViewUrlScheme" - expires_after="2020-05-05"> + expires_after="2021-05-05"> <owner>ntfschr@chromium.org</owner> <owner>torne@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> <summary> Records the scheme for the URL loaded by a browser-initiated navigation. Specifically, this is the scheme of the URL passed to loadUrl() (and its @@ -27102,6 +27104,9 @@ <histogram name="ConnectivityDiagnostics.HTTP_LATENCY" units="ms" expires_after="M81"> + <obsolete> + Removed 04/2020. No longer used. + </obsolete> <owner>ebeach@google.com</owner> <summary>HTTP latency seen by the Connectivity Diagnostics.</summary> <details> @@ -27129,6 +27134,9 @@ <histogram name="ConnectivityDiagnostics.TestVerdict" enum="ConnectivityDiagnosticsTestVerdict" expires_after="M81"> + <obsolete> + Removed 04/2020. No longer used. + </obsolete> <owner>ebeach@google.com</owner> <summary> Connectivity Diagnostics App: Outcome of the connectivity tests. @@ -27137,6 +27145,9 @@ <histogram name="ConnectivityDiagnostics.TimeTaken" units="ms" expires_after="M81"> + <obsolete> + Removed 04/2020. No longer used. + </obsolete> <owner>ebeach@google.com</owner> <summary> Connectivity Diagnostics App: Amount of time taken to run each of the @@ -168447,11 +168458,14 @@ <summary>Tracks UI events related to the translate bubble.</summary> </histogram> -<histogram name="Translate.CaptureText" units="ms" expires_after="M85"> - <owner>kenjibaheux@google.com</owner> +<histogram name="Translate.CaptureText" units="ms" expires_after="M86"> + <owner>dougarnett@google.com</owner> + <owner>megjablon@google.com</owner> <summary> - The time spent capturing plain text from the DOM. This is reported by - ChromeRenderViewObserver when a page is loaded completely. + The time spent capturing plain text from the DOM. Pre sub frame translation + support (this includes before M83), this is reported by + ChromeRenderViewObserver. If sub frame translation is enabled, this is + captured in the browser process and reported by ContentTranslateDriver. </summary> </histogram> @@ -169047,6 +169061,38 @@ </summary> </histogram> +<histogram name="Translate.TranslateFrameCount" units="frames" + expires_after="M86"> + <owner>dougarnett@google.com</owner> + <owner>megjablon@google.com</owner> + <summary> + The number of frames translated for a translated page (including the main + frame). This is recorded when sub frame translation is enabled. + </summary> +</histogram> + +<histogram name="Translate.TranslateSubframe.ErrorType" enum="TranslateError" + expires_after="2020-08-02"> + <owner>dougarnett@google.com</owner> + <owner>megjablon@google.com</owner> + <summary> + The error type for a failed sub frame translation (where the main frame was + successfully translated). This is recorded when sub frame translation is + enabled. + </summary> +</histogram> + +<histogram name="Translate.TranslateSubframe.SuccessPercentage" units="%" + expires_after="2020-08-02"> + <owner>dougarnett@google.com</owner> + <owner>megjablon@google.com</owner> + <summary> + The percentage of sub frames that translated successfully for a translated + page (where the main frame was successfully translated). This is recorded + when sub frame translation is enabled. + </summary> +</histogram> + <histogram name="Translate.UndisplayableLanguage" enum="LanguageCode" expires_after="M81"> <owner>kenjibaheux@google.com</owner> @@ -187111,6 +187157,9 @@ </histogram_suffixes> <histogram_suffixes name="ConnectivityDiagnostics" separator="."> + <obsolete> + Removed 04/2020. No longer used. + </obsolete> <suffix name="0" label="INTERNET_DISCONNECTED"/> <suffix name="1" label="CHROME_VERSION"/> <suffix name="2" label="CHROMEOS_VERSION"/>
diff --git a/tools/perf/page_sets/press_story.py b/tools/perf/page_sets/press_story.py index f9d0353..57b1369 100644 --- a/tools/perf/page_sets/press_story.py +++ b/tools/perf/page_sets/press_story.py
@@ -29,12 +29,13 @@ DETERMINISTIC_JS = False NAME = None - def __init__(self, ps): + def __init__(self, ps, tags=None): super(PressStory, self).__init__( self.URL, ps, base_dir=ps.base_dir, make_javascript_deterministic=self.DETERMINISTIC_JS, - name=self.NAME if self.NAME else self.URL) + name=self.NAME if self.NAME else self.URL, + tags=tags) self._measurements = [] self._action_runner = None
diff --git a/ui/base/cocoa/menu_controller_unittest.mm b/ui/base/cocoa/menu_controller_unittest.mm index 6578019..19a7cec 100644 --- a/ui/base/cocoa/menu_controller_unittest.mm +++ b/ui/base/cocoa/menu_controller_unittest.mm
@@ -12,6 +12,7 @@ #include "third_party/skia/include/core/SkBitmap.h" #import "ui/base/cocoa/menu_controller.h" #include "ui/base/l10n/l10n_util_mac.h" +#include "ui/base/models/image_model.h" #include "ui/base/models/simple_menu_model.h" #include "ui/base/resource/resource_bundle.h" #import "ui/base/test/cocoa_helper.h" @@ -148,13 +149,9 @@ base::string16 GetLabelForCommandId(int command_id) const override { return label_; } - bool GetIconForCommandId(int command_id, gfx::Image* icon) const override { - if (icon_.IsEmpty()) { - return false; - } else { - *icon = icon_; - return true; - } + ui::ImageModel GetIconForCommandId(int command_id) const override { + return icon_.IsEmpty() ? ui::ImageModel() + : ui::ImageModel::FromImage(icon_); } void SetDynamicLabel(base::string16 label) { label_ = label; } void SetDynamicIcon(const gfx::Image& icon) { icon_ = icon; }
diff --git a/ui/base/models/simple_menu_model.cc b/ui/base/models/simple_menu_model.cc index 6f7faa95..88053e9 100644 --- a/ui/base/models/simple_menu_model.cc +++ b/ui/base/models/simple_menu_model.cc
@@ -49,14 +49,9 @@ return base::string16(); } -bool SimpleMenuModel::Delegate::GetIconForCommandId( - int command_id, gfx::Image* image_skia) const { - return false; -} - -const gfx::VectorIcon* SimpleMenuModel::Delegate::GetVectorIconForCommandId( +ImageModel SimpleMenuModel::Delegate::GetIconForCommandId( int command_id) const { - return nullptr; + return ImageModel(); } void SimpleMenuModel::Delegate::OnMenuWillShow(SimpleMenuModel* /*source*/) {} @@ -287,9 +282,7 @@ } void SimpleMenuModel::SetIcon(int index, const ui::ImageModel& icon) { - Item* item = &items_[ValidateItemIndex(index)]; - DCHECK(item->icon.IsEmpty()); - item->icon = icon; + items_[ValidateItemIndex(index)].icon = icon; MenuItemsChanged(); } @@ -407,12 +400,8 @@ } ImageModel SimpleMenuModel::GetIconAt(int index) const { - if (IsItemDynamicAt(index)) { - gfx::Image icon; - if (delegate_->GetIconForCommandId(GetCommandIdAt(index), &icon)) - return ImageModel::FromImage(icon); - return ImageModel(); - } + if (IsItemDynamicAt(index)) + return delegate_->GetIconForCommandId(GetCommandIdAt(index)); ValidateItemIndex(index); return items_[index].icon;
diff --git a/ui/base/models/simple_menu_model.h b/ui/base/models/simple_menu_model.h index a6ae5050..2b06f3f 100644 --- a/ui/base/models/simple_menu_model.h +++ b/ui/base/models/simple_menu_model.h
@@ -16,11 +16,6 @@ #include "ui/base/models/image_model.h" #include "ui/base/models/menu_model.h" -namespace gfx { -class Image; -struct VectorIcon; -} - namespace ui { class ButtonMenuItemModel; @@ -48,15 +43,8 @@ // Some command ids have labels and icons that change over time. virtual bool IsItemForCommandIdDynamic(int command_id) const; virtual base::string16 GetLabelForCommandId(int command_id) const; - // Gets the icon for the item with the specified id, returning true if there - // is an icon, false otherwise. - virtual bool GetIconForCommandId(int command_id, - gfx::Image* icon) const; - - // Returns the vector icon for the given command id, or null if there is - // none. Only used for dynamic menu items. - virtual const gfx::VectorIcon* GetVectorIconForCommandId( - int command_id) const; + // Gets the icon for the item with the specified id. + virtual ImageModel GetIconForCommandId(int command_id) const; // Performs the action associates with the specified command id. // The passed |event_flags| are the flags from the event which issued this
diff --git a/ui/base/models/simple_menu_model_unittest.cc b/ui/base/models/simple_menu_model_unittest.cc index 56b40a7b..4fe768d1 100644 --- a/ui/base/models/simple_menu_model_unittest.cc +++ b/ui/base/models/simple_menu_model_unittest.cc
@@ -43,12 +43,10 @@ return item_with_icon_ == command_id; } - bool GetIconForCommandId(int command_id, gfx::Image* icon) const override { - if (item_with_icon_ == command_id) { - *icon = gfx::test::CreateImage(16, 16); - return true; - } - return false; + ImageModel GetIconForCommandId(int command_id) const override { + return item_with_icon_ == command_id + ? ImageModel::FromImage(gfx::test::CreateImage(16, 16)) + : ImageModel(); } private:
diff --git a/ui/chromeos/ime/candidate_window_view.cc b/ui/chromeos/ime/candidate_window_view.cc index 52027104..a1db4ff 100644 --- a/ui/chromeos/ime/candidate_window_view.cc +++ b/ui/chromeos/ime/candidate_window_view.cc
@@ -144,13 +144,11 @@ DISALLOW_COPY_AND_ASSIGN(InformationTextArea); }; -CandidateWindowView::CandidateWindowView(gfx::NativeView parent, - int window_shell_id) +CandidateWindowView::CandidateWindowView(gfx::NativeView parent) : selected_candidate_index_in_page_(-1), should_show_at_composition_head_(false), should_show_upper_side_(false), - was_candidate_window_open_(false), - window_shell_id_(window_shell_id) { + was_candidate_window_open_(false) { DialogDelegate::SetButtons(ui::DIALOG_BUTTON_NONE); SetCanActivate(false); DCHECK(parent);
diff --git a/ui/chromeos/ime/candidate_window_view.h b/ui/chromeos/ime/candidate_window_view.h index 3bc5048..0e414ac15 100644 --- a/ui/chromeos/ime/candidate_window_view.h +++ b/ui/chromeos/ime/candidate_window_view.h
@@ -32,10 +32,7 @@ virtual void OnCandidateCommitted(int index) = 0; }; - explicit CandidateWindowView( - gfx::NativeView parent, - int window_shell_id = - -1 /* equals ash::ShellWindowId::kShellWindowId_Invalid */); + explicit CandidateWindowView(gfx::NativeView parent); ~CandidateWindowView() override; views::Widget* InitWidget(); @@ -134,9 +131,6 @@ // send OnCandidateWindowOpened and OnCandidateWindowClosed events. bool was_candidate_window_open_; - // Corresponds to ash::ShellWindowId. - const int window_shell_id_; - DISALLOW_COPY_AND_ASSIGN(CandidateWindowView); };
diff --git a/ui/chromeos/ime/suggestion_window_view.cc b/ui/chromeos/ime/suggestion_window_view.cc index c6fc496e..ecbcd816 100644 --- a/ui/chromeos/ime/suggestion_window_view.cc +++ b/ui/chromeos/ime/suggestion_window_view.cc
@@ -55,9 +55,7 @@ } // namespace -SuggestionWindowView::SuggestionWindowView(gfx::NativeView parent, - int window_shell_id) - : window_shell_id_(window_shell_id) { +SuggestionWindowView::SuggestionWindowView(gfx::NativeView parent) { DialogDelegate::SetButtons(ui::DIALOG_BUTTON_NONE); SetCanActivate(false); DCHECK(parent);
diff --git a/ui/chromeos/ime/suggestion_window_view.h b/ui/chromeos/ime/suggestion_window_view.h index e309eb0..4f905c56 100644 --- a/ui/chromeos/ime/suggestion_window_view.h +++ b/ui/chromeos/ime/suggestion_window_view.h
@@ -20,10 +20,7 @@ class UI_CHROMEOS_EXPORT SuggestionWindowView : public views::BubbleDialogDelegateView { public: - explicit SuggestionWindowView( - gfx::NativeView parent, - int window_shell_id = - -1 /* equals ash::ShellWindowId::kShellWindowId_Invalid */); + explicit SuggestionWindowView(gfx::NativeView parent); ~SuggestionWindowView() override; views::Widget* InitWidget(); @@ -50,9 +47,6 @@ // The suggestion view is used for rendering suggestion. SuggestionView* suggestion_view_; - // Corresponds to ash::ShellWindowId. - const int window_shell_id_; - DISALLOW_COPY_AND_ASSIGN(SuggestionWindowView); };
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb index 671a0ffc..0bab81b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -383,7 +383,7 @@ <translation id="5330145655348521461">تم فتح هذه الملفات على جهاز سطح مكتب آخر. يمكنك الانتقال إلى <ph name="USER_NAME" /> (<ph name="MAIL_ADDRESS" />) للاطلاع عليها.</translation> <translation id="5330512191124428349">الحصول على معلومات</translation> <translation id="5335458522276292100">الاحتفاظ بنسخة احتياطية من <ph name="FILE_COUNT" /> في <ph name="BEGIN_LINK" />Google Drive<ph name="END_LINK" /></translation> -<translation id="5358764674931277">معدل عرض الإطارات</translation> +<translation id="5358764674931277">عدد اللقطات في الثانية</translation> <translation id="5368191757080475556">مشاركة المجلد مع نظام التشغيل Linux</translation> <translation id="5402367795255837559">لغة برايل</translation> <translation id="5412637665001827670">لوحة المفاتيح البلغارية</translation>
diff --git a/ui/views/controls/progress_bar.cc b/ui/views/controls/progress_bar.cc index 3801b43..55cf6bc5 100644 --- a/ui/views/controls/progress_bar.cc +++ b/ui/views/controls/progress_bar.cc
@@ -9,6 +9,7 @@ #include <memory> #include <string> +#include "base/i18n/number_formatting.h" #include "base/logging.h" #include "base/macros.h" #include "cc/paint/paint_flags.h" @@ -21,6 +22,7 @@ #include "ui/gfx/color_utils.h" #include "ui/native_theme/native_theme.h" #include "ui/views/metadata/metadata_impl_macros.h" +#include "ui/views/widget/widget.h" namespace views { @@ -42,6 +44,10 @@ } } +int RoundToPercent(double fractional_value) { + return static_cast<int>(fractional_value * 100); +} + } // namespace ProgressBar::ProgressBar(int preferred_height, bool allow_round_corner) @@ -54,6 +60,10 @@ void ProgressBar::GetAccessibleNodeData(ui::AXNodeData* node_data) { node_data->role = ax::mojom::Role::kProgressIndicator; + if (IsIndeterminate()) + node_data->RemoveStringAttribute(ax::mojom::StringAttribute::kValue); + else + node_data->SetValue(base::FormatPercent(RoundToPercent(current_value_))); } gfx::Size ProgressBar::CalculatePreferredSize() const { @@ -64,6 +74,14 @@ return pref_size; } +void ProgressBar::VisibilityChanged(View* starting_from, bool is_visible) { + MaybeNotifyAccessibilityValueChanged(); +} + +void ProgressBar::AddedToWidget() { + MaybeNotifyAccessibilityValueChanged(); +} + void ProgressBar::OnPaint(gfx::Canvas* canvas) { if (IsIndeterminate()) return OnPaintIndeterminate(canvas); @@ -117,6 +135,8 @@ indeterminate_bar_animation_.reset(); OnPropertyChanged(¤t_value_, kPropertyEffectsPaint); } + + MaybeNotifyAccessibilityValueChanged(); } SkColor ProgressBar::GetForegroundColor() const { @@ -227,6 +247,15 @@ canvas->DrawPath(slice_path, slice_flags); } +void ProgressBar::MaybeNotifyAccessibilityValueChanged() { + if (!GetWidget() || !GetWidget()->IsVisible() || + RoundToPercent(current_value_) == last_announced_percentage_) { + return; + } + last_announced_percentage_ = RoundToPercent(current_value_); + NotifyAccessibilityEvent(ax::mojom::Event::kValueChanged, true); +} + BEGIN_METADATA(ProgressBar) METADATA_PARENT_CLASS(View) ADD_PROPERTY_METADATA(ProgressBar, SkColor, ForegroundColor)
diff --git a/ui/views/controls/progress_bar.h b/ui/views/controls/progress_bar.h index 563c15c..b57af1f1 100644 --- a/ui/views/controls/progress_bar.h +++ b/ui/views/controls/progress_bar.h
@@ -30,9 +30,11 @@ bool allow_round_corner = true); ~ProgressBar() override; - // Overridden from View: + // View: void GetAccessibleNodeData(ui::AXNodeData* node_data) override; gfx::Size CalculatePreferredSize() const override; + void VisibilityChanged(View* starting_from, bool is_visible) override; + void AddedToWidget() override; void OnPaint(gfx::Canvas* canvas) override; double GetValue() const; @@ -59,6 +61,9 @@ bool IsIndeterminate(); void OnPaintIndeterminate(gfx::Canvas* canvas); + // Fire an accessibility event if visible and the progress has changed. + void MaybeNotifyAccessibilityValueChanged(); + // Current progress to display, should be in the range 0.0 to 1.0. double current_value_ = 0.0; @@ -72,6 +77,8 @@ std::unique_ptr<gfx::LinearAnimation> indeterminate_bar_animation_; + int last_announced_percentage_ = -1; + DISALLOW_COPY_AND_ASSIGN(ProgressBar); };
diff --git a/ui/views/controls/progress_bar_unittest.cc b/ui/views/controls/progress_bar_unittest.cc index 280637e..e633e41 100644 --- a/ui/views/controls/progress_bar_unittest.cc +++ b/ui/views/controls/progress_bar_unittest.cc
@@ -8,38 +8,122 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_node_data.h" +#include "ui/events/test/event_generator.h" #include "ui/gfx/color_utils.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/accessibility/ax_event_manager.h" +#include "ui/views/accessibility/ax_event_observer.h" #include "ui/views/test/views_test_base.h" +#include "ui/views/widget/widget_utils.h" namespace views { -using ProgressBarTest = ViewsTestBase; +namespace { -TEST_F(ProgressBarTest, Accessibility) { - ProgressBar bar; - bar.SetValue(0.62); +class TestAXEventObserver : public AXEventObserver { + public: + TestAXEventObserver() { AXEventManager::Get()->AddObserver(this); } + + ~TestAXEventObserver() override { + AXEventManager::Get()->RemoveObserver(this); + } + + TestAXEventObserver(const TestAXEventObserver&) = delete; + TestAXEventObserver& operator=(const TestAXEventObserver&) = delete; + + int value_changed_count() const { return value_changed_count_; } + + // AXEventObserver: + void OnViewEvent(View* view, ax::mojom::Event event_type) override { + if (event_type == ax::mojom::Event::kValueChanged) + value_changed_count_++; + } + + private: + int value_changed_count_ = 0; +}; + +} // namespace + +class ProgressBarTest : public ViewsTestBase { + protected: + // ViewsTestBase: + void SetUp() override { + ViewsTestBase::SetUp(); + bar_ = new ProgressBar; + + widget_ = CreateTestWidget(); + widget_->SetContentsView(bar_); + widget_->Show(); + + event_generator_ = std::make_unique<ui::test::EventGenerator>( + GetRootWindow(widget_.get())); + } + + void TearDown() override { + widget_.reset(); + ViewsTestBase::TearDown(); + } + + ProgressBar* bar_; + std::unique_ptr<Widget> widget_; + + std::unique_ptr<ui::test::EventGenerator> event_generator_; +}; + +TEST_F(ProgressBarTest, AccessibleNodeData) { + bar_->SetValue(0.626); ui::AXNodeData node_data; - bar.GetAccessibleNodeData(&node_data); + bar_->GetAccessibleNodeData(&node_data); EXPECT_EQ(ax::mojom::Role::kProgressIndicator, node_data.role); EXPECT_EQ(base::string16(), node_data.GetString16Attribute(ax::mojom::StringAttribute::kName)); + EXPECT_EQ(std::string("62%"), + node_data.GetStringAttribute(ax::mojom::StringAttribute::kValue)); EXPECT_FALSE( node_data.HasIntAttribute(ax::mojom::IntAttribute::kRestriction)); } +// Verifies the correct a11y events are raised for an accessible progress bar. +TEST_F(ProgressBarTest, AccessibilityEvents) { + TestAXEventObserver observer; + EXPECT_EQ(0, observer.value_changed_count()); + + bar_->SetValue(0.50); + EXPECT_EQ(1, observer.value_changed_count()); + + bar_->SetValue(0.63); + EXPECT_EQ(2, observer.value_changed_count()); + + bar_->SetValue(0.636); + EXPECT_EQ(2, observer.value_changed_count()); + + bar_->SetValue(0.642); + EXPECT_EQ(3, observer.value_changed_count()); + + widget_->Hide(); + widget_->Show(); + EXPECT_EQ(3, observer.value_changed_count()); + + widget_->Hide(); + bar_->SetValue(0.8); + EXPECT_EQ(3, observer.value_changed_count()); + + widget_->Show(); + EXPECT_EQ(4, observer.value_changed_count()); +} + // Test that default colors can be overridden. Used by Chromecast. TEST_F(ProgressBarTest, OverrideDefaultColors) { - ProgressBar bar; - EXPECT_NE(SK_ColorRED, bar.GetForegroundColor()); - EXPECT_NE(SK_ColorGREEN, bar.GetBackgroundColor()); - EXPECT_NE(bar.GetForegroundColor(), bar.GetBackgroundColor()); + EXPECT_NE(SK_ColorRED, bar_->GetForegroundColor()); + EXPECT_NE(SK_ColorGREEN, bar_->GetBackgroundColor()); + EXPECT_NE(bar_->GetForegroundColor(), bar_->GetBackgroundColor()); - bar.SetForegroundColor(SK_ColorRED); - bar.SetBackgroundColor(SK_ColorGREEN); - EXPECT_EQ(SK_ColorRED, bar.GetForegroundColor()); - EXPECT_EQ(SK_ColorGREEN, bar.GetBackgroundColor()); + bar_->SetForegroundColor(SK_ColorRED); + bar_->SetBackgroundColor(SK_ColorGREEN); + EXPECT_EQ(SK_ColorRED, bar_->GetForegroundColor()); + EXPECT_EQ(SK_ColorGREEN, bar_->GetBackgroundColor()); } } // namespace views
diff --git a/ui/webui/resources/cr_elements/cr_slider/cr_slider.html b/ui/webui/resources/cr_elements/cr_slider/cr_slider.html index 67492e4..8e19892 100644 --- a/ui/webui/resources/cr_elements/cr_slider/cr_slider.html +++ b/ui/webui/resources/cr_elements/cr_slider/cr_slider.html
@@ -49,7 +49,12 @@ } } - :host([dragging]) { + /* TODO(crbug/1068914): For reasons I don't understand we need to set + touch-action: none on the container for sliders inside dialogs and on + the host for sliders not in dialogs. If we don't, then you can't drag + the slider via touch (mouse works fine).*/ + :host([dragging]), + :host([dragging]) > #container { touch-action: none; }
diff --git a/ui/webui/resources/cr_elements/shared_style_css.html b/ui/webui/resources/cr_elements/shared_style_css.html index fed36d9..80b7dbb 100644 --- a/ui/webui/resources/cr_elements/shared_style_css.html +++ b/ui/webui/resources/cr_elements/shared_style_css.html
@@ -102,8 +102,17 @@ border-top: none; } + .cr-row-gap { + padding-inline-start: 16px; + } + /* Typography */ + .cr-padded-text { + padding-block-end: var(--cr-section-vertical-padding); + padding-block-start: var(--cr-section-vertical-padding); + } + .cr-title-text { color: var(--cr-title-text-color); font-size: 107.6923%; /* Go to 14px from 13px. */
diff --git a/url/gurl_unittest.cc b/url/gurl_unittest.cc index 7a4e8727..d0e2e737 100644 --- a/url/gurl_unittest.cc +++ b/url/gurl_unittest.cc
@@ -5,9 +5,11 @@ #include <stddef.h> #include "base/stl_util.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" +#include "url/origin.h" #include "url/url_canon.h" #include "url/url_test_utils.h" @@ -223,16 +225,17 @@ TEST(GURLTest, IsValid) { const char* valid_cases[] = { - "http://google.com", - "unknown://google.com", - "http://user:pass@google.com", - "http://google.com:12345", - "http://google.com/path", - "http://google.com//path", - "http://google.com?k=v#fragment", - "http://user:pass@google.com:12345/path?k=v#fragment", - "http:/path", - "http:path", + "http://google.com", + "unknown://google.com", + "http://user:pass@google.com", + "http://google.com:12345", + "http://google.com:0", // 0 is a valid port + "http://google.com/path", + "http://google.com//path", + "http://google.com?k=v#fragment", + "http://user:pass@google.com:12345/path?k=v#fragment", + "http:/path", + "http:path", }; for (size_t i = 0; i < base::size(valid_cases); i++) { EXPECT_TRUE(GURL(valid_cases[i]).is_valid()) @@ -240,12 +243,14 @@ } const char* invalid_cases[] = { - "http://?k=v", - "http:://google.com", - "http//google.com", - "http://google.com:12three45", - "://google.com", - "path", + "http://?k=v", + "http:://google.com", + "http//google.com", + "http://google.com:12three45", + "file://server:123", // file: URLs cannot have a port + "file://server:0", + "://google.com", + "path", }; for (size_t i = 0; i < base::size(invalid_cases); i++) { EXPECT_FALSE(GURL(invalid_cases[i]).is_valid()) @@ -979,4 +984,43 @@ EXPECT_STREQ("https://foo.com/bar", url_debug_alias); } +TEST(GURLTest, PortZero) { + GURL port_zero_url("http://127.0.0.1:0/blah"); + + // https://url.spec.whatwg.org/#port-state says that the port 1) consists of + // ASCII digits (this excludes negative numbers) and 2) cannot be greater than + // 2^16-1. This means that port=0 should be valid. + EXPECT_TRUE(port_zero_url.is_valid()); + EXPECT_EQ("0", port_zero_url.port()); + EXPECT_EQ("127.0.0.1", port_zero_url.host()); + EXPECT_EQ("http", port_zero_url.scheme()); + + // https://crbug.com/1065532: SchemeHostPort would previously incorrectly + // consider port=0 to be invalid. + SchemeHostPort scheme_host_port(port_zero_url); + EXPECT_TRUE(scheme_host_port.IsValid()); + EXPECT_EQ(port_zero_url.scheme(), scheme_host_port.scheme()); + EXPECT_EQ(port_zero_url.host(), scheme_host_port.host()); + EXPECT_EQ(port_zero_url.port(), + base::NumberToString(scheme_host_port.port())); + + // https://crbug.com/1065532: The SchemeHostPort problem above would lead to + // bizarre results below - resolved origin would incorrectly be returned as an + // opaque origin derived from |another_origin|. + url::Origin another_origin = url::Origin::Create(GURL("http://other.com")); + url::Origin resolved_origin = + url::Origin::Resolve(port_zero_url, another_origin); + EXPECT_FALSE(resolved_origin.opaque()); + EXPECT_EQ(port_zero_url.scheme(), resolved_origin.scheme()); + EXPECT_EQ(port_zero_url.host(), resolved_origin.host()); + EXPECT_EQ(port_zero_url.port(), base::NumberToString(resolved_origin.port())); + + // port=0 and default HTTP port are different. + GURL default_port("http://127.0.0.1/foo"); + EXPECT_EQ(0, SchemeHostPort(port_zero_url).port()); + EXPECT_EQ(80, SchemeHostPort(default_port).port()); + url::Origin default_port_origin = url::Origin::Create(default_port); + EXPECT_FALSE(default_port_origin.IsSameOriginWith(resolved_origin)); +} + } // namespace url
diff --git a/url/origin_unittest.cc b/url/origin_unittest.cc index a41281d..60808c8 100644 --- a/url/origin_unittest.cc +++ b/url/origin_unittest.cc
@@ -483,7 +483,8 @@ {"http", "example.com", 123}, {"https", "example.com", 443}, {"https", "example.com", 123}, - {"file", "", 0}, + {"http", "example.com", 0}, // 0 is a valid port for http. + {"file", "", 0}, // 0 indicates "no port" for file: scheme. {"file", "example.com", 0}, }; @@ -539,12 +540,10 @@ {"http", "example.com\rnot-example.com"}, {"http", "example.com\n"}, {"http", "example.com\r"}, - {"http", "example.com", 0}, {"unknown-scheme", "example.com"}, {"host-only", "\r", 0}, {"host-only", "example.com", 22}, - {"host-port-only", "example.com", 0}, - {"file", ""}}; + {"file", "", 123}}; // file: shouldn't have a port. for (const auto& test : cases) { SCOPED_TRACE(testing::Message()
diff --git a/url/scheme_host_port.cc b/url/scheme_host_port.cc index 96d4912..52d099c 100644 --- a/url/scheme_host_port.cc +++ b/url/scheme_host_port.cc
@@ -79,10 +79,12 @@ switch (scheme_type) { case SCHEME_WITH_HOST_AND_PORT: case SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION: - // A URL with |scheme| is required to have the host and port (may be - // omitted in a serialization if it's the same as the default value). - // Return an invalid instance if either of them is not given. - if (host.empty() || port == 0) + // A URL with |scheme| is required to have the host and port, so return an + // invalid instance if host is not given. Note that a valid port is + // always provided by SchemeHostPort(const GURL&) constructor (a missing + // port is replaced with a default port if needed by + // GURL::EffectiveIntPort()). + if (host.empty()) return false; // Don't do an expensive canonicalization if the host is already
diff --git a/url/scheme_host_port.h b/url/scheme_host_port.h index 6a438fe..fcc1d16 100644 --- a/url/scheme_host_port.h +++ b/url/scheme_host_port.h
@@ -80,8 +80,8 @@ // Creates a (scheme, host, port) tuple. |host| must be a canonicalized // A-label (that is, '☃.net' must be provided as 'xn--n3h.net'). |scheme| - // must be a standard scheme. |port| must not be 0, unless |scheme| does not - // support ports (e.g. 'file'). In that case, |port| must be 0. + // must be a standard scheme. |port| must be 0 if |scheme| does not support + // ports (e.g. 'file'). // // Copies the data in |scheme| and |host|. SchemeHostPort(base::StringPiece scheme,
diff --git a/url/scheme_host_port_unittest.cc b/url/scheme_host_port_unittest.cc index 2ebf7e7..9f41f5b 100644 --- a/url/scheme_host_port_unittest.cc +++ b/url/scheme_host_port_unittest.cc
@@ -91,9 +91,10 @@ } cases[] = { {"http", "example.com", 80}, {"http", "example.com", 123}, + {"http", "example.com", 0}, // 0 is a valid port for http. {"https", "example.com", 443}, {"https", "example.com", 123}, - {"file", "", 0}, + {"file", "", 0}, // 0 indicates "no port" for file: scheme. {"file", "example.com", 0}, }; @@ -130,8 +131,7 @@ {"http", "example.com\rnot-example.com", 80}, {"http", "example.com\n", 80}, {"http", "example.com\r", 80}, - {"http", "example.com", 0}, - {"file", "", 80}}; + {"file", "", 80}}; // Can''t have a port for file: scheme. for (const auto& test : cases) { SCOPED_TRACE(testing::Message() << test.scheme << "://" << test.host << ":"
diff --git a/weblayer/browser/content_browser_client_impl.cc b/weblayer/browser/content_browser_client_impl.cc index 9b4bdd7..c4672070 100644 --- a/weblayer/browser/content_browser_client_impl.cc +++ b/weblayer/browser/content_browser_client_impl.cc
@@ -373,9 +373,10 @@ if (!tab || !tab->has_new_tab_delegate()) return false; - if (container_type == content::mojom::WindowContainerType::BACKGROUND) { - // TODO(https://crbug.com/1019923): decide if WebLayer needs to support - // background tabs. + if (container_type == content::mojom::WindowContainerType::BACKGROUND || + container_type == content::mojom::WindowContainerType::PERSISTENT) { + // WebLayer does not support extensions/apps, which are the only permitted + // users of background windows. return false; }